Utiliser nmap pour identifier les serveurs sur le sous-réseau 10.10.10.4/24
# nmap 10.10.10.4/24
# nmap 10.10.10.1-255
# nmap 10.10.10.4
# nmap -A 10.10.10.4 : Scan les 1000 ports les plus utilisés. Cherche les versions des services et l'OS
# nmap -sV -sC -p- 10.10.10.4 : scan les 655535 ports TCP et cherche les versions des services ouverts.
# nmap -sU 10.10.10.4 : scan des ports UDP (trés trés lent)
-sV : Tente d'identifier la version du service
-sC : Scanne avec les scripts NMap par défaut. Les scripts considérés comme sans risque.
-A : Tente de détecter la version de l'OS, la version des services, utilise les scripts par défaut, et réalise un traceroute
-p- : Scanne les 65535 ports TCP
-sU : Scanne les ports UDP (trés long)
-oN nmap.log : output file
On peut lancer ces trois commandes dans trois shells en parallèle.
Les services de type ftp, web, ldap tournent peuvent fonctionner sur n'importe quel port, mais utilisent généralement les ports qui leur sont réservés. Le port 80 par exemple est le port utilisé par les serveurs web pour HTTP. Le port 443 est le port pour HTTPS.
TCP
20: ftp data
21: ftp control
22: ssh
23: telnet
25: SMTP (mail)
37: Time protocol
53: Bind/DNS
69: TFTP (Trivial FTP)
80: HTTP
109: POP2
110: POP3
111: RPC Remote Procedure Call
137: Netbios Name Service
138: Netbios Datagram Service
139: Netbios Session Service
143: IMAP (mail)
161: SNMP
220: IMAP
389: LDAP
443: HTTPS
445: MS Active Directory, SMB
464: Kerberos
1521: Oracle Database
3000: Node JS
3306: MySQL
UDP
69: TFTP
161: SNMP
http://www.0daysecurity.com/penetration-testing/enumeration.html
Le fichier robots.txt, quand il existe, est enregistré à la racine d'un site web.
Il contient une liste des ressources du site qui ne sont pas censées être indexées par les robots d'indexation des moteurs de recherche.
Par convention, les robots consultent robots.txt avant d'indexer un site Web.
Son contenu peut donc nous interresser.
http://10.10.10.8/robots.txt
Plus d'info : https://fr.wikipedia.org/wiki/Protocole_d%27exclusion_des_robots
Les développeurs laissent parfois des informations utiles, voire des mots de passe dans les commentaires du code. Ce sont souvent des urls,ou des champs de formulaires utilisés pour les tests.
/* Secret code */
<!--- Secret code --->
<p hidden>Secret code.</p>
<label style='display: none'>Secret code.</label>
Bruteforcer un site web consiste à tester la présence de pages accessibles, telles /register, /register.php, /admin, /upload, /users/login.txt, /admin/password.sav, ...
Pour celà il existe des listes de répertoires et de noms de fichiers fréquemment présents sur les serveurs web.
Une fois la techno du serveur connue (php, java, wordpress, joomla, ...) il est possible d'utiliser des listes optimisées, et ne chercher que les extensions adaptées: php, php4, php5, exe, jsp, ...
Il est aussi possible de chercher des fichiers aux extensions intéressantes : cfg, txt, sav, jar, zip, sh, ...
Logiciels de brute force usuels :
Il est crucial de bien choisir la liste de répertoires/noms de fichiers:
Dirb est préinstallé sur Kali ou Parrot. Si ce n'est pas le cas:
sudo apt-get install -y dirb
Lancer un scan rapide avec dirb, qui va utiliser sa liste 'common.txt':
dirb 10.10.10.11
https://github.com/OJ/gobuster
Le télécharger et l'installer en /opt
wget https://github.com/OJ/gobuster/releases/download/v3.0.1/gobuster-linux-amd64.7z
sudo apt install p7zip-full
7z x gobuster-linux-amd64.7z
sudo cp gobuster-linux-amd64/gobuster /opt/gobuster
chmod a+x /opt/gobuster
Bruteforce le site http://10.10.10.11, avec la liste directory-list-2.3-medium.txt, avec des extensions de fichier html,php,txt
/opt/gobuster dir -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -u http://10.10.10.11 -l -x html,php,txt
Pour une url en HTTPS, ajouter l'option de ligne de commande
-k : skip HTTPS ssl verification
hydra -l admin -P /usr/share/wordlists/rockyou.txt -f 10.10.10.157 http-get /monitoring
-p login
-P password file
-f server adress
http-get : HTTP request type
/monitoring : url path
hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.10.11 http-post-form '/admin/login.php:username=^USER^&password=^PASS^:F=Wrong password:H=Cookie\: PHPSESSIONID=ms0t93n23mc2bn2512ncv1ods4' -V
Attention si la réponse est un 302 Redirect, hydra ne va pas suivre et va générer un faux positif.
hydra -l admin -P /usr/share/wordlists/rockyou.txt 10.10.10.4 http-get-form '/login.php:username=^USER^&password=^PASS^:F=Login failed:H=Cookie\: PHPSESSIONID=ms0t93n23mc2bn2512ncv1ods4' -V
Attention si la réponse est un 302 Redirect, hydra ne va pas suivre et va générer un faux positif.
Format des urls
Posts : /index.php?p=22
/index.php/2017/04/12/hello-world/
/index.php/jobs/apply/8/
Login : /wp-login/
/wp-login.php
Uploaded files : /wp-content/uploads/%year%/%month%/%filename%
Fichier de config, et credentials de la base de donnée
/var/www/html/
wordpress/wp-config.php
wordpress/htdocs/wp-config.php
Wpscan connait la structure d'un site wordpress et va faire du brute force pour identifier les pages, le posts, les users, le thème, les plugins.
Les failles de wordpress viennent essentiellement des plugins non mis à jour.
wpscan --url http://10.10.10.10/wordpress/ -e
--url : url de la page wordpress.
-e : énumeration
Brute force du login
wpscan --url http://10.10.10.10/wordpress/ -P rockyou.txt -U admin
Si vous avez les identifiants et mots de passe. Se connecter avec le client mysql.
mysql --host=HOST -u USER -p
--host=précise le nom du serveur
-u le login
-p force la saisie du mot de passe.
Dumper le contenu de la base.
show databases; -- Liste les bases de données.
-- La base 'information_schema' contient des informations internes à mysql ou mariadb. On peut généralement l'ignorer.
use DATABASE;
show tables; -- Liste les tables
SELECT * FROM TABLENAME;