PHP代码审计基础:目录遍历及文件包含漏洞

文章目录

      • 目录遍历
        • 危害
        • 测试代码
        • 绕过方式
        • 修复方案
      • 文件包含
        • 危害
        • 本地包含
        • 测试代码
        • 远程包含
        • 文件包含挖掘经验
        • 修复建议

目录遍历

目录穿越(directory traversal)是HTTP开发的一种形式,黑客在一个Web服务器上使用这个软件除了可以访问服务器的根目录外还可以访问目录里面的数据。如果这种企图成功的话,那么黑客就可以查看到这些受限制的文件或者是服务器上的执行命令。Directory traversal攻击时一般是使用Web浏览器。从Web浏览器输入数据的任何服务器都很容易受到这种类型的攻击。

危害

造成敏感信息泄露、数据泄露等危害,单说这一个漏洞倒是没什么,主要是组合起来进行攻击,结合敏感信息去搜集一些exp等等,轻则站点被黑,重则服务器被黑

测试代码


if(isset($_GET['file'])){
     
    readfile("../file/".$_GET['file']);
}

读取上级目录sql中的index.php

http://1.1.1.137:8888/dirthourgh/index.php?file=../sql/index.php

PHP代码审计基础:目录遍历及文件包含漏洞_第1张图片

绕过方式

  • 进行URL编码
  • 进行16位unicode编码
  • 进行URL二次编码
  • 进行超长UTF8 Unicode编码

修复方案

  • 在URL内不要使用文件名称作为参数
  • 检查使用者输入的文件名是否存在“…”这样的目录阶层参数
  • 在php.ini中设置open_basedir来指定文件的目录
  • 使用realpath函数来展开文件路径中的“./”、“…/”这样的字符,然后返回绝对名称路径
  • 使用basename函数来返回不包含路径的文件名称

文件包含

文件包含漏洞的成因就是在引用文件时,文件名用户可控,且传入的文件名没有合理的校验,或者校检被绕过,从而操作了预想之外的文件,就可能导致敏感文件泄露甚至恶意代码注入,当被包含的文件在本地时,就形成了本地文件包含,被包含的文件在第三方服务时,就形成了远程文件包含

危害

  • 执行恶意代码
  • 包含恶意文件控制网站
  • 甚至控制网站服务器等

本地包含

本地包含(Local File Include,LFI攻击),允许攻击者包含本机上的文件。当一个WEB应用没有正确过滤输入数据的情况下,就有可能存在这个漏洞,该漏洞允许攻击者操作输入数据,注入路径遍历字符、包含Web服务器的其他文件。

测试代码

index.php


$file = $_GET['file'];
if (isset($file)){
     
    include($file);
}

phpinfo.php

phpinfo();

本地包含一下

http://1.1.1.137:8888/include/index.php?file=./phpinfo.php

PHP代码审计基础:目录遍历及文件包含漏洞_第2张图片

现在威力还不是最大的,我们结合上文的目录穿越,去包含一下
PHP代码审计基础:目录遍历及文件包含漏洞_第3张图片

远程包含

远程包含(Remote File Include,RFI攻击),允许攻击者包含远程文件,需要设置allow_url_include = On,四个文件都支持HTTP、FTP等协议,相对本地文件包含共容易利用,自然出现的频率也没有本地文件包含多。

首先你得配置一下php.ini,把allow_url_include打开,接着上面的代码,我们来测试一下:
PHP代码审计基础:目录遍历及文件包含漏洞_第4张图片

文件包含挖掘经验

  1. 模块加载、cache调用,传入的参数拼接包含路径

  2. include()
    使用此函数,只有代码执行到此函数时才将文件包含进来,发生错误时只警告并继续执行

  3. include_once()
    功能同前者一样,,之不过同一文件只能被包含一次

  4. require()
    使用此函数,只要程序执行,就会立即调用包含文件,如果程序出错,会立即停止执行剩下的代码

  5. require_once()
    效果同前者,同一文件至多包含一次

修复建议

  • 关闭远程包含参数开关
  • 设置类似白名单的方法,筛选文件名
  • 常见目录穿越字符进行过滤,比如…/、./、…\等

你可能感兴趣的:(代码审计:基础)