题目
观察分析
用IDA打开文件:
注意到这道题最核心的漏洞:
1 | __isoc99_scanf(&unk_26E1, s); |
原本只给s分配了8位的缓冲区(char s[8];
),而scanf是没有长度限制的,所以可以利用Buffer Overflow。
查看win()
函数:
发现会直接读取flag。
所以我们需要做的就是绕过这个if检测:
1 | if ( v25 == 3735928559LL ) |
通过Buffer Overflow覆盖掉v25
的值即可。
最后再来查看一下当前main()
函数的Stack结构(直接点击v25
):
发现从s到v24一共有40位(=-0x08 - (-0x30) = -8 + 3*16 = -8 + 48),而v25一共占8位。
Exploit
这道题它给了一个python的模板。
1 | #!/usr/bin/python3.8 |