美文网首页
(进阶)代码审计文件包含漏洞

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

作者: FKTX | 来源:发表于2018-01-22 08:02 被阅读0次

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

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

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

    本地文件包含

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

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

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

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

    远程文件包含

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

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

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

    文件包含截断:

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

    %00截断

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

    多个.和多个/截断

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

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

    利用?进行伪截断

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

    文件读取漏洞

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

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

    文件读取函数有:
    file_get_contents() , highlight_file() , fopen() , readfile() , fread() , fgetss() , fgets() , parse_ini_file() , show_source() , file()

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

    文件上传漏洞

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

    未过滤或本地过滤

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

    黑名单过滤

    缺点,限制扩展名不够全

    还有就是容易被绕过。

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

    任意文件删除漏洞

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

    补充几个常见函数:

    有感叹号!

    相关文章

      网友评论

          本文标题:(进阶)代码审计文件包含漏洞

          本文链接:https://www.haomeiwen.com/subject/ltttaxtx.html