Configuration d'un serveur OAST

Auteur: Brouettelover 2024-01-03 14:18:29
Categories: > > Tags:

Description

Pour mener à bien une attaque permettant un accès à un serveur externe dans un réseau donné, il est possible de configurer un serveur web/DNS adéquat. Cette configuration permettra de recevoir les requêtes du client et de vérifier la bonne réalisation d’une connexion, comme explicité dans le chapitre 7 sur l’exploitation de l’injection SQL aveugle à l’aide de techniques hors bande (OAST).

Pour atteindre cet objectif, j’ai décidé d’utiliser les outils disponibles sur https://github.com/projectdiscovery/interactsh#usage.

L’objectif de cette configuration est de se servir de notre propre nom de domaine, afin de ne plus dépendre des noms de domaine d’OAST. À noter que le serveur et le client seront localisés sur la même machine. Je ne vais pas entrer dans les détails de l’installation du serveur, celle-ci étant clairement documentée sur le repo GitHub.

Nom de domaine

Il faut tout d’abord choisir un nom de domaine chez un fournisseur, par habitude j’utiliserai le site https://porkbun.com

J’ai choisi le nom techniquedepeche.click

Voici à quoi ressemble le dashboard porkbun.

Afin que notre serveur puisse géré directement les records DNS nous devons le délégué vers notre serveur. Pour cela, il faut créé se qu’on appelle un glue record - point 1 qui va lié directement l’IP et l’hote du serveur DNS afin de pouvoir l’utiliser en tant qu’autorité pour le domaine.

Il suffit d’ajouter le suffixe “ns1” et l’ip publique du serveur pour créér le glue record.

NB - exemple glue record (stackoverflow): Un enregistrement "glue" est un terme désignant un enregistrement servi par un serveur DNS qui ne fait pas autorité pour la zone, afin d'éviter une situation de dépendances impossibles pour une zone DNS.

Supposons que je possède une zone DNS pour exemple.com. Je veux avoir des serveurs DNS qui hébergent la zone faisant autorité pour ce domaine afin de pouvoir l’utiliser - en ajoutant des enregistrements pour la racine du domaine, www, le courrier, etc. Je place donc les serveurs de noms dans l’enregistrement pour leur déléguer - ce sont toujours des noms, nous mettrons donc ns1.example.com et ns2.example.com.

C’est là que réside l’astuce. Les serveurs du TLD délégueront aux serveurs DNS dans l’enregistrement whois - mais ils se trouvent à l’intérieur de example.com. Ils essaient de trouver ns1.example.com, demandent aux serveurs .com et sont renvoyés à… ns1.example.com.

Les enregistrements glue permettent aux serveurs du TLD d’envoyer des informations supplémentaires dans leur réponse à la requête pour la zone example.com - d’envoyer également l’adresse IP configurée pour les serveurs de noms. Cette adresse ne fait pas autorité, mais c’est un pointeur vers les serveurs qui font autorité, ce qui permet de résoudre la boucle.

Une fois que c’est fait, il faut délégué la gestion de ce domaine à notre serveur spécifié dans le “glue record” - point 2

Pour que le HTTPS fonctionne, il est préférable de prendre les certificats SSL générés - point 3.

Configurer le serveur

Pour autoriser l’application à utiliser des ports (80/53) sans devoir utiliser le sudo, il faut utiliser cette commande :

sudo setcap CAP_NET_BIND_SERVICE=+eip /path/to/binary

Dépendant de votre firewall, il faudra ouvrir les ports 443,80 (HTTPS,HTTP) en tcp et 53 (DNS) en UDP/TCP afin de permettre le traffic externe.

voici un exemple avec IPTABLES :

sudo iptables -A INPUT -p tcp --dport 80 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 443 -j ACCEPT
sudo iptables -A INPUT -p tcp --dport 53 -j ACCEPT
sudo iptables -A INPUT -p udp --dport 53 -j ACCEPT

Pour faire fonctionner HTTPS il faut spécifier les fichiers à utiliser pour le chiffrement dans la commande interactsh-server. Il est possible de modifier le fichier .config/interactsh-server.conf mais j’ai préféré créé un alias dans mon .bashrc

J’ai extrait mes certificats dans un dossier : “/home/user/SSL-Techniquedepeche/“

Voici donc l’alias que j’utilise pour lancer mon serveur :

alias interactsh-server-peche='interactsh-server -domain techniquedepeche.click -cert /home/user/SSL-Techniquedepeche/domain.cert.pem -privkey /home/user/SSL-Techniquedepeche/private.key

Routeur et NAT

Si le traffic arrive à notre routeur, il ne saura pas où l’acheminer. IL faut donc au choix soit “natter” les ports vers notre serveur avec son ip local en faisant correspondre le port à l’extérieur du routeur et celui du serveur.

Pour modifier le routeur il suffit de se connecter dessus via son interface web via son ip local - généralement : 192.168.0.1

Par faciliter, j’utilise la DMZ qui permet de rediriger en gardant les mêmes numéros de ports toutes les demandes de connexions sans avoir le besoin de spécifier directement le port pour chaque protocole.

DNS local

Etant donné que notre client est sur la même machine que le serveur, il faut modifier le ficher “/etc/host” afin de pouvoir accéder à notre domaine via son IP local.

Exemple :

# Host addresses
127.0.0.1  localhost
127.0.1.1  parrot
::1        localhost ip6-localhost ip6-loopback
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
# Others
192.168.0.25    techniquedepeche.click

Test

à faire dans l’ordre

  1. Je lance mon serveur avec mon alias : interactsh-server-peche
  2. Je lance le client : interactsh-client -server techniquedepeche.click
  3. J'ouvre la page sur un navigateur - généré : cl34t572c2mi9o0rbfi0ahx3z55hmp4h8.techniquedepeche.click

NB - si vous n'arriver par à lancer la commande - interactsh-client Il faut ajouter le dossier /go/bin dans le path. Il suffit de modifier la ligne PATH dans le bashrc :

export PATH=:/home/user/go/bin/:$PATH

ajouter :/home/user/go/bin/: avant $PATH et après le reste des autres PATH