Day35
前女友(SKCTF)
flag格式:SKCTF{xxxxxxxxxxxxxxxxxx}

本題要點:strcmp()、md5 collision

滿滿的套路啊~
鏈接打開后,發現一段代碼

讀一下代碼,我們看到strcmp()這個函數

這個函數是用於比較字符串的函數
int strcmp ( string $str1 , string $str2 )
參數 str1第一個字符串。str2第二個字符串。
如果 str1 小於 str2 返回 < 0;
如果 str1 大於 str2 返回 > 0;
如果兩者相等,返回 0。
回看這段代碼
我們可以看到 是以GET形式傳遞3個值,其中v1變量值 != v2變量值,if中的第二個判斷條件用的是 ==,我們可以利用 “0x” == "0a"的判斷結果為1,找出經過加密后的兩個md5值以0開頭,接下去以都相同的值,直到遇到的字母的兩個字符串相等 v3 == flag
那么
方法一:
我們可以通過
PHP處理0e開頭md5時hash字符串漏洞 詳細請看
https://www.cnblogs.com/0yst3r-2046/p/10748412.html (md5 collision之記錄一些MD5值)
構造 index.php?v1[]=QLTHNDT&v2[]=UTIPEZQ&v3[]=EEIZDOI

得到答案:
SKCTF{Php_1s_tH3_B3St_L4NgUag3}
方法二:
在PHP中
MD5是不能處理數組的,md5(數組)會返回null
所以即
md5(a[])==null,md5(b[])==null,md5(a[])=md5(b[])=null也可以滿足代碼中的條件
構造: index.php?v1[]=1&v2[]=2&v3[]=3

完成!
參考資料: