参考资料:Sneaky(suid+缓冲区溢出提权)
上一篇 得到了一个普通权限的shell,通过suid的缓冲区溢出漏洞,得到shell。这也不是第一次遇到了类似情况了。
文件传输
whereis gdb 结果显示客户机没有gdb,所以传输到kali上分析。
1 |
|
分析程序
chmod a+x validate
让程序报错
1 |
|
直到找到恰当的长度
1 |
|
找到缓冲区长度116
1 |
|
0x39644138
1 |
|
检查坏字符
遇到问题,不知道如何用gdb或者edb检查坏字符。思考后成功找到定位方法。
edb --run /root/Desktop/validate $(python badchar.py)
右下角堆栈面板,选中有很多A字符的地址,右键
follow address in dump
。
A字符的末尾,可以看到01、02、03...
输入的字符。可以看到08后面没有09,于是09是坏字符。
以此类推,检查的坏字符有\x09\x0a
badchar.py
1 |
|
msfelfscan
如果msfelfscan提示命令未找到。
1 |
|
再次输入msfelfscan -h
,即可。
找到EIP跳转的地址
本来想找到JMP ESP栈顶的地址,但是没有找到。
生成shellcode
msfvenom -p linux/x86/exec CMD=/bin/sh -f python -b '\x00\x09\x0a'
exp.py
1 |
|
文件传输
1 |
|
1 |
|
sudo -l显示,
sudo /home/anansi/bin/anansi_util
这个程序运行不需要密码,所以可以将/bin/bash添加到该程序,sudo以root权限运行该程序,最终获得root权限。
总结
- msfelfscan用来找到EIP跳转的地址
msfvenom -p linux/x86/exec CMD=/bin/sh -f python -b '\x00\x09\x0a'
生成shellcodepayload = buf + nop + eax
,本次的返回地址是call eax
,以前都是使用jmp esp
。不太理解eax在这里起到的作用。等以后水平提升了再回头看看吧。