前言
背景介绍
本次红蓝对抗实战的目标是获取企业内网中位于 www.xxx.com 域下的《上市商业计划书.docx》文件,并通过 OPENVPN 进行访问验证。得分规则进行了特别调整,权限获取必须包含 WEBSHELL 或交互式 SHELL,仅有一个漏洞回显不给分,更加偏向考察实际的漏洞利用能力而非单纯的漏洞验证。
DMZ 区渗透
DMZ 区大致部署了 9 台机器,其中 3 台入口点和官网分别通过防火墙映射到互联网模拟公网环境,4 个页面分别对应 xxx.com 的四个子域名。
Nginx 解析漏洞
在网站目录下编写了一个 upload.html 页面用于考察路径扫描。上传页面做了白名单校验,初衷是在有 WAF 的情况下判断黑白名单策略。如果一开始就上传 WebShell,包被阻断后难以判断是程序不允许还是 WAF 拦截,会浪费排查时间。实际过程中考虑到难度未启用 WAF。
细心的分析者可能注意到 Nginx 版本信息联想到解析漏洞,有经验的安全人员看到 PHP+ 白名单也会第一时间想到解析漏洞。测试发现白名单可以绕过,在 Windows 环境下文件上传后未重命名。Windows 文件名中 < > ? / ^ \ * | " 等符号不允许出现,因此构造如下 Payload:
1.php:.png
该文件能够落地为 1.php,但文件内容为 0kb,无法直接执行,需要等待进一步利用。这提示我们在文件上传场景中,不仅要关注扩展名过滤,还要关注服务器对文件名的解析逻辑。
PHPStudy 后门
常规 RCE 漏洞结合 Windows 环境及杀软考察,留了 PHP 探针页面。一些常用的下载执行命令会被拦截,绕过方法可参考 LOLBAS (Living Off The Land Binaries and Scripts) 技术。其实这个漏洞本质还是 PHP 代码执行,可以直接使用 file_put_contents() 写入一句话木马:
<?php file_put_contents('shell.php', '<?php system($_GET[cmd]); ?>'); ?>
很多人习惯用 system('echo/powershell/certutil') 写入,虽然杀软防御力较弱,PHP_CGI.exe 调用 PowerShell 或 certutil 写文件或是解码时进程链未拦截,但初衷是希望大家在代码执行时尽量不调用命令执行,以减少特征触发。
Fastjson 漏洞
原计划部署 Shiro JRMP 链 + Windows + 杀软的靶场,但因 Java 环境配置复杂未能实现。最终考察 JNDI 注入 + Windows 环境 + 杀软上线问题。比较通用的方法包括内存马、下载执行(Java 实现)或静态资源写 WebShell,需要自己动手编写恶意类实现上述功能。
以静态资源为例,如何拿到 Web 路径是关键。可以使用 System.getProperty("os.name") 和 System.getProperty("os.arch") 先判断操作系统类型。Git 上有很多优秀的 JNDI 利用工具,但建议动手实现定制化的恶意类,避免一个包就打成功导致攻击流量过大引起注意。
办公网渗透
办公网大概有 7 台主机通过 DMZ 区的 Redis 打过来。其中 SMB 泄露的账号密码直接使用 Impacket 包横向移动的脚本利用。同事帮忙搭建了 Log4j 漏洞的环境并完善了办公网的路径分析,Log4j 的利用和 Fastjson 那台利用手法相似。
办公网跨域沿用了上次保存的 RDP 连接记录。需要提及的是从域外如何发现域,除了网络侧 NetBIOS 扫描或是 88&389 等常用端口的扫描(需要知道网段,很可能触发大量流量),若工作组主机 DNS 服务器是域控时,可通过 nslookup 域名根据返回 DNS 服务器名称判断是否有域。主机侧还可以收集的信息包括 cmdkey /list | findstr Domain 和 Mimikatz 收集的凭据。
shell dir /a %userprofile%\AppData\Local\Microsoft\Credentials\*


