2025-10-31-php伪协议深入刨析
PHP伪协议本质
例:
1 | include($_GET['url']); |
传入url=php://input 消息载体为 <?php system("xxx");?> 即可执行命令
为什么可以?
php伪协议是 PHP内置的流包装器
- 通过URL传递
?url=php://input并在请求体中传入<?php system("xxx);?>时,include函数会执行请求体中的内容作为PHP代码
过程:
php://input流读取了HTTP请求体中的原始数据(即<?php system("xxx");?>)。include函数将这些数据当作PHP文件执行,因此system("xxx")命令被运行,并将结果返回。
日志包含漏洞
本质上就是把危险的php代码注入到日志中,然后把日志作为php代码解析进去(因为文件包含可以包含到日志文件)
例如 CTF秀的 web4
众所周知,Linux系统下,日志位置是:/var/log/nginx/access.log
题目提示是: <?php include($_GET['url']);?> 文件包含这个url= 什么
他的日志格式是这样的
172.12.109.181 - - [31/Oct/2025:08:03:09 +0000] "GET / HTTP/1.1" 200 715 "https://ctf.show/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:144.0) Gecko/20100101 Firefox/144.0"
Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:144.0) 是来自客户端的信息,也就是我的浏览器,这个我可以任意更改,我直接改成木马,然后让其包含,就getshell了。
MD5 判断 绕过
依然继续在CTF秀中学知识
1 |
|
1.md5比较使用松散比较。在PHP中,松散比较(==)会进行类型转换。如果两个md5哈希值在比较时被转换为数字或其它类型,就有问题!
2.如果! md5加密后密文都以 0e 开头,PHP会当作科学计数法来处理,也就是0的n次方,因此会实现绕过!
以下是一些著名的数值
1 | 字符串: 240610708 | MD5: 0e462097431906509019562988736854 |