Algoritmo PIN por defecto dispositivos con chipset realtek (rtl189x) (Pagina 1) / Estudio de algoritmos y recopilación de PIN genéricos / Foro Wifi-libre.com

El libre pensamiento para un internet libre

No estas registrado.     

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

#1 30-04-2015 18:26:01

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 2,058

Algoritmo PIN por defecto dispositivos con chipset realtek (rtl189x)

Estudiando el algoritmo de los dispositivos con chipset realtek vinculados con el "rtl189x project"   

    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)


Primeras pistas en el script "startup.sh" del directorio bin

  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 mini_algoreal.jpg
  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)

algoreal2.jpg

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....

binwalk2.jpg

#!/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 : algoreal3.jpg
Se declara justo después de que se define el tiempo
¿Tendremos una relación entre el tiempo y el PIN?
analizamos-la

Condición de control que genera el PIN por defecto
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

  1. flash

  2. gen-pin

Siempre es bueno poder contar con la ayuda de "someone else"

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"

someone_else escribió:

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


Más elementos  gracias [email protected]

  A este momento sale de la nada un nuevo usuario en el foro kali, [email protected]
Ha estudiado muy en detalle el primer firmware del AIPW-525H y ha averiguado muchísimas cosas.
Gran trabajo cool

  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  [email protected] ha encontrado los credenciales :

acceso telnet asegurado con root:5up

La consola nos abre perspectivas nuevas. Podríamos por ejemplo cambiar este PIN permanente:

[email protected] escribió:

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 [email protected] 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)

El comando wsc y flash

Y [email protected] sigue dándonos información nueva detallando los procesos posibles para generar un PIN:

[email protected] escribió:

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

[email protected] 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 : algoreal4.jpg
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 wink

Desconectado

Anuncio

Wifi-highpower.es es distribuidor oficial de Alfa Network

#2 18-06-2015 17:04:29

kcdtv
Administrator

Registrado: 14-11-2014
Mensajes: 2,058

Re: Algoritmo PIN por defecto dispositivos con chipset realtek (rtl189x)

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 smile

Desconectado

Anuncio

Wifi-libre.com: El libre pensamiento para un internet libre / Regístrese ahora

Temas similares

Tema Respuestas Vistas Ultimo mensaje
11 90 Hoy 15:55:34 por kcdtv
Pegado:
Pegado:: Belgrano Windalo por Patcher
3 64 Hoy 15:32:01 por kcdtv
11 179 Hoy 00:44:17 por Patcher
Hola! por Ike
3 34 Ayer 22:36:24 por Flashed
0 16 Ayer 19:25:20 por kcdtv

Pie de página

Información del usuario

Ultimo usuario registrado: Ike
Usuarios registrados conectados: 0
Invitados conectados: 8

Estadisticas de los foros

Número total de usuarios registrados: 356
Número total de temas: 618
Número total de mensajes: 4,237

Máx. usuarios conectados: 45 el 12-04-2016 12:02:20