zl程序教程

您现在的位置是:首页 >  其他

当前栏目

WEB漏洞攻防正确学习姿势

漏洞Web学习 正确 姿势 攻防
2023-09-14 09:05:18 时间
关注点:漏洞的原理,产生的原因,可利用点,形成自己的思路。

知识点:每种漏洞的大体框架、漏洞的分类,技术实现的不同点。

利用点:漏洞发现之后的可利用方式,工具、手工等,利用的过程中不成功的原因的详细分析。

拓展点:漏洞出现后发现的新的漏洞或者新的利用方式。


以上的方法虽然仅是理论上的,但是做到位了,基本上也算是掌握了一个正确的学习方法,后续不论是内网也好还是代码审计也好,万变不离其踪。

WEB攻防漏洞的本质

漏洞特定函数:

	漏洞的成因必然会涉及到所用的函数,不同的开发语言都有一些特定的函数用于不同的作用。

	有些函数用于数据库查询,有的函数用于文件读写,有的函数用于调试输出等。函数在使用的时候会和漏洞形成的关系是什么?

	漏洞产生的原因必定会使用到类似的脚本语言的特定函数,比如SQL注入漏洞,必然会涉及到数据库查询操作类的相关函数。

	这就是漏洞的特定函数。所以在代码层,我们就可以通过函数猜解存在有那些漏洞,反推也可以根据漏洞猜解使用了哪些特定函数。
	

传输可控变量:
	
	一般情况下,漏洞在确定存在的情况下,必然存在一个可受控制的变量值,正因该变量值受控制,所以才导致漏洞的形成。
	
	下文的一个简单SQL注入漏洞的源码可以直观的显示该过程,可理解的更深入。

漏洞过滤形式:
	
	指的就是在漏洞(这么说好像不太合适)形成的过程中有无相关的检测和防护,过滤了一些的操作在代码中形成。

	这也是判断一些漏洞是否存在的直观表现。

PHP代码中存在的漏洞函数与变量之间的关系

以DVWA(网络上公开的漏洞靶场)存在的简单的SQL注入、文件上传漏洞演示代码进行举例(实际上没开发会写这么弱智的代码,特殊情况除外,如果雷同,纯属巧合)


在这里插入图片描述


上图中的"$id"就是一个变量,该变量的参数由用户传参决定,这就是一个可控的变量参数;同时"$mysqli_query"函数和"$query"进行拼接执行查询数据,这里就形成了SQL注入漏洞,并不是说"$mysqli_query"函数是有漏洞的,而是由该函数所带来的安全问题造成了SQL注入漏洞的形成。


在这里插入图片描述


同样的上图是一个简单的上传文件功能的代码,途中的"$POST"函数接收的就是一个文件变量,"move_uploaded_file"函数为移动上传文件函数,文件移动涉及到的就是文件的操作,文件的操作就可能涉及到文件的安全问题。

通过以上两个简单的案例,我们就可以看出,一个漏洞的产生就涉及到了两个问题,第一个就是漏洞涉及到的函数,这个函数将决定该漏洞的类型。如果是文件操作类的函数,就有可能产生文件操作类的漏洞;如果用的是数据库操作类的函数,就有可能产生SQL注入的相关漏洞。

那么如果说当这些变量的参数是写死的情况下,是否还会产生相应的漏洞呢?这个时候因为变量参数不可控制,无法控制的情况下只有一种执行结果,无法更改变量值,更改不了变量值,这个漏洞就不会产生。

在后续我们了解到更多的漏洞的时候,每个漏洞的产生、利用,就会发现每个漏洞在和哪些东西在打交道,对应的了解到这些漏洞都是由哪些函数做的支撑。

所以这也是代码分析审计理解漏洞的根本原因,后期分析漏洞的时候,就是分析函数的作用及可能引发的一些安全问题。