運氣很好,解了一題

Rainbow Mountain

Download binary

程式邏輯

  • user 可以輸入兩次,第一次選擇 function
  • binary 提供 2000 個 function 供 user invoke
  • user 可以輸入兩次,第一次選擇 function
  • 第二次輸入是調用這個 function 的參數
  • 然後這個調用的方式它寫的很醜,逆了一陣子才知道他就是單純調用,它裡面塞了一些沒用的 function(function 的功能就是返回帶進去的參數)
  • 每個 function 的功能其實就是比對 stack 中的某兩個 8bytes 的值是否一樣
  • 然後某些 functionoverflow 0~4 bytes,這是工人智慧出來的

解題思路

  • 所以弄了一個 script,對每個 function1500 個 A

這邊很幸運,因為 1500 個 A 是迴文,他其實有些 function 會判斷檢查 input 是不是迴文

  • 發現其中 1576 可以 overflow 8 個 bytes
  • 然後進去看他的判斷條件是要蓋成 4GxC95IF 這個
  • 就拿去 base64 encode 然後餵給程式
  • 比較特別的是他在比對之前會進行一個迴文的判斷,所以最後的 payload 會長這樣 : NEd4Qzk1SUZBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUZJNTlDeEc0