打开链接后,嗯,光明正大的放出账号密码,肯定是登不进的,查看源代码
看来是和md5碰撞有关的了,
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,
它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,
其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。
攻击者可以利用这一漏洞,
通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,
如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,
尽管并没有真正的密码。
0e开头的md5和原值:
(加密后值为0)
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
我们随便选一个,将用户名改为s878926199a
将url改为该地址,进入后审计代码
$unserialize_str = $_POST['password'];
$data_unserialize = unserialize($unserialize_str); #unserialize() 对单一的已序列化的变量进行操作,将其转换回 PHP 的值。
if($data_unserialize['user'] == '???' && $data_unserialize['pass']=='???') { print_r($flag); }
伟大的科学家php方言道:成也布尔,败也布尔。 回去吧骚年
1.需要构造序列化的password填入,代码意思是把post提交的password值经过"反序列化"得到一个数组,