题目描述:只要知道你的年龄就能获得flag,但菜鸡发现无论怎么输入都不正确,怎么办。
题目分析:题目描述看起来云里雾里的,那么我们进行我们的常规步骤来分析这道题
checksec查看文件保护机制
发现PIE未开启,即没有地址空间随机化机制。
file命令查看文件类型
nc命令尝试运行
使用了nc命令,远程连接,并没有发现特殊的东西。
使用ida对文件进行反编译,
未编译
主函数
对主函数的伪代码进行分析,发现当输入年龄v5为1926时,有命令system(“cat flag”)得到flag,而在上面的逻辑中,是不准许v5为1926的,否则直接退出,如下图所示
查看源伪代码,发现逻辑十分矛盾,要得到v5为1926才能得到flag但又不准v5为1926,这个时候想到了溢出覆盖,溢出覆盖到v5为1926,而除了v5还有宁一个也赋予了地址空间的v4。查看地址空间
地址空间
v4对应的地址空间是-0x20,v5对应的是-0x18,而该文件是没有地址随机机制的,那么我们就可以在get(&v4)这个点的时候让v4溢出v5的内存得到1926。(payload=‘a’*(0x20-0x18)+p64(1926))
exp
得到结果
原文:https://www.cnblogs.com/Samforrest/p/13447971.html