bugku 前女友WP (md5繞過 strcmp繞過)
阿新 • • 發佈:2022-03-21
bugku 前女友WP (md5繞過 strcmp繞過)
php程式碼如下
<?php if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){ $v1 = $_GET['v1']; $v2 = $_GET['v2']; $v3 = $_GET['v3']; if($v1 != $v2 && md5($v1) == md5($v2)){ if(!strcmp($v3, $flag)){ echo $flag; } } } ?>
關鍵兩點
- v1 != v2 && md5(v1) == md5(v2)
- strcmp(v3, flag)==0
1.md5繞過
法1:md5碰撞
使用fastcoll等工具進行md5碰撞,得到兩個本身不同但md5碼完全相同的字串
法2:科學計數法繞過弱型別比較
使用兩個不同的字串,但md5碼都以0e開頭,即值為0,判斷為相等
如:
QNKCDZO
0e830400451993494058024219903391
240610708
0e462097431906509019562988736854
s878926199a
0e545993274517709034328855841020
s155964671a
0e342768416822451524974117254469
法3:陣列繞過md5函式,返回null
php中md5()之類的雜湊函式計算的是一個字串的雜湊值,對於陣列則返回false
所以傳入兩個不同的陣列即可繞過
2.strcmp繞過
strcmp函式原型
strcmp Binary safe string comparison <?php function strcmp(string $string1, string $string2): int { } @param string $string1 — The first string. @param string $string2 — The second string. @return int
比較的是string字串型別大小,如果傳入陣列則直接返回0,傳入陣列即可成功