攻防世界cgpwn2

首先checksec,之后放入IDA中

在这里插入图片描述
点进hello
在这里插入图片描述发现gets()函数可能会存在栈溢出,然后我们点进name
在这里插入图片描述发现 name 地址是固定的,那我们可以它写入 bin/sh ,接着看能不能找到system
在这里插入图片描述找到啦!所以这个题目的思路是:通过栈溢出漏洞,调用system函数,同时在name中写入"/bin/sh",把参数地址设置为name的首地址,就可以getshell了!
在这里插入图片描述

gets() 有一个非常大的缺陷,即它不检查预留存储区是否能够容纳实际输入的数据,换句话说,如果输入的字符数目大于数组的长度,gets()无法检测到这个问题,就会发生内存越界。
先反编译,找到栈溢出漏洞的位置,在plt表中发现system()函数,但是没有‘/bin/sh’的影子,我们可以将/bin/sh传入name中,然后将其当作参数传入。实质是构造一个伪栈帧(必要的东西:函数地址,返回地址(随便写),参数地址)。要注意的是padding填充的时候,要根据程序是多少位的,来加上e(r)bp寄存器的栈中所占的字节数

在这里插入图片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章