(Jarvis Oj)(Pwn) Smashes
查看保护。打开了栈保护。看上去有点麻烦。
再来分析下程序代码。如下是主要的函数体部分。
这个函数首先让我们输入name字符串,通过gets()函数,是有溢出的,但是在输入过长的字符串时程序会abort。
并且提示 ./smashes terminated 这里其实是ssp(Stack Smashing Protector)的提示信息,而./smashes 这里是main函数参数的argv[0],所以这个参数是在栈中的,又有gets()函数不检查字符串长短,通过覆盖到argv[0],就可以构造ssp leak达到任意地址读。接下来的问题就是如何定位到argv,以及泄露什么地方的内容。通过上面的函数,有个overwrite flag的操作,将600d20处的字符串给修改了,跟到这里。
发现了很像flag的字串,但服务器上肯定不是这串,既然flag就在程序中,那么泄露的内容就确定了,但是程序执行的过程中会把flag给修改了,这里有个小知识,当ELF文件比较小的时候,他的不同区段可能会被多次映射,也

博客分析了一个名为(Jarvis Oj)(Pwn) Smashes的程序,该程序启用了栈保护并使用gets()函数,存在栈溢出漏洞。通过覆盖argv[0],可以实现ssp leak来读取任意地址。目标是找到argv的位置,泄露0x400d21地址的内容,因为那里存在flag的备份。利用gdb找到了程序中未被修改的flag备份,并计算padding来实施攻击。
最低0.47元/天 解锁文章
614





