2025-07-26-shaktictf-Amogus
题目简介
一道shaktictf比赛上的题目,链接在这7月26日shaktictf比赛:Amogus原题
原本的英文题目描述如下:
I always end up dying in this Amogus game… before I even get a chance to properly play! Ugh!
Is there any way I can escape this cruel fate?
大概意思就是目标二进制程序是模拟一个游戏,但是每次一开始就会死亡,需要我们找到办法正确启动游戏(避免死亡)
漏洞点分析
反正光看描述是云里雾里的,只能猜到应该是要绕过一个什么验证
于是直接把附件给的ELF拖到IDA里面看下:
首先如上图,在IDA里观察main函数调用了一个gameplay函数,联想到题目描述,导致“死亡”的元凶应该在这个gameplay里面,追踪进去看一下:
分析这个函数可以发现,需要v4变量=”ALIVE”才能获得flag,但是在校验之前v4有一个将”DEAD”拷贝给v4的操作,看起来似乎v4必定会=“DEAD”
但是,注意到第11行的字符串拷贝语句,由于strcpy不会检查长度,而是遇到0字节停止,而恰好dest缓冲区在v4下方,而参数a1又是攻击者可控的,因此可以通过dest溢出将v4覆盖为”ALIVE”
漏洞点利用
dest缓冲区16个字节,只需要填满dest缓冲区,再加上”ALIVE”,最后以0字节截断即可
由此构造的payload=b’1’*16+b”ALIVE”+b’\x00’,最终的利用脚本如下:
1 | |
2025-07-26-shaktictf-Amogus
http://0x4a-210.github.io/2025/07/26/pwn刷题记录/其他技巧类/2025-07-26-shaktictf-Amogus/