Hlavní navigace

Jak získat z RouterBoardu heslo

8. 9. 2010
Doba čtení: 7 minut

Sdílet

Poslední dobou se mi množí dotazy na získání hesla z RouterBoardů od firmy Mikrotik. Ta si zrovna se zabezpečením hlavu neláme, takže i když heslo zapomenete, není proč věšet hlavu a stačí vytáhnout rootfs a jádro z OpenWRT, najít správný soubor, odeslat ho do bezpečí a heslo si vzít zase zpátky.

Motivační a demotivační úvod

Routery jsou krabičky, které mohou několik let bez problémů fungovat a nikdo ani neví, že pod tou střechou existují. Jenže se může něco stát nebo ISP změní konfiguraci a je potřeba v nich něco opravit. Pokud je to již opravdu dlouho, vybavit si heslo může být velký problém. Z prozřetelnosti jste tam to výchozí nenechali a navíc aby to bylo super bezpečný, vygenerovali jste si nějaké náhodné heslo z /dev/urandom. Během těch let jste už několikrát měnili operační systém a v horším případě se třeba odporoučel i nějaký ten pevný disk. Zkrátka řečeno, heslo je pryč a nezbývá, než ho dostat zpět jinými prostředky.

Druhou stranou mince mohou být neoficiální zásahy do hardwaru od vašeho ISP, ke kterým lze tento návod také použít. V některých situacích nelze jednat jinak, ISP nemusí být ochotný přistoupit na vaše požadavky a nebo za to může chtít nemalou částku peněz. V takovém případě je asi lepší uvažovat o jeho změně, ale chápu, že to nemusí být vždy tak jednoduché, proto mějte na paměti, že váš ISP nebude nadšený, když se mu budete hrabat v hardwaru a už vůbec ne, když si krabičku znefunkčníte. Takové případy také může mít ošetřené ve smlouvě. Když už tedy musíte, tak jednejte velmi opatrně a mějte na paměti, že autor tohoto návodu neručí za jakoukoli škodu, kterou si způsobíte.

Postup

Postup je vcelku jednoduchý, ale protože bootloader na RouterBoardech vsadil na bootování přes síť, nevyhneme se konfiguraci DHCP serveru a TFTP serveru. Našim cílem je nabootovat jádro a rootfs OpenWRT, namountovat oddíl s rootfs RouterOS, z něj vytáhnout soubor user.dat, ten odeslat na náš desktop či notebook, tam z něj dostat seznam uživatelů i s hesly a pak zase vše vrátit do původního stavu. Pokud jste si hráli s OpenWRT na RouterBoardech, bude to pro vás hračka. Návod je psán pro RB411 a měl by fungovat i pro RB433. U dalších RouterBoardů je rozdíl pouze v tom, pro jakou architekturu použijeme obraz OpenWRT.

Z hardwaru budeme potřebovat Null modem kabel pro propojení sériové linky počítače se sériovou linkou RouterBoardu. Bez něj se neobejdeme, protože je potřeba trochu pošťouchnout bootloader.

Příprava PC

Začneme tím, že si nainstalujeme a nakonfigurujeme DHCP server, který v debianích distribuch najdeme v balíčku dhcp3-server.

$ sudo su
# apt-get install dhcp3-server 

Jeho konfigurační soubor najdeme v /etc/dhcp3/dhcp­d.conf a umístíme do něj něco takového:

allow booting;
allow bootp;
authoritative;
ddns-update-style ad-hoc;
subnet 192.168.1.0 netmask 255.255.255.0 {
    range 192.168.1.2 192.168.1.250;
    option ip-forwarding off;
    option broadcast-address 192.168.1.255;
    option subnet-mask 255.255.255.0;
    option domain-name-servers 192.168.1.1;
    option routers 192.168.1.1;
    filename "/linuxrc";
} 

Dále budeme potřebovat balíčky gtkterm, build-essential, libssl-dev a ssh:

# apt-get install gtkterm ssh build-essential libssl-dev 

Pak nastavíme adresu a to buď pomocí NetworkManageru nebo v příkazové řádce. Pro funkci stačí, aby počítač, na kterém bude obraz se systémem, měl adresu 192.168.1.1/24. Pamatujte taky na to, že je lepší propojit RouterBoard s počítačem přímo a to hlavně pokud máte v síti již jiný DHCP server, jenž by se s tím novým mohl hádat.

# ip a a 192.168.1.1/24 dev eth0 up
# ip l s eth0 up 

Teď je čas nainstalovat atftpd server:

# apt-get install atftpd 

V Ubuntu nebylo potřeba nic konfigurovat, jen do /srv/tftp/ nakopírovat soubor s OpenWRT obrazem, který najdeme v tomto archivu, ale v jiných distribucích to může být jinak.

# cd /srv/tftp
# wget http://tinyurl.com/n3sxmp
# mv openwrt-ar71xx-vmlinux-initramfs.elf linuxrc 

Poslední krok co je potřeba udělat, je restart DHCP serveru, aby načetl novou konfiguraci:

# /etc/init.d/dhcp3-server restart 

Postup RouterBoard

Teď je čas spustit gtkterm. Nesmíme v něm zapomenout nastavit správně rychlost a port.

Nyní můžeme připojit RouterBoard přes sériovou linku k počítači, k síti a hlavně nesmíme zapomenout na napájení. Hned po nabootování se nám objeví text „Press any key within XX seconds to enter setup.“, a jelikož tam potřebujeme, tak stiskneme libovolnou klávesu. Poté uvidíme něco takového:

RouterBoard 411
CPU frequency: 300 MHz
  Memory size:  32 MB
  Press any key within 2 seconds to enter setup.
  RouterBOOT-2.16
  What do you want to configure?
     d - boot delay
     k - boot key
     s - serial console
     o - boot device
     u - cpu mode
     f - cpu frequency
     r - reset booter configuration
     e - format nand
     g - upgrade firmware
     i - board info
     p - boot protocol
     t - do memory testing
     x - exit setup
  your choice: 

Zde je důležité nastavit boot protocol na DHCP a boot device na bootování ze sítě. Stiskneme tedy klávesu o:

Select boot device:
   e - boot over Ethernet
 * n - boot from NAND, if fail then Ethernet
   1 - boot Ethernet once, then NAND
   o - boot from NAND only
   b - boot chosen device 

A pak e. Pokračujeme klávesou p:

Choose which boot protocol to use:
   1 - bootp protocol
 * 2 - dhcp protocol 

A potom 2. Tím by měl být bootloader nastavený a můžeme ho opustit stisknutím klávesy x. Po několika sekundách uvidíme:

Press any key within 2 seconds to enter setup..
trying dhcp protocol....... OK
resolved mac address 00:1D:60:EA:36:58
Gateway: 192.168.1.1
transfer started ...................... transfer ok, time=1.39s
setting up elf image... OK
jumping to kernel code 

A začne nabíhat stažený obraz.

  _______                     ________        __
 |       |.-----.-----.-----.|  |  |  |.----.|  |_
 |   -   ||  _  |  -__|     ||  |  |  ||   _||   _|
 |_______||   __|_____|__|__||________||__|  |____|
          |__| W I R E L E S S   F R E E D O M
 KAMIKAZE (bleeding edge, r12846) -------------------
  * 10 oz Vodka       Shake well with ice and strain
  * 10 oz Triple sec  mixture into 10 shot glasses.
  * 10 oz lime juice  Salute!
 ---------------------------------------------------
root@OpenWrt:/# 

Jsme uvnitř a můžeme si s vnitřní pamětí RouterBoardu dělat co chceme. Začneme vypsáním oddílů:

root@OpenWrt:/# cat /proc/mtd
dev:    size   erasesize  name
mtd0: 00040000 00004000 "booter"
mtd1: 003c0000 00004000 "kernel"
mtd2: 03c00000 00004000 "rootfs" 

Vidíme, že rootfs kam potřebujeme je třetí oddíl a všimneme si názvu mtd2, to totiž musíme přimountovat, tam se nachází hledaný soubor user.dat. V tomto bodě se začínají návody rozcházet. V některých totiž není uveden oddíl booter, což je zvláštní, protože já ho měl na všech RouterBoaderch, se kterými jsem si takhle hrál, což jsou RB333, RB433 a RB411, na kterém zde předvádím tento postup.

root@OpenWrt:/# mount -t yaffs2 -o ro /dev/mtdblock2 /mnt
yaffs: dev is 32505858 name is "mtdblock2"
yaffs: passed flags ""
yaffs: Attempting MTD mount on 31.2, "mtdblock2"
yaffs: auto selecting yaffs1 

Tady je druhý bod, kde se návody rozcházejí. Téměř všechny uvádí umístění souboru user.dat v /mnt/nova/store/, nicméně já ho našel v /mnt/rw/store/u­ser.dat. Adresář /mnt/nova/store byl jen symlink na /mnt/rw/store, takže se během vývoje RouterOS změnilo umístění a symlink měl zarušit zpětnou kompatibilitu. Jenže ten funguje jen když je mtdblock2 připojen do / a ne do /mnt. Když jsme našli user.dat, pošleme si ho na desktop či notebook.

root@OpenWrt:/# ifconfig eth0 192.168.1.2 netmask 255.255.255.0 up
root@OpenWrt:/# ls -l /mnt/rw/store/user.dat
-rw-------    1 root     root          166 Jan  2  1970 /mnt/rw/store/user.dat
root@OpenWrt:/# scp /mnt/rw/store/user.dat USER@192.168.1.1:~/ 

Řetězec USER nahraďte jménem vlastního uživatele.

Teď už RouterBoard nebudeme potřebovat, takže ho můžeme resetovat napsáním „reboot“ a v bootloaderu v boot device nastavíme „boot from NAND, if fail then Ethernet“. Náš počítač pak vrátíme do původního stavu co se týče sítě, abychom mohli opět na internet a stáhneme si zdrojové kód utilitky mtpass, aktuálně ve verzi 0.5. Teď bude potřeba trocha kompilování. Začneme rozbalením zdrojových kódů:

$ cd ~
$ wget http://manio.skyboo.net/mikrotik/mtpass-0.5.tar.bz2
$ tar xf mtpass-0.5.tar.bz2
$ cd mtpass-0.5 

Na nových systémech s GCC 4.3 a novější je potřeba doplnit do mtpass.cpp řádek:

#include <cstdio> 

Začátek souboru bez komentářů pak vypadá takto:

#include <cstdio>
#include <iostream>
#include <list>
#include <fcntl.h>
#include <stdarg.h>
#include <string.h>
#include <openssl/md5.h> 

Teď můžeme kompilovat:

$ make 

Vyleze nám binární soubor mtpass, který hned použijeme:

root_podpora

$ ./mtpass ~/user.dat
mtpass v0.5 - MikroTik RouterOS password recovery tool, (c) 2008-2009 by manio
http://manio.skyboo.net/mikrotik/
Reading file ../user.dat, 166 bytes long
Rec# | Username        | Password           | Disable flag   | User comment
--------------------------------------------------------------------------------------------
1    | admin           | <BLANK PASSWORD>   |                | system default user
2    | admin           | XXXXXXXXXXXXXXXX   |                | system default user 

A máme to hotové. Dostaneme tak kompletní seznam uživatelů i s jejich hesly. Utilita mtpass umí pracovat i obrazy celé paměti nebo se zálohou konfigurace RouterOS. Pokud tedy zapomenete heslo, ale máte k dispozici zálohu konfigurace, bude postup ještě jednodušší.

Až příště budete dělat zálohu konfigurace, mějte na paměti, jak jednoduše se z ní dá vaše heslo získat a proto si při jejím ukládání dejte pozor.

Odkazy

Byl pro vás článek přínosný?

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.