比賽時(shí)出去爬(liu)山(han)了,借著服務(wù)器還沒(méi)關(guān)趕緊玩一玩,學(xué)習(xí)一波新姿勢(shì)~
web簽到
這題主要考察php的弱類(lèi)型,要求變量原值不同但 md5 或 sha1 相同。
PHP轉(zhuǎn)換的規(guī)則的是:若字符串以數(shù)字開(kāi)頭,則取開(kāi)頭數(shù)字作為轉(zhuǎn)換結(jié)果,若無(wú)則輸出0。
- 1、==判斷
if($_POST['param1']!=$_POST['param2'] && md5($_POST['param1'])==md5($_POST['param2'])){
die("success!");
}
240610708 和 QNKCDZO md5 值類(lèi)型相似,但并不相同,在”==” 相等操作符的運(yùn)算下,結(jié)果返回了 true。只需要找到md5值為0exxx(xxx全為數(shù)字,共30位),(4個(gè)都可以通過(guò)的值:240610708、QNKCDZO、aabg7XSs、aabC9RqS),在“==”相等操作符的運(yùn)算下,結(jié)果都返回true。
- 2、===判斷
if($_POST['param1']!==$_POST['param2'] && md5($_POST['param1'])===md5($_POST['param2'])){
die("success!");
}
Md5 和 sha1 對(duì)一個(gè)數(shù)組進(jìn)行加密將返回 NULL;而 NULL===NULL 返回 true,所以可繞過(guò)判斷。
因此第二步輸入param1[]=QNKCDZO¶m2[]=240610708
- 3、構(gòu)造碰撞
if((string)$_POST['param1']!==(string)$_POST['param2'] && md5($_POST['param1'])===md5($_POST['param2'])){
die("success!);}
這里限定了string的類(lèi)型,無(wú)法使用php黑魔法繞過(guò),用fastcoll_v1.0.0.5_MD5偽造碰撞工具生成兩個(gè)md5一樣的文件上傳。
官方給的writeup通過(guò)md5的生日攻擊,構(gòu)造了如下payload:param1=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%00%A8%28K%F3n%8EKU%B3Bu%93%D8Igm%A0%D1U%5D%83%60%FB%07%FE%A2¶m2=M%C9h%FF%0E%E3%5C%20%95r%D4w%7Br%15%87%D3o%A7%B2%1B%DCV%B7J%3D%C0x%3E%7B%95%18%AF%BF%A2%02%A8%28K%F3n%8EKU%B3Bu%93%D8Igm%A0%D1%D5%5D%83%60%FB%07%FE%A2
Three hit
這道題考查的是Mysql的二次注入,同時(shí)注意mysql中的特殊庫(kù)information_schema的表的含義。

題目注冊(cè)時(shí)對(duì)age做了數(shù)字限制,想到is_numeric函數(shù)十六進(jìn)制繞過(guò)。
環(huán)境關(guān)了,哭唧唧.......留坑待補(bǔ)。