-
-
[原创]Pwn入门--简单的nx绕过
-
发表于:
2017-12-20 22:58
9521
-
通过查看代码,我们可以分析出,在readpw()这个函数中,read()函数可造成buf的溢出。
所以我们先手工输入字符,找到溢出的字符的位置,推荐使用abcdefghi…ABC…123这种方式来确定溢出长度,pwntolls中也可根据溢出的字符,来判断溢出位置。(@nbw:可以使用pattern来生成随机字符串)
图中显示溢出字符串为0x46454443即“CDEF”
首先是28个字符填充,其次跟着system()函数地址,exit()函数地址,/bin/sh地址。
函数调用栈(图一)
图二
如图一,为函数调用的栈结构,即32位模式下,函数参数通过栈传递,传递的位置为函数参数从右至左依此入栈,之后为父函数返回地址(函数调用地址的下一条指定地址)。从上面的第二张图中我们可以得知,函数调用完毕后,执行到ret指令时,将执行栈顶指针esp处内存所指向的地址。所以我们需要将system()函数的地址作为溢出函数父函数的返回地址,而将exit()函数的地址作为system()函数的返回地址(防止程序崩溃),将bin/sh作为参数传递给system函数。
system()函数地址:
/bin/sh地址:
exit()函数地址:
其中,被注释的代码作为远程调试使用。
在gdb中可以看到如下输出:
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!