php代码审计文件包含,(进阶)代码审计文件包含漏洞

在代码审计审核这类漏洞的时候,需要注意以下几个函数:

include(),include_once(),require(),require_once()

通常根据这几个函数,来回溯变量,检查变量是否过滤完全。若没有进行过滤,就可能存在安全隐患。

本地文件包含

本地包含通常有以下几种利用方式:

1.上传代码执行文件,利用本地文件包含漏洞来执行代码。

2.将请求url中,加入要执行的代码,然后本地包含WebServer的日志,执行代码。

3.linux环境下可以包含/proc/self/environ

远程文件包含

在代码审计中,远程文件包含这个漏洞出现的概率并不会太大。但是比本地文件包含更容易利用。

可能出现这个漏洞的前提是:必须开启了allow_url_include=on

通常远程文件包含的利用方式和本地包含一样。但是远程文件包含自己还有一种输入输出流的利用方式:

de363aad3da4

文件包含截断:

文件包含的时候,程序代码部分往往都是有后缀的,比如开发者从前端获得一个文件名,他往往会在代码中加上.php这样的后缀。假如,我们上传的文件不是.php文件,那么若想包含成功,就必须用到截断。

de363aad3da4

%00截断

在php版本为5.3之后,就没有这种漏洞了。并且,即使在5.3之前,这个%00截断也受限于GPC过滤,addslashes过滤

de363aad3da4

多个.和多个/截断

在PHP5.3之前,利用这个多个.和/也是可以截断的。而且这种方式不受GPC限制。

windows环境,240个点可以截断,或者240个./可以截断。linux环境是2048个才可以。

de363aad3da4

利用?进行伪截断

这种截断方式不受GPC和PHP版本限制。原理就是webserver将问号后面的数据当做是参数,因此可以实现截断。

de363aad3da4

文件读取漏洞

产生原因:用户请求某个文件的读取,程序没有对请求的参数进行过滤,导致任意文件读取。

代码审计方法:

可以先进行黑盒查看功能点对应的文件,在去读相关的文件,这样找的比较快。另外,就是在代码中寻找读取文件的函数,逆向追踪相关变量,找出没有过滤的变量。

文件读取函数有:

file_get_contents() , highlight_file() , fopen() , readfile() , fread() , fgetss() , fgets() , parse_ini_file() , show_source() , file()

同时,include也可能存在文件读取漏洞。还有一种我不太懂的,php输入输出流php://filter/来读取文件。

文件上传漏洞

文件上传漏洞很好理解,就是没有过滤好。开发者在写这部分功能的时候,通常要么是利用框架写,要么是利用上传函数写。因此代码审计的时候只要搜索move_upload_file()这个函数,再去看代码是否限制上传格式,是否可以绕过。

未过滤或本地过滤

未过滤就是什么文件都能上传成功。本地过滤就是截获数据包,修改就可以上传成功。

黑名单过滤

缺点,限制扩展名不够全

de363aad3da4

还有就是容易被绕过。

比如程序过滤的时候,在前端提取的是是php+空格为后缀,程序与过滤规则进行匹配,规则中有php,但是没有空格,那么就不匹配了。另外还有%00截断。

任意文件删除漏洞

任意文件删除漏洞和读取原理一样,只不过函数变成了删除函数。

补充几个常见函数:

de363aad3da4

de363aad3da4

de363aad3da4

有感叹号!

de363aad3da4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值