El libre pensamiento para un internet libre
No estas registrado.
Los dispositivos estudiados son estos routers que llevan un chipset wifi realteck de la serie rtl819x.
Como hemos visto en este tema ( Backdoor permanente presente en millones de routers con chip Realtek); estos puntos de acceso tienen una puerta trasera chunga porque inamovible y activada en permanencia.
Y en este otro tema (Binwalk : extrae en unos segundos el firmware de su router) hemos visto como gracias a binwalk podíamos extraer muy rápidamente el firmware de uno de estos routers : el Alfa Network AIP-W525H con su chipset rtl1892)
Si miramos el firmware en detalles; podemos ver la estructura del sistema de fichero en la carpeta descomprimida
/squashfs-root/
La carpeta squashfs-root corresponde a la raíz del sistema
Y gracias a binwalk podemos ver todo el contenido de la carpeta bin que se compone de binarios fundamentales que encontramos en nuestras distribuciones GNU-Linux y de unos cuantos scripts sistema (con extensión *.sh)
Uno de estos script se llama "startup.sh" y como su nombre lo indica, tiene vocación a ejecutarse a cada arranque, reinicio, update, reset....
#!/bin/sh
#
# script file to startup
TOOL=flash
GETMIB="$TOOL get"
LOADDEF="$TOOL default"
LOADDEFSW="$TOOL default-sw"
LOADDS="$TOOL reset"
# See if flash data is valid
$TOOL test-hwconf
if [ $? != 0 ]; then
echo 'HW configuration invalid, reset default!'
$LOADDEF
fi
$TOOL test-dsconf
if [ $? != 0 ]; then
echo 'Default configuration invalid, reset default!'
$LOADDEFSW
fi
$TOOL test-csconf
if [ $? != 0 ]; then
echo 'Current configuration invalid, reset to default configuration!'
$LOADDS
fi
# voip flash check
if [ "$VOIP_SUPPORT" != "" ]; then
$TOOL voip check
fi
if [ ! -e "$SET_TIME" ]; then
flash settime
fi
# Generate WPS PIN number
eval `$GETMIB HW_WSC_PIN`
if [ "$HW_WSC_PIN" = "" ]; then
$TOOL gen-pin
fi
Vemos en las primeras liñas que el script esta efectivamente destinado a ejecutarse cuando se inicia el router.
Y lo más llamativo es esta condición de control en final de script :
Se declara justo después de que se define el tiempo
¿Tendremos una relación entre el tiempo y el PIN?
analizamos-la
eval `$GETMIB HW_WSC_PIN`
eval es un comando que sirve para "evaluar una variable una ultima vez antes de usarla". Nos sirve también para declarar variables que son el resultado de comandos con indices, espacios...
Aqui nos sirve para unir y comprobar el valor de "GETMIB" adjuntado a "HW_WSC_PIN"
Si miramos las variables "constantes" declaradas en inicio de script tenemos a
TOOL=flash
GETMIB="$TOOL get"
Lo que hace que nuestra variable evaluada es el resultado de "flash get HW_WSC_PIN"
Volvemos a ello en unos segundos
Ahora llegamos a una condición if-then-fi (ver capitulo 1 "Condición univoca "if - then - fi"" de Introducción a bash -paso4- Condiciones "if-elif-else-fi")
Y vemos que se "activa" si el valor de HW_WSC_PIN es nulo (ver capitulo 2 "Redactar nuestra condición con operadores" de Introducción a bash -paso4- Condiciones "if-elif-else-fi")
Dicho de otra forma esta condición va a generar el PIN por defecto si este no existe, si el valor de HW_WSC_PIN es "vacío", nulo.
Para generar el PIN se requiere a un generador, "gen-pin" en nuestra orden "$TOOL gen-pin". $TOLL es "flash" (primera variable); entonces el PIN por defecto se genera así
flash gen-pin
entonces debemos enterrarnos de lo que son
flash
gen-pin
someone_esle es un usuario del foro kali que ha leido mi post y ha gentilmente encontrado y desensamblado la función gen-pin para ayudar.
Nos explica que para llegar a desensamblar enteramente le firmware (cosa que no había conseguido) ha usado primero " fmk" para descomprimir lo y luego "idapro" para comprobar los ficheros así obtenidos
en wscd ha encontrado una función que corresponde a nuestro "pin-gen"
Hi,
Got the Firmware, unpacked with fmk, checked with idapro.
Found this function in wscd (it's the "gen-pin" function from the .sh script), but i'm not as good in mips, the (in my opinion) important parts are marked, maybe someone, who's familiarized with mips can tell something about.LOAD:0040C4C4 la $t9, gettimeofday LOAD:0040C4C8 move $a1, $zero LOAD:0040C4CC jalr $t9 ; gettimeofday LOAD:0040C4D0 addiu $a0, $sp, 0xF0+var_68 LOAD:0040C4D4 lw $gp, 0xF0+var_D8($sp) LOAD:0040C4D8 lw $a0, 0xF0+var_68($sp) LOAD:0040C4DC la $t9, srand LOAD:0040C4E0 nop LOAD:0040C4E4 jalr $t9 ; srand LOAD:0040C4E8 nop LOAD:0040C4EC lw $gp, 0xF0+var_D8($sp) LOAD:0040C4F0 nop LOAD:0040C4F4 la $t9, rand LOAD:0040C4F8 nop LOAD:0040C4FC jalr $t9 ; rand LOAD:0040C500 nop LOAD:0040C504 li $v1, 0x6B5FCA6B LOAD:0040C50C mult $v0, $v1 LOAD:0040C510 sra $a0, $v0, 31 LOAD:0040C514 lw $gp, 0xF0+var_D8($sp) LOAD:0040C518 nop LOAD:0040C51C la $t9, 0x400000 LOAD:0040C520 nop LOAD:0040C524 addiu $t9, (sub_404128 - 0x400000) LOAD:0040C528 mfhi $v1 LOAD:0040C52C sra $v1, 22 LOAD:0040C530 subu $a1, $v1, $a0 LOAD:0040C534 sll $a0, $a1, 5 LOAD:0040C538 subu $a0, $a1 LOAD:0040C53C sll $v1, $a0, 6 LOAD:0040C540 subu $v1, $a0 LOAD:0040C544 sll $v1, 3 LOAD:0040C548 addu $v1, $a1 LOAD:0040C54C sll $a0, $v1, 2 LOAD:0040C550 addu $v1, $a0 LOAD:0040C554 sll $v1, 7 LOAD:0040C558 subu $a1, $v0, $v1 LOAD:0040C55C sll $s0, $a1, 2 LOAD:0040C560 move $a0, $a1 LOAD:0040C564 jalr $t9 ; sub_404128 LOAD:0040C568 addu $s0, $a1 LOAD:0040C56C lw $gp, 0xF0+var_D8($sp) LOAD:0040C570 sll $s0, 1 LOAD:0040C574 addu $a0, $s0, $v0 LOAD:0040C578 la $t9, 0x400000 LOAD:0040C57C nop LOAD:0040C580 addiu $t9, (sub_403F60 - 0x400000) LOAD:0040C584 jalr $t9 ; sub_403F60 LOAD:0040C588 addiu $a1, $sp, 0xF0+var_D0 LOAD:0040C58C lw $gp, 0xF0+var_D8($sp) LOAD:0040C590 addiu $a1, $sp, 0xF0+var_D0 LOAD:0040C594 la $a0, 0x440000 LOAD:0040C598 la $t9, printf LOAD:0040C59C nop LOAD:0040C5A0 jalr $t9 ; printf LOAD:0040C5A4 addiu $a0, (aPinS - 0x440000) # "PIN: %s\n" LOAD:0040C5A8 lw $gp, 0xF0+var_D8($sp) LOAD:0040C5AC li $a0, 0xADAC LOAD:0040C5B0 addu $a0, $s2, $a0 LOAD:0040C5B4 la $t9, strcpy LOAD:0040C5B8 b loc_40C8C0 LOAD:0040C5BC addiu $a1, $sp, 0xF0+var_D0
WPS Pixie Dust Attack (Offline WPS Attack)
No estoy familiarizado con MIPS pero vemos claramente un proceso que empieza por : "la $t9, gettimeofday" (se obtiene el tiempo y es el del primer "build")
Luego vemos que se "randomiza" la cadena (se cambian dígitos siguiendo un patrón) : "la $t9, srand "
Y por fin tenemos a lo que corresponde a un "printf" del PIN : " addiu $a0, (aPinS - 0x440000) # "PIN: %s\n""
Queda mucho por entender y averiguar pero tenemos aquí bajo los ojos una forma de generar el PIN por defecto mediante el uso de get-pin
A este momento sale de la nada un nuevo usuario en el foro kali, reversetheg@p.
Ha estudiado muy en detalle el primer firmware del AIPW-525H y ha averiguado muchísimas cosas.
Gran trabajo
Primero: Empieza muy fuerte dándonos los credenciales para acceso telnet. Si mireís en este tema : Hydra y Hydra-GTK : las potentes herramientas de código libre para ataques de contraseñas con conexión uso el AIPH-525W para mis pruebas y constato que el router tiene además de una puerta trasera el telnet habilitado :
nmap 192.168.7.1
Starting Nmap 6.47 ( http://nmap.org ) at 2015-02-18 00:13 CET
Nmap scan report for 192.168.7.1
Host is up (0.041s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
23/tcp open telnet
53/tcp open domain
80/tcp open http
Nmap done: 1 IP address (1 host up) scanned in 0.76 seconds
Extrañamente no se puede configurar, habilitar o lo quie sea en la interfaz de configuración. Simplemente no existe según la interfaz.
En fin, no se como lo ha hecho pero reversetheg@p ha encontrado los credenciales :
acceso telnet asegurado con root:5up
La consola nos abre perspectivas nuevas. Podríamos por ejemplo cambiar este PIN permanente:
Hello kcdtv,
I have same kind of model you posted, an Alfa Network AIP-W525H (version 1) with firmware v2.5.2.a1, just to tell you that you can change this "permanent" WPS pin, not only that but change mac address. There's 2 ways to do it:
- you can issue commands over telnet 192.168.2.1 23 login as root and 5up as pass
PIN que no podemos cambiar desde la interfaz web... o esto parecía hasta que reversetheg@p nos desvele el segundo notición del día:
Existencia de una pagina de configuración "secreta" en la interfaz web a esta dirrección http://192.168.2.1/syscmd.asp
Con mi versión de firmware (la ultima) no he tenido suerte y es probablemente un bug que han arreglados los de alfa. ( si mo equivoco la 2.a1 que ha estudiadoes de 2012-2013 y uso la 2.5 que es la ultima)
Y reversethjeg@p sigue dándonos información nueva detallando los procesos posibles para generar un PIN:
Indeed there's the wscd command that allows you to generate and assign pins with arguments like -gen-pin, generate pin code for local entitiy (it's misspelled on source code ); -peer_pin, assign pin code for peer entitiy; -local_pin, assign pin code for local device
Podemos usar wsc de varios modos para configurar-genrar un PIN
( por ejmplo con wsc gen-pin genramos un pin "aleatorio" )
Podemos usar wsc para configurar de forma normal.
O podemos usar flash (la que se usa en el script startup.sh ... )
la diferencia entre flash y wsc es la siguiente
Flash es similar a nvram; esto hace que lo que hacemos con flash se va guardar reboots tràs reboots
flash nos permite configurar a un nivel más profundo que con wsc
reversetheg@p nos da unos ejemplos concretos:
// get WPS pin
# flash get wlan0 HW_WSC_PIN
HW_WSC_PIN="77756886"
// generate a "random" WPS pin
# flash -gen-pin
// save a new pin manually for instance 88884444 (reboot afterwards to take effect)
# flash set wlan0 HW_WSC_PIN 88884444
// change mac address permanently on wlan0
# flash set wlan0 HW_WLAN_ADDR 00c0ca1c2014
// change mac address temporarily (untill reboot) on wlan0 (to take effect do >> ifconfig wlan0 down && ifconfig wlan0 up)
# ifconfig wlan0 hw ether 00c0ca111111
Con
flash get wlan0 HW_WSC_PIN
sabemos cual es el PIN en uso :
y podemos hacer mucho más cosas como veís en los ejemplos.
de paso podemos ver con
flash allhw
nuestro PIN :
HW_WLAN0_WSC_PIN="07760891"
Queda por entender del todo el "pingen" y las llamadas a funciones exteriores.
más en el próximo episodio
Desconectado
En este post : Binwalk : extrae en unos segundos el firmware de su router , kcD4MdG2yD9r pregunta por el fichero *.bin estudiado
AIP-W525H V3.2.0.2.3_.zip (descarga desde sitio alfa)
@ kcD4MdG2yD9r
Se agradecería muchisimo si explicabas un poquito como lo haces
Saludos y suerte
Desconectado
Tema | Respuestas | Vistas | Ultimo mensaje |
---|---|---|---|
|
26 | 7599 | 15-03-2023 16:57:32 por kcdtv |
Pegado: |
34 | 3711 | 12-03-2023 18:24:22 por Guybrush92 |
Pegado: |
436 | 63222 | 07-03-2023 12:35:27 por kcdtv |
0 | 389 | 23-02-2023 17:09:39 por kcdtv | |
114 | 258210 | 19-02-2023 17:36:14 por chuchof |
Ultimo usuario registrado: trdmexico
Usuarios registrados conectados: 0
Invitados conectados: 14
Número total de usuarios registrados: 2,431
Número total de temas: 1,632
Número total de mensajes: 15,528
Atom tema feed - Impulsado por FluxBB