lunes, 15 de enero de 2018

[tool]: Eliminando pendientes; Jugando con Modbus/tcp

Tengo gran lista de pendientes, en su mayoría  de carácter informático. (He estado repitiendo que mis días necesitan mas horas  -y mas coordinación-). 
De esa lista de pendientes que menciono, recientemente retome un viejo proyecto; Una tool para conversar con el protocolo Modbus/tcp.
No quiero reinventar ninguna rueda, simplemente busco conocer mejor el protocolo y no solo teóricamente.

La documentación oficial del protocolo la encontramos en: http://www.modbus.org/docs/Modbus_Application_Protocol_V1_1b.pdfy es muy amigable.teoricamenteteoricamente

Como extra recomiendo una interesante talk de una persona a la que le tengo muchísimo respeto, me refiero a Claudio Caracciolo (@holesec), presentando distintos protocolos industriales:




Al momento de escribir este post (15/01/2018), en Shodan encontramos unos 18mil dispositivos indexados corriendo Modbus sobre su puerto por defecto. De mas esta decir que muchos de estos devices siempre tendrán la posibilidad de cambiar este puerto (al 503 por ejemplo).  






...y con muchos de esos 18k dispositivos he estado educando la herramienta. 




Una primera aproximación a la herramienta.


La trama de Modbus cuenta con un byte que define funciones para determinar la intención del request. Estas funciones pueden (en decimal) estar entre los valores del 0 al 127.

Una función interesante:
Empleando consultas con la función 43 (\x2b) nos traemos información del dispositivo. (Claro, si la función esta habilitada en el device !)


( Una intención oculta: Los outputs se tienen que ver mejor y mas informativos que los que muestra Shodan  )


-












Entre otros:









pd: las IP que no censure fue por que son de dominio publico ( indexadas ), por que son las 3 de la mañana y el lunes me toca trabajar ! :*


Inyectemos algo manualmente:
El titulo refleja  de las intenciones de la herramienta; "las inyecciones".

En la siguiente primera PoC, realizo una inyección haciendo uso de la función 43 (\x2b).




Buscando algo mas interesante que inyectar recorde que en el Blog de Cristian Borghello lei sobre una interesante vulnerabilidad en PLCs Modicon TM221CE16R, con el CVE asignado: CVE-2017-7575



Esa es la inyección que quiero probar:

\x00\x01\x00\x00\x00\x05\x01\x5a\x00\x03\x00

Modbus, implementa  "function codes" publicas y tambien definidas por el Vendor, como es el caso de Schneider usando la Funcion 90 (\x5a)  

Es cuando entra en juego el argumento: --injection . 

Al determinar la inyección que nos interesa la herramienta hace lo siguiente: Los 7 bytes del header de la trama se calculan solos  y se concatenan con el PDU, osea nuestra inyección.




Según el CVE-2017-7575, la inyección(PDU) que envié (\x5a\x00\x03\x00) me revelo el passwd: 123MKN 


Continuara...



Saludos,
@capitan_alfa

No hay comentarios.:

Publicar un comentario