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

文件包含漏洞原理
程序开发人员一般会把重复使用的函数写到单个文件中,需要使用某个函数时直接调用此文件,而无需再次编写,这种文件调用的过程一般被称为文件包含。通过函数包含文件时,由于没有对包含的文件名进行有效的过滤处理,被攻击者利用从而导致了包含了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张图片
2、写入文件
使用input写入文件
渗透测试入门知识-文件上传漏洞原理到实战_第3张图片
如何防御

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

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

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

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

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

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

你可能感兴趣的:(渗透测试)