CVE-2016-5195 DirtyCow 脏牛提权

简介: 脏牛(Dirty COW,编号:CVE-2016-5195)是2016年10月18日被曝出的存在于Linux内核中的一款0day漏洞。因为此漏洞是在Linux内核的内存子系统在处理写时拷贝(Copy-on-Write)时发生的,而又给Linux内核的使用带来烦恼,所以将其命名为"Dirty COW"。

声明

请勿利用文章内的相关技术从事非法测试,由于传播、利用此文所提供的信息或者工具而造成的任何直接或者间接的后果及损失,均由使用者本人负责,所产生的一切不良后果与文章作者无关。该文章仅供学习用途使用。

一、漏洞原理


Linux内核的内存子系统在处理写入时复制(copy-on-write, COW)时产生了竞争条件(race condition)。恶意用户可利用此漏洞,来获取高权限,对只读内存映射进行写访问。(A race condition was found in the way the Linux kernel’s memory subsystem handled the copy-on-write (COW) breakage of private read-only memory mappings.)

竞争条件,指的是任务执行顺序异常,可导致应用崩溃,或令攻击者有机可乘,进一步执行其他代码。利用这一漏洞。

二、漏洞概述及成因


该漏洞的原因是get_user_page内核函数在处理Copy-on-Write(以下使用COW表示)的过程中,可能产出竞态条件造成COW过程被破坏,导致出现写数据到进程地址空间内只读内存区域的机会。当我们向带有MAP_PRIVATE标记的只读文件映射区域写数据时,会产生一个映射文件的复制(COW),对此区域的任何修改都不会写回原来的文件,如果上述的竞态条件发生,就能成功的写回原来的文件。比如我们修改su或者passwd程序就可以达到root的目的。


三、漏洞影响范围


Linux kernel >= 2.6.22(2007年发行,到2016年10月18日才修复)


四、先决条件


一个 CVE-2016-5195 易受攻击的系统

该程序已成功用于:

  • RHEL7 Linux x86_64
  • RHEL4(4.4.7-16)
  • Debian 7("wheel")
  • Ubuntu 14.04.1 LTS
  • Ubuntu 14.04.5 LTS
  • Ubuntu 16.04.1 LTS
  • Ubuntu 16.10
  • Linux Mint 17.2

并编译:

铿锵版本 4.0.0;

gcc 版本 6.2.0 20161005 (Ubuntu 6.2.0-5ubuntu12)

gcc 版本 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.1)

gcc 版本 4.8.5 20150623(红帽 4.8.5-4)(GCC);

gcc 版本 4.8.4 (Ubuntu 4.8.4);

gcc 版本 4.8.2 (Ubuntu 4.8.2-19ubuntu1)

gcc 版本 4.7.2 (Debian 4.7.2-5);

gcc 版本 4.4.7(带有“旧”版本)


五、漏洞危害


低权限用户利用该漏洞可以在众多Linux系统上实现本地提权


六、本地复现


方法一

本地环境:Ubuntu 14.04.4 LTS

查看系统版本以及gcc版本是否在漏洞范围内

gcc -v

image.png

下载exphttps://github.com/gbonacini/CVE-2016-5195

image.png

使用 g++ -Wall -PEDANTIC -O2 -std=c++11 -pthread -o dcow dcow.cpp -lutil 或者直接输入 make 进行编译成可执行文件


接下来去执行./dcow -s

image.png

查看当前用户 id / whoami


方法二:

下载exphttps://github.com/FireFart/dirtycow

image.png

使用如下命令进行编译 gcc -pthread dirty.c -o exp -lcrypt

然后执行 ./exp 或者 ./exp new_password

image.png

执行完成,查看当前用户权限

image.png

cat /etc/passwd

image.png

成功提升到root权限!用户名为 firefart


漏洞深度分析请参考链接:https://www.anquanke.com/post/id/84851


总结


   原理是利用exp获取了写入权限后,对/etc/passwd进行备份,然后对/etc/passwd进行重写,修改账户权限。优点方便快速。缺点受限与环境影响。某些环境下会失败。如果失败还是使用官方放出的exp,对/etc/passwd进行写入,写入前一定要记得先备份!

目录
相关文章
|
JSON 安全 IDE
基于ESP8266网络天气时钟的OLED显示
【8月更文挑战第25天】基于ESP8266的网络天气时钟通过OLED显示屏提供直观的时间与天气信息。硬件包括ESP8266开发板、OLED显示屏及其他元件。软件实现涉及Wi-Fi连接、天气API数据获取、NTP时间同步及OLED显示控制。显示内容设计包括清晰的时间格式与详细的天气描述,支持图标展示。项目支持自动更新机制、低功耗模式,并可扩展闹钟等功能。开发者需根据具体环境调整优化,确保系统稳定可靠。
992 0
|
安全 开发工具 git
CTF工具隐写分离神器Binwalk安装和详细使用方法
CTF工具隐写分离神器Binwalk安装和详细使用方法
6842 0
12 个非常适合做项目的开源后台管理系统
12 个非常适合做项目的开源后台管理系统
2800 0
|
Linux 开发者 云计算
linux内核符号表kallsyms简介
在使用perf排查问题时,我们经常会发现[kernel.kallsyms]这个模块。这到底是个什么东西呢?
20370 0
|
11月前
|
网络协议 算法 Java
基于Reactor模型的高性能网络库之Tcpserver组件-上层调度器
TcpServer 是一个用于管理 TCP 连接的类,包含成员变量如事件循环(EventLoop)、连接池(ConnectionMap)和回调函数等。其主要功能包括监听新连接、设置线程池、启动服务器及处理连接事件。通过 Acceptor 接收新连接,并使用轮询算法将连接分配给子事件循环(subloop)进行读写操作。调用链从 start() 开始,经由线程池启动和 Acceptor 监听,最终由 TcpConnection 管理具体连接的事件处理。
343 2
|
3月前
|
SQL 运维 容灾
别等业务中断才补坑!RTO/RPO 核心逻辑与全场景灾备架构选型全攻略
本文系统解析容灾备份核心知识:阐明其作为业务“生命线”的必要性;深度解读RTO(恢复时间目标)与RPO(恢复点目标)的定义、误区及量化方法;厘清备份(保数据)与容灾(保业务)的本质区别;详解冷备、温备、主从热备、同城双活、两地三中心六大主流架构;提供分场景选型指南与Spring Boot+MySQL实战代码,并强调演练验证与3-2-1运维法则。
788 1
|
7月前
|
存储 缓存 人工智能
重复文件是怎么产生的?重复文件清理教程
重复文件是怎么产生的?重复文件清理教程
660 5
|
9月前
|
监控 安全 Linux
Linux系统提权之计划任务(Cron Jobs)提权
在Linux系统中,计划任务(Cron Jobs)常用于定时执行脚本或命令。若配置不当,攻击者可利用其提权至root权限。常见漏洞包括可写的Cron脚本、目录、通配符注入及PATH变量劫持。攻击者通过修改脚本、创建恶意任务或注入命令实现提权。系统管理员应遵循最小权限原则、使用绝对路径、避免通配符、设置安全PATH并定期审计,以防范此类攻击。
1349 1
|
Kubernetes Cloud Native 关系型数据库
k8s 部署polardb-x集群
k8s 部署polardb-x集群
1172 11
|
存储 安全 PHP
【文件上传绕过】——条件竞争漏洞
【文件上传绕过】——条件竞争漏洞
876 5