1. 程式人生 > 其它 >Bugku-8.前女友-MD5,strcmp()繞過

Bugku-8.前女友-MD5,strcmp()繞過

原始碼發現連結

<?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;
        }
    }
}
?>

1.需要get傳入v1,v2,v3

2.v1!=v2,且v1和v2的md5相等(難道是找碰撞?)

3.strcmp()

返回值:

0 - 如果兩個字串相等

<0 - 如果 string1 小於 string2

>0 - 如果 string1 大於 string2

區分大小寫,!strcmp($v3, $​​​flag)要為1,意思是v3為flag的內容

MD5繞過的技巧 - _Whoami - 部落格園 (cnblogs.com)

php在處理0e開頭的字串存在缺陷,0e開頭字串相比較,會相等,也就是說"0e123"=="0e456"的值是1。

所以在處理的時候,推薦使用全等於===

md5('240610708') ==md5('QNKCDZO')

返回True

strcmp()5.3之後的有這個漏洞:

strcmp函式無法比較陣列,物件,會返回0

輸入?v1=240610708&v2=QNKCDZO&v3[]=1獲得flag