用途:针对 PHP 弱类型比较逻辑的安全测试方法论,适用于密码比较、哈希校验、认证逻辑等场景。
主要能力:
- 快速识别:PHP 5.x、错误响应泄露 MD5/SHA1 哈希、登录认证页面、JSON API、源码出现 ==、strcmp、md5() 等信号。
- Magic Hash:PHP 将 "0e" 开头纯数字字符串按科学计数法处理,故 "0e123" == "0e456" 为 true。当后端用 md5($input) == $stored_hash 时,输入任一 MD5 为 0e 开头的字符串即可通过。常用 MD5 magic string 包括 240610708、QNKCDZO、aabg7XSs、aabC9RqS、s878926199a、s155964671a、s214587387a、0e215962017;SHA1 包括 aaroZmOk、aaK1STfY、aaO8zKZF、aa3OFF9m。
- 直接类型杂耍:如 0 == "any_string"(PHP 5.x)、false == ""、"0" == null 为 false 等。
- JSON 类型注入:向 JSON 接口发送 password=true、0、[] 等非字符串类型绕过比较。
- strcmp 绕过:传数组参数使 strcmp 返回 NULL,NULL == 0 为 true,如 password[]=anything。
- 哈希数组绕过:md5(array) 返回 NULL,a[]=1&b[]=2 可使 NULL == NULL 成立。
- 严格比较绕过:=== 时需真实 MD5 碰撞对。
- 版本差异:0 == "string" 在 PHP 8 已修复,但 "0e..." == "0e..." 仍有效;strcmp/md5 传数组在 PHP 8 抛 TypeError。
使用方式:按识别信号判断场景,优先尝试 240610708 与 QNKCDZO;可用 curl 批量提交 magic string 或发送 JSON/数组参数。
限制:0e 后必须全为数字才触发;=== 比较下 magic hash 与数组技巧无效;需确认目标为 PHP 后端。渗透报告中可标记为 CWE-1025。