1. 程式人生 > >中山大學招新賽-fake md5 collision

中山大學招新賽-fake md5 collision

fake md5 collision

時間:2018年9月28日 彙報人:王禕潔

題目

在這裡插入圖片描述

Writeup

一看這架勢,先檢視頁面原始碼,尋找兩個輸入框之間的關係:
在這裡插入圖片描述

通過這個關係進行flag的獲取,先嚐試初步輸入a,b後的情況:
在這裡插入圖片描述

在這裡插入圖片描述
發現可以在位址列動手腳:
在這裡插入圖片描述
![4](C:\Users\1216\CTF\小白日常學習總結(2018.07.24-\Web\中山大學招新賽\fake md5 collision\4.PNG)

答案就出來了!

  • 那麼問題來了,為啥要將a,b轉化為陣列形式?
  • 分析程式碼邏輯,發現GET了兩個欄位name和password,獲得flag要求的條件是:name != password & sha1(name) == sha1(password),乍看起來這是不可能的,其實可以利用sha1()函式的漏洞來繞過。如果把這兩個欄位構造為陣列,如:?name[]=a&password[]=b,這樣在第一處判斷時兩陣列確實是不同的,但在第二處判斷時由於sha1()函式無法處理陣列型別,將報錯並返回false,if 條件成立,獲得flag。

這裡連結一道題:實驗吧的FALSE

  • ps:各位有沒有想過題目為何叫FALSE?sha1和md5函式在計算摘要的時候,不能處理陣列型別的資料,處理這種型別的資料,會報錯,併產生false

以及兩篇部落格: