Network Discovery

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.

Commentaires dans le code source HTML ou JS de la page
/* Secret code */
<!--- Secret code --->
Elements HTML cachés
<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 :

  • dirb : Ligne de commande. A utiliser pour un check rapide avec sa liste 'common.txt'.
  • gobuster : Ligne de commande. A utiliser avec la liste 'directory-list-2.3-medium.txt' de dirbuster
  • dirbuster : Interface graphique. Visuel mais pas forcément le meilleur choix

Il est crucial de bien choisir la liste de répertoires/noms de fichiers:

  • /usr/share/wordlists/dirb/common.txt : petite liste bien construite
  • /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt : grosse liste. Normalement couvre tous les CTF.
  • https://github.com/danielmiessler/SecLists : Une fois à l'aise avec les deux listes précédentes, il est possible de trouver des listes plus optimisées sur ce git.
  • Sur les distribution Kali et Parrot, le répertoire /usr/share/wordlists contient des liens vers de nombreuses listes. Prenez le temps de le regarder en détail.


Dirb

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


Gobuster
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
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
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
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.

Wordpress

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

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;