渗透测试入门知识-文件上传漏洞原理到实战

文件包含漏洞原理

       程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。通过函数包含文件时,由于没有对包含的文件名进行有效的过滤处理,被攻击者利用从而导致了包含了Web根目录以外的文件进来,就会导致文件信息的泄露甚至注入了恶意代码。

分类

      本地文件包含

           被包含的文件在本地服务器中。

      远程文件包含

           被包含的文件在第三方服务器中。

文件包含函数

           a、include():只有代码执行到该函数时才会包含文件进来,发生错误时只给出一个警告并继续向下执行。

           b、include_once():和include()功能相同,区别在于当重复调用同一文件时,程序只调用一次。

           c、require():只要程序执行就包含文件进来,发生错误时会输出错误结果并终止运行。

           d、require_once():和require()功能相同,区别在于当重复调用同一文件时,程序只调用一次。

存在的风险

      读取文件、写入文件。

 实战

      环境

          攻击目标

                系统:Ubuntu16.04

                IP:192.168.1.11

                环境:Apache2+PHP7.2+mysql5.7

                应用:DVWA

     1、 读取文件

原网页

            读取本地账户../../../../../../etc/shadow

读取本地账户信息 

     2、写入文件

           使用input写入文件

如何防御 

       1、严格检查变量是否已经初始化。

       2、严格判断包含中的参数是否外部可控。

       3、基于白名单的包含文件验证,验证被包含的文件是否在白名单中。

       4、尽量不要使用动态包含,可以在需要包含的页面固定写好,如:include("func.php")。

       5、对所有输入提交可能包含的文件地址,包括服务器本地文件及远程文件,进行严格的检查,参数中不允许出现../之类的目录跳转符。

       6、可以通过调用str_replace()函数实现相关敏感字符的过滤,一定程度上防御了远程文件包含。

你可能感兴趣的:(渗透测试入门知识-文件上传漏洞原理到实战)