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部分完成。