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
THM-Source-CVE-2019-15231 — Um artigo sobre a sala Source do TryHackMe e um script em Python para explorar a vulnerabilidade. | Kitploit
Ferramentas/GitHubGitHub/wizardy0ga/thm-source-cve-2019-15231
Análise de VulnerabilidadesExploraçãoExploração de Aplicações WebCTFTestes de PenetraçãoAprendizado e EducaçãoArchived
GitHubwizardy0ga/thm-source-cve-2019-15231

THM-Source-CVE-2019-15231

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

Um artigo sobre a sala Source do TryHackMe e um script em Python para explorar a vulnerabilidade.

Ver Repositório
há 4 anosAinda não revisado

THM-Source-CVE-2019-15231

Um artigo sobre a sala Source do TryHackMe & um script python para explorar a vulnerabilidade

CRÉDITOS

Não levo nenhum crédito pela descoberta desta vulnerabilidade. Agradeço às seguintes pessoas por fornecerem os recursos para que pessoas como eu possam aprender!

Descoberta da Vulnerabilidade:
Özkan Mustafa Akkuş

Módulo MSF:
https://github.com/rapid7/metasploit-framework/blob/master/modules/exploits/linux/http/webmin_backdoor.rb
https://www.rapid7.com/db/modules/exploit/linux/http/webmin_backdoor/

Autor do Módulo MSF:
wvu

Sala TryHackMe:
https://tryhackme.com/room/source

Autor da THM:
https://tryhackme.com/p/DarkStar7471

Recursos:
https://www.webmin.com/exploit.html
https://github.com/webmin/webmin/issues/947
https://www.perlmonks.org/?node_id=301355

Se Você Vir Algo, Diga Algo!

De forma alguma sou um profissional de segurança experiente. Isso significa que posso fornecer algumas informações incorretas. Se você é um profissional experiente/pesquisador experiente e vê algo que está incorreto, por favor me informe para que eu possa voltar, estudar o que errei e fornecer a informação correta. Isso é benéfico tanto para mim quanto para outros pesquisadores novatos que possam encontrar este artigo. Se você encontrar informações erradas que escrevi, entre em contato pelo e-mail [email protected] para que eu possa corrigi-las. Obrigado!

Vulnerabilidade

1. Histórico
Webmin é uma ferramenta baseada na web para administração de sistemas Unix-like. Em algum momento no primeiro trimestre de 2018, o Webmin foi alvo de um ataque à cadeia de suprimentos no qual um atacante desconhecido conseguiu inserir código malicioso no arquivo password_change.cgi, criando uma vulnerabilidade que permitia a abertura de uma backdoor em qualquer sistema que estivesse hospedando essa versão do Webmin (1.890) com a configuração padrão. Chamo isso de ataque à cadeia de suprimentos porque os desenvolvedores/distribuidores do software tiveram o código-fonte de seus produtos comprometido. Quando o fornecedor lançou o produto comprometido, todos que atualizaram seu software passaram a executar o código vulnerável, dando ao atacante a capacidade de comprometer qualquer sistema que estivesse executando o código agora vulnerável. No mesmo ano, os desenvolvedores do Webmin perceberam o que havia acontecido e reverteram o arquivo ao seu estado original, no entanto, o atacante conseguiu reinserir o código novamente. Desta vez, o código só seria vulnerável se a opção de alterar senhas expiradas estivesse ativada. Essa vulnerabilidade só foi descoberta em agosto de 2019. A vulnerabilidade foi corrigida na versão 1.930 do Webmin.

2. O Código
Após algumas pesquisas, consegui encontrar a linha de código que tornava o Webmin versão 1.890 vulnerável a injeção de comandos. Estava tendo dificuldade em encontrar as informações corretas porque na verdade existem dois CVEs diferentes associados a este problema (CVE-2019-15231/CVE-2019-15107). CVE-2019-15231 está relacionado à vulnerabilidade de configuração padrão na versão 1.890, e CVE-2019-15107 está relacionado à vulnerabilidade que exige que a opção de alterar senhas expiradas esteja ativada nas versões até 1.920. Vamos dar uma olhada no código da versão 1.890. Na linha 12 do password_change.cgi, temos a seguinte linha de código:
$in{'expired'} eq '' || die $text{'password_expired'},qx/$in{'expired'}/;
No momento em que escrevo isto, nunca escrevi nada em Perl. Vamos dissecar esta linha de código usando mecanismos de busca para entender melhor o que o código faz e por que é vulnerável à exploração. A primeira parte do código à esquerda do operador || parece ser uma variável ($in) que recebe um parâmetro (expired) e verifica se ele é igual (eq) a uma string vazia ''. No meio, temos o operador ||. O || é outra forma de usar o operador lógico or em Perl. Ao usar || em Perl, se o lado esquerdo do operador for verdadeiro, o lado direito não será avaliado. Se o lado esquerdo for falso, então o lado direito será avaliado. Na primeira metade do código à direita do operador , podemos ver . Em Perl, é uma função que encerra o processo do script e exibe uma mensagem de erro. A mensagem seria presumivelmente a variável dizendo que a senha expirou. A última parte do código é onde fica interessante. Vemos que temos uma vírgula seguida por e um ponto e vírgula que encerra a linha de código. A vírgula atua como um separador para o código, a metade esquerda será avaliada primeiro e depois a segunda metade será avaliada. Em Perl, é uma função que permite a execução de comandos do sistema no host. As são delimitadores usados para identificar o parâmetro. Neste caso, temos que executará o parâmetro como um comando do sistema. Acredito que a variável seja algo semelhante ao em PHP pelo seguinte motivo. No script de exploit que escrevi, temos um parâmetro chamado que armazena o payload antes de ser enviado ao servidor via uma requisição POST. Aqui está o código correspondente: . A variável deve estar fazendo algo para recuperar o valor que definimos para para que o payload possa ser executado pela função . Para encerrar esta seção, a linha de código vulnerável descobre que nosso parâmetro na requisição POST não é igual a uma string vazia, portanto o operador avaliará agora a metade direita do código e executará nosso payload armazenado no parâmetro . Vamos para o artigo da sala Source do TryHackMe.com.

O Artigo

Vamos começar com uma varredura de portas. Usaremos o rustscan para obter uma visão geral ampla, pois o nmap pode ser dolorosamente lento.

imagem

Parece que temos 2 portas abertas, 22 e 10000. Vamos agora usar o nmap para descobrir quais serviços estão rodando em cada porta.

imagem

Então temos SSH rodando na porta padrão e um serviço HTTP rodando na porta 10000. Vamos navegar até a página rodando na porta 10000 e ver o que tem lá.

imagem

Você precisará usar HTTPS e ignorar o aviso de certificado SSL para acessar esta página. Parece que temos uma página de login para o serviço Webmin. Quando fiz esta máquina originalmente, tentei algumas tentativas de brute force de diretório, mas nada interessante apareceu. Vamos ver se há uma vulnerabilidade para a versão do webmin que obtivemos da varredura nmap através do searchsploit.

imagem

Parece que temos algumas opções diferentes aqui, no entanto nenhuma delas é igual à nossa versão. Vamos abrir o MSF e ver o que temos para trabalhar.

imagem

Temos algumas opções diferentes para escolher aqui. Vamos pesquisar pela versão do webmin que obtivemos do nmap e ver se algum CVE aparece que possa nos ajudar a reduzir isso.

imagem imagem

No resumo da vulnerabilidade, vemos que menciona algo sobre o arquivo password_change.cgi. Vamos usar o número 5 da nossa pesquisa no MSF, já que ele também menciona o arquivo password_change.cgi e a mesma data de divulgação.

imagem

Lol não vamos realmente usar o MSF. O MSF é legal, mas não é tão divertido quanto descobrir como explorar algo com seu próprio código! Usei o código-fonte Ruby como referência para este exploit para criar meu próprio código de exploit em Python. Vamos usar este!

imagem

Bada-bing Bada-boom conseguimos um shell root na sala! Não vou revelar as flags. Tenho certeza que você consegue encontrá-las! Obrigado por ler e tenha um ótimo dia!

Baixar ferramenta
||
die $text{'password_expired'}
die
$text
,
qx/$in{'expired'}/
;
qx
//
qx/$in{'expired'}/
$in{'expired'}
$in
$_GET
expired
data = {'expired':payload,}
$in
expired
qx
expired
||
expired