CTF中有關md5繞過的題


想起有次做到這樣一道題:

 

 

 由代碼可知要得到flag需要str1=str2且a!=b

a,b是POST的方式得到,hack,rep是GET方式得到


 

題中的hash函數:

string hash ( string $algo , string $data [, bool $raw_output = false ] )

 

algo
要使用的哈希算法,例如:"md5","sha256","haval160" 等。
data
要進行哈希運算的消息。
raw_output
設置為 TRUE 輸出原始二進制數據, 設置為 FALSE 輸出小寫 16 進制字符串。

 

題中為對變量a進行md5加密


題中的strstr函數:

strstr ( string $haystack , $needle [, bool $before_needle = FALSE ] ) 

結果返回 haystack 字符串從 needle 第一次出現的位置開始到 haystack 結尾的字符串。

若before_needle= TRUEstrstr() 將返回 needle 在 haystack 中的位置之前的部分。

 


md5繞過原理:

 

PHP在處理哈希字符串時,會利用”!=”或”==”來對哈希值進行比較,它把每一個以”0E”開頭的哈希值都解釋為0,

 

所以如果兩個不同的密碼經過哈希以后,其哈希值都是以”0E”開頭的,那么PHP將會認為他們相同,都是0。

 

常用的有:

QNKCDZO

s878926199a

s155964671a

......


 

 

解題:

題中先對a和b進行了md5加密,這里我們用a=QNKCDZO,b=s878926199a.(因為它們md5加密后都為0e開頭)

則得到str1=0e830400451993494058024219903391

而后由strstr函數的性質,這里令hack=e,rep=true

str2=strstr("0e545993274517709034328855841020","e",true)=0

所以最后滿足了str1=str2且a!=b,得到flag:

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM