Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
MIPS-CVE-2014-9222 — Divertiamoci scavando nel firmware di un router Zyxel e nell'architettura MIPS | Kitploit
Strumenti/GitHubGitHub/donfanning/mips-cve-2014-9222
Sicurezza Sistemi EmbeddedAnalisi delle VulnerabilitàExploitReverse EngineeringHacking HardwareAnalisi di BinariApprendimento e FormazioneAnalisi del Firmware
GitHubdonfanning/mips-cve-2014-9222

MIPS-CVE-2014-9222

Divertiamoci scavando nel firmware di un router Zyxel e nell'architettura MIPS

Vedi Repository
2237 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

Dichiarazione di non responsabilità

I tutorial sono solo a scopo informativo ed educativo. Credo che l'hacking etico, la sicurezza informatica e la cybersecurity dovrebbero essere argomenti familiari a chiunque utilizzi informazioni digitali e computer. Credo che sia impossibile difendersi dagli hacker senza sapere come viene fatto l'hacking.

Requisiti

$ IDA Pro +7.0 (you can use Radar2 since IDA is quite expensive)
$ Router running Rompager 4.07 : there're immense number of them such as TP-Link TD-W8951*, ZyXEL P-660R, Billion BiPAC 51**/52**
$ UART to USB

La vulnerabilità "misfortune cookie" esiste da un po' di tempo, ma manca ancora un'analisi pubblica che illustri i dettagli tecnici della vulnerabilità. Secondo Check Point, il software interessato è il server web embedded RomPager di AllegroSoft. Scansioni su scala Internet suggeriscono che RomPager sia probabilmente il software server web più diffuso al mondo in termini di endpoint disponibili. RomPager è tipicamente integrato nel firmware distribuito con il dispositivo. Questa specifica vulnerabilità è stata introdotta nel codice nel 2002. Inoltre, i dispositivi esposti sono quelli che utilizzano servizi RomPager con versioni precedenti alla 4.34 (e in particolare la 4.07).

Per questo tutorial userò un ZXHN H108L che utilizza RomPager 4.07

HTTP/1.1 401 Unauthorized
WWW-Authenticate: Basic realm="ZXHN H108L"
Content-Type: text/html
Transfer-Encoding: chunked
Server: RomPager/4.07 UPnP/1.0
EXT:

Ora usiamo la porta seriale; prima dobbiamo determinare il baud rate.

$ sudo stty -F /dev/ttyUSB0

OUT :

speed 115200 baud; line = 0;
-brkint -imaxbel

device

Uso minicom, potete usare qualsiasi cosa da screen a HyperTerminal, ma preferisco questo per la sua stabilità ;)

Devi prima disattivare il controllo del flusso hardware

$ sudo minicom -s
    +-----------------------------------------------------------------------+
    | A -    Serial Device      : /dev/modem                                |
    | B - Lockfile Location     : /var/lock                                 |
    | C -   Callin Program      :                                           |
    | D -  Callout Program      :                                           |
    | E -    Bps/Par/Bits       : 115200 8N1                                |
    | F - Hardware Flow Control : No                                        |
    | G - Software Flow Control : No                                        |
    |                                                                       |
    |    Change which setting?                                              |
    +-----------------------------------------------------------------------+
            | Screen and keyboard      |
            | Save setup as dfl        |
            | Save setup as..          |
            | Exit                     |
            | Exit from Minicom        |
            +--------------------------+

Ora siamo pronti a partire:

$ sudo minicom -D /dev/ttyUSB0 -b 115200
Bootbase Version: VTC_SPI1.26 |  2012/12/26 16:00:00    
RAM: Size = 8192 Kbytes
Found SPI Flash 2MiB GD25Q16 at 0xbfc00000
SPI Flash Quad Enable
Turn off Quad Mode

RAS Version: ZXHN H108LV4.0.0a_ZRQ_MA                                          
System   ID: $2.12.162.0(G94.BY.2)3.20.19.0| 2014/03/21   20140321_v006  | 2014 

Press any key to enter debug mode within 3 seconds.
..........

Per mostrare i comandi disponibili:

$ ATHE

======= Debug Command Listing =======
AT          just answer OK
ATHE          print help
ATBAx         change baudrate. 1:38.4k, 2:19.2k, 3:9.6k 4:57.6k 5:115.2k
ATENx,(y)     set BootExtension Debug Flag (y=password)
ATSE          show the seed of password generator
ATTI(h,m,s)   change system time to hour:min:sec or show current time
ATDA(y,m,d)   change system date to year/month/day or show current date
ATDS          dump RAS stack
ATDT          dump Boot Module Common Area
ATDUx,y       dump memory contents from address x for length y
ATRBx         display the  8-bit value of address x
ATRWx         display the 16-bit value of address x
ATRLx         display the 32-bit value of address x
ATGO(x)       run program at addr x or boot router
ATGR          boot router
ATGT          run Hardware Test Program
ATRTw,x,y(,z) RAM test level w, from address x to y (z iterations)
ATSH          dump manufacturer related data in ROM
ATDOx,y       download from address x for length y to PC via XMODEM
ATTD          download router configuration to PC via XMODEM
ATUR          upload router firmware to flash ROM

< press any key to continue >

Questo firmware ha una serie di comandi nascosti molto utili per la nostra analisi dinamica; il problema è che non possiamo vedere i registri né impostare breakpoint, ma fortunatamente con questi comandi nascosti avremmo tali funzionalità. Per vederli e usarli dobbiamo usare ATEN. Tuttavia, questo comando richiede una password, quindi cosa possiamo fare ora? Reverse engineering del firmware per trovare l'algoritmo del generatore di password.

(Analisi statica) Vediamo prima il file del firmware:

$ binwalk ras

binwalk1

$ dd if=ras of=rom1.lzma bs=1 skip=85043 count=66696
$ dd if=ras of=rom2.lzma bs=1 skip=350259 count=3350556
$ lzma -d <rom1.lzma> rom1
$ lzma -d <rom2.lzma> rom2

Vediamo ora la firma nei file estratti:

$ binwalk -Y rom1
DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             MIPS executable code, 32/64-bit, big endian, at least 1250 valid instructions

string è un ottimo strumento per farsi un'idea di cosa sia o contenga un file binario; vediamo se riusciamo a trovare l'algoritmo della password:

$ strings rom1 | grep -i aten
$ strings rom2 | grep -i aten

Apparentemente non possiamo vederlo perché il firmware è ancora compresso, il che significa che dobbiamo estrarlo dal router usando la modalità di debug:

$ ATDO bfc00000, 1f0000

xmodem

La prima cosa che viene in mente è cercare una dispatch table. Perché? Solo intuizione; l'unica alternativa è una serie di if-elif, ma sarebbe una lunga sequenza, per verificare la validità della password fornita dall'utente. Ecco cosa ho trovato:

ROM:800158A0 CmdTable:       .word unk_80015C20       # DATA XREF: sub_8000E3D8+4Co
ROM:800158A0                                          # sub_8000E3D8+90o ...
ROM:800158A4                 .word sub_8000E6D0
ROM:800158A8                 .byte    0
ROM:800158A9                 .byte    0
ROM:800158AA                 .byte    0
ROM:800158AB                 .byte    0
ROM:800158AC                 .word aJustAnswerOk      # "          just answer OK"
ROM:800158B0                 .word aAthe              # "ATHE"
ROM:800158B4                 .word CMD_SHOW_HELP_ATHE
ROM:800158B8                 .byte    0
ROM:800158B9                 .byte    0
ROM:800158BA                 .byte    0
ROM:800158BB                 .byte    0
ROM:800158BC                 .word aPrintHelp         # "          print help"
ROM:800158C0                 .word aAtba              # "ATBA"
ROM:800158C4                 .word CMD_ATBA
...
ROM:800158D0                 .word aAten              # "ATEN"
ROM:800158D4                 .word CMD_ATEN

Tieni presente che una word MIPS è di 4 byte, ora vediamo CMD_ATEN:

ROM:8000FF84                 lw      $a0, 8($s0)
ROM:8000FF88                 jal     sub_80013654
ROM:8000FF8C                 li      $a1, 0
ROM:8000FF90                 jal     passwd_generator

e ora: passwd_generator

Scarica lo strumento