PHP漏洞在白盒审计中的技巧(4)——PHP伪协议利用
💡
原文中文,约6600字,阅读约需16分钟。
📝
内容提要
本文探讨了PHP伪协议的多种攻击方式,包括利用php://filter、php://input、data://、zip://和phar://协议进行代码执行和文件包含攻击。同时,文章提供了防御策略,如输入过滤、禁用危险配置和代码加固,以防止这些漏洞的利用。
🎯
关键要点
- PHP伪协议攻击方式包括php://filter、php://input、data://、zip://和phar://协议。
- php://filter可用于读取敏感文件源码,通过Base64编码绕过文件包含。
- php://input可执行任意代码,通过POST请求注入PHP代码。
- data://协议可直接执行Base64编码的PHP代码,若allow_url_include开启则直接执行。
- zip://和phar://协议可利用上传恶意文件进行攻击,需注意文件内容校验。
- 防御策略包括输入过滤、禁用危险配置和代码加固,避免动态包含用户输入。
- 多层过滤器链可绕过关键字过滤,利用组合过滤器实现攻击。
- glob://协议可遍历目录结构,帮助攻击者发现敏感文件。
- 特殊场景下,ogg://协议可触发反序列化攻击,需禁用非常用扩展。
- WAF可通过编码转换绕过,需注意UTF-16编码的攻击方式。
- PHAR文件可通过远程URL包含触发,需确保allow_url_include开启。
❓
延伸问答
PHP伪协议攻击有哪些常见方式?
常见的PHP伪协议攻击方式包括php://filter、php://input、data://、zip://和phar://协议。
如何利用php://filter协议进行攻击?
可以通过构造URL利用php://filter的Base64编码过滤器,绕过文件包含直接读取敏感文件源码。
php://input协议的攻击原理是什么?
通过php://input协议,可以在POST请求体中注入PHP代码,从而执行任意代码。
如何防御PHP伪协议的攻击?
防御策略包括输入过滤、禁用危险配置和代码加固,避免动态包含用户输入。
zip://和phar://协议的攻击方式有什么区别?
zip://协议利用上传恶意ZIP文件进行攻击,而phar://协议则通过反序列化恶意PHAR文件触发攻击。
在PHP中,如何避免动态包含用户输入?
可以通过使用固定包含逻辑,避免使用动态包含用户输入的方式来提高安全性。
➡️