第二屆強網杯部分writeup


MD5部分

第一題

 

 

一看就有些眼熟 emmmm

查看一下源代碼:

 

 

重點是這里

 

 

這里面要求POST上去的參數 param1 != param2 && md5(‘param1’) == md5(‘param2’)

這道題運用了php的一個哈希比較缺陷,就是php在處理0e開頭md5哈希字符串時,會將他看成 0 (具體下面那篇文章)PHP在處理哈希字符串時,會利用”!=”或”==”來對哈希值進行比較,它把每一個以”0E”開頭的哈希值都解釋為0,所以如果兩個不同的密碼經過哈希以后,其哈希值都是以”0E”開頭的,那么PHP將會認為他們相同,都是0。

http://www.freebuf.com/news/67007.html

那么,我們構造兩個不一樣的字符,md5加密后以0E開頭的,就可以驗證成功

 

 

提交上去

 

 

成功

 

第二題

 

 

依舊是一道和MD5有關的

我們看一下源代碼

 

 

此時比較符已經變成了 === 這樣的類型 ,我們可以知道,在php官方給出的補丁中,就是改用了===修復了這個缺陷。

在PHP中,我們可以知道,md5()這個函數是這樣定義的:md5(string,raw)

也就是說,第一個必須是字符串,那么假設我們傳入的不是一個字符串呢?

我們構造一下php代碼看看

 

 

運行一下

 

 

發現報錯了

這里邊我們構造了一個數組,傳入到md5()這個函數里邊,報錯提示md5()第一個參數必須為str類型。但是程序依然會繼續運行,我們修改一下代碼看看是不是這樣的

 

 

這里我們加入判斷,顯然,if的條件是不符合的,那么,程序會不會輸出seccess呢?

我們運行一下

 

 

這里我們看到,即使條件不符合,也打印出了seccess

因此,這里我們只要通過burp抓包,將提交的參數改成數組,就可以了

 

 

 

第三題

 

 

先來看看源代碼

 

 

這里限定了str的類型,第二題的方法在這里就不適用了。

 因此我們在這里,使用的是文件的碰撞。

我們用到了fastcoll_v1.0.0.5 這個軟件,用來生成兩個有着相同MD5值的文件。

先創建兩個空的TXT文件,分別為1.txt和2.txt,兩個文件名不一樣即可

命令如下:

這邊已經生成了兩個文件,我們校驗一下他們的MD5值

我們可以看到,他的MD5是相等的

那么我們怎么提交上去了?沒錯,就是URL編碼成二進制

Py3代碼如下

就得到了兩個文件的編碼,我們通過burp抓包,然后把我們的東西提交上去

成功的拿到了flag

PS:這里西安的大佬說要構造一下XFF頭,雖然不知道為什么,但還是聽了一下大佬的話。

自此,MD5部分完成。

 


免責聲明!

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



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