Exame OSWE – Jornada e Dicas

Em 2016 tive o primeiro contato com um sistema pentest (Kali Linux) e uma ferramenta (SQLmap) apenas por diversão e sem quaisquer experiências. Então no mesmo ano comecei uma jornada mais profissional como programador em JavaScript e, em 2017, como programador de jogos e de aplicativos mobile. Publiquei alguns jogos e aplicativos na Google Play. Em 2019 desenvolvi minhas primeiras ferramentas de pentesting em Python, mas ainda não me considerava um pentester e desenvolvia apenas por diversão. Lia tópicos de Buffer Overflow e conseguia entender grande parte dos procedimentos, mas não aplicava em termos práticos. No começo de 2022 eu concluí duas certificações práticas, uma da Desec Security (DCPT) e outra da eLearnSecurity (eJPT). A eJPT fiz depois de concluir várias máquinas do TryHackMe. Dias depois resolvi comprar o curso da Offensive Security, o PEN-200, e assim começar a preparação para o exame OSCP. Fiz todas as 6 máquinas do exame em apenas 8 horas na primeira tentativa. Logo após a OSCP, fiz a certificação CWHI da Crowsec e a OSWE em seguida.

Como eu comprei o curso

Brindes da Acadi-TI

Dessa vez, ao invés de comprar o curso diretamente pelo site da Offensive Security, decidi comprar pela Acadi-TI (recomendo muito), onde fui bem atendido pelo suporte e ainda me mandaram diversos brindes como a blusa com estampa do OSCP, mochila, garrafa de água eletrônica e uma agenda. Comprei oque dava direito a 90 dias de laboratórios, que na minha opinião é muito mais do que o necessário para terminar o curso, o qual pode ser finalizado em duas semanas.

https://loja.acaditi.com.br/certificacoes-offensive-security/oswe-web-300-awae-online-course-90-days-lab-access

Mais sobre o curso

O curso aborda técnicas de revisão de códigos e pentest White-Box, ou seja, você vai explorar cada endpoint/rota da aplicação a fim de encontrar vulnerabilidades. As técnicas são ensinadas em cima de algumas bibliotecas open-source vulneráveis. A Offensive Security oferece um sumário para quem quiser visualizar os nomes das aulas antes de comprar o curso:

https://www.offensive-security.com/documentation/awae-syllabus.pdf

Preparação

Recomendo muito você fazer os Extra Miles do curso. No meu caso como eu já tinha experiência fluída em programação antes de iniciar curso, eu não fiz os Extra Miles. Também concluí os laboratórios próprios da Offensive Security, como Answers e Docedit, o que me preparou à beça para o exame. Além desses laboratórios também concluí alguns outros como:

https://github.com/bmdyy/tudo

https://github.com/bmdyy/order

https://www.vulnhub.com/entry/securecode-1,651

O objetivo sempre será o mesmo, ou seja, você deverá encontrar uma forma de fazer bypass no login do admin, e, dentro do painel de admin encontrar algum endpoint que possibilite uma RCE (Remote Code Execution). Após você encontrar essas vulnerabilidades, você deverá escrever um script que faça todo o processo do começo ao fim até abrir uma shell reversa.

Algumas outras máquinas para você treinar:

https://github.com/bmdyy/testr

https://github.com/bmdyy/chat.js

https://www.vulnhub.com/entry/potato-1,529

https://www.vulnhub.com/entry/raven-2,269

Obs. (SecureCode):

Primeiramente, você vai ter que fazer um pingsweep na sua rede para saber qual IP pertence ao SecureCode, então deverá acessar o link http://ip/source_code.zip para baixar o código fonte e começar a explora-lo.

Como receber dados de um XSS em Python

Caso você tenha alguma dúvida de como receber um cookie de sessão de um ataque XSS por um script Python, você pode utilizar a biblioteca Flask para abrir um servidor web baseado em rotas, podendo assim, receber o cookie do usuário quando o usuário engatilhar o XSS.

import flask

app = flask.Flask(__name__)

@app.route('/rotaxss')
def minha_rota():
  hijack = flask.request.args.get('cookie')
  # todo

app.run(host="0.0.0.0", port=80)

Um ótimo esqueleto para exploits

Um simples esqueleto que permite fazer requisições dentro de uma sessão.

import requests

webSess = requests.Session()

def post(url, data):
	return webSess.post(url, data=data)

def get(url):
	return webSess.get(url)

Como escrever um código que faça upload de arquivos Multipart FormData

Extensão Copy As Python-Requests do Burp Suite.

Extensão Copy As Python-Requests do Burp Suite.

Existe um plugin no Burp Suite que permite copiar as requests no formato Python, ou seja, você vai poder copiar requests grandes com essa extensão, bastando assim, colar no script da sua exploit. Dessa maneira, você vai poder copiar requests de upload de arquivo.

Utilizando expressões regulares para encontrar possíveis vulnerabilidades

Em outro tópico do Medium abordei como as expressões regulares podem te auxiliar a detectar possíveis vulnerabilidades:

https://medium.com/@jsvf/utilizando-express%C3%B5es-regulares-para-auxiliar-no-seu-pentest-white-box-9f14be427e36

Metodologia

A metodologia que utilizei foi:

1. Enumerar site em uma perspectiva black-box;

2. Procurar um termo utilizado na mesma linha de todas as rotas no código-fonte, por exemplo, em Flask o termo utilizado para armazenar uma rota é “@app.route(“, assim, você pode pesquisar na barra de pesquisa do Visual Studio para obter todas as rotas disponíveis;

3. Fazer uma checklist e explorar apenas as rotas que não precisam de autenticação de usuários com privilégio alto;

4. Explorar o escopo de cada função e subfunções chamadas pelo escopo da função da rota;

5. Após encontrar um bypass, explorar apenas todas as rotas que são chamadas pelo usuário privilegiado, a fim de encontrar um RCE.

Lembrando

· Utilize o depurador e breakpoints;

· Sempre fique autenticado no banco de dados na shell da máquina de depuração, para fins de depuração;

· Quando ficar preso ou não encontrar nada faça uma pausa de 20 minutos;

· Recomendo também a técnica de Pomodoro para descansos;

· 48 horas é mais do que suficiente, então explore o sistema como se não tivesse um tempo máximo;

· Tenha uma boa noite de sono;

· Deixe uns petiscos e água do seu lado para evitar que a fome te atrapalhe, e, em alguns momentos, você pode dar algumas pausas;

· No seu relatório coloque a versão do código em texto limpo e a versão em base64 para evitar problemas de formatação quando o técnico for testar seu script;

· Coloque o hash md5 do seu script no relatório para o técnico se certificar que não está executando o script corrompido;

· Utilize funções separadas no seu script, ao invés de colocar todas as linhas de código no mesmo escopo da aplicação;

· Eu recebi meu resultado em 6 dias depois de enviar o relatório;

· A prova é monitorada por um supervisor para provar que é você que está fazendo o exame e sem ajuda, isso é bom, pois isso faz com que a certificação seja bastante valorizada pelas empresas já que ela possui um monitoramento e antifraude.

Bom exame!

Leave a Reply

Your email address will not be published. Required fields are marked *

Copyright © 2024, Decripto.