Przeprowadzanie analizy podatności

https://chacker.pl/

W tym momencie analiza podatności nie różni się wiele od tego, czego uczono w poprzednich sekcjach. Można wyszukiwać podatności typu command-injection, format-string, bufferoverflow, use-after-free, misconfiguration i wiele innych. W tym przypadku użyjemy techniki wyszukiwania podatności typu commandinjection w plikach wykonywalnych. Ponieważ /bin/ssi jest plikiem binarnym, poszukamy ciągów formatujących, które używają %s (dla string), a następnie przekierujemy dane wyjściowe do /dev/null (co oznacza, że ​​nie interesują nas dane wyjściowe). Ten wzorzec jest interesujący, ponieważ może wskazywać na funkcję sprintf, która tworzy polecenie z potencjalnie kontrolowaną przez użytkownika zmienną do użycia z popen lub systemem. Na przykład polecenie sprawdzające, czy inny host jest aktywny, można utworzyć w następujący sposób:

Kontynuując od katalogu squashfs-root z laboratorium 21-1, przeanalizujemy plik binarny ssi. Jeśli zmienna jest kontrolowana przez atakującego i nie jest czyszczona, a polecenie cmd jest używane do wykonania w powłoce, atakujący może wstrzyknąć swoje polecenie do zamierzonego polecenia. W tym przypadku mamy dwa interesujące ciągi znaków, które wydają się pobierać plik:

Uzbrojeni w te dwa ciągi znaków, zaczniemy odwracać kod binarny, aby sprawdzić, czy mamy kontrolę nad zmienną. Ghidra będzie naszym narzędziem z wyboru w tym laboratorium, ponieważ jest dostępna bezpłatnie. Zapoznaj się z rozdziałem 4, aby uzyskać instrukcje dotyczące instalowania i tworzenia projektu. Głównym celem analizy Ghidra jest ustalenie, czy ciąg jest używany w sposób, który umożliwia atakującemu jego zmianę. Po otwarciu pliku binarnego SSI w Ghidra i upewnieniu się, że procesor jest ustawiony na MIPS, wykonujemy następujące kroki:

  1. Wyszukaj interesujący Cię ciąg znaków.
  2. Określ, w jaki sposób jest używany ciąg znaków.
  3. Określ, skąd pochodzi adres URL (jeśli jest zakodowany na stałe, nie jesteśmy nim zainteresowani).

Przejdź do menu Szukaj | Dla ciągów znaków, aby wyświetlić ekran wyszukiwania tekstu, pokazany tutaj. Pozostaw ustawienia domyślne, a następnie kliknij Szukaj.

Po zakończeniu wyszukaj „wget” (zauważ spację po wget), a zobaczysz dwa ciągi, które znaleźliśmy, używając wiersza poleceń (1) strings na liście. Znajdujemy tylko dwa wystąpienia „wget”: jedno to ciąg formatu statycznego, a drugie to odwołanie do ciągu statycznego

Dwukrotne kliknięcie wyróżnionego wyniku przeniesie nas do tego adresu w liście dezasemblacji. Po przejściu do okna Listing naciśnij CTRL-SHIFT-F, gdy kursor znajduje się pod adresem 00428458 i kliknij dwukrotnie jedyne odniesienie pod adresem 00409010. Teraz zobaczysz zdezasemblowany kod w odniesieniu po lewej stronie i zdekompilowaną wersję zdezasemblowanego kodu po prawej stronie. Przewijając w dół, zobaczymy, że ciąg jest używany w sprintf do skonstruowania polecenia pobierania, które jest przekazywane do systemu, jak pokazano poniżej.

W tym momencie wiemy przynajmniej, że ciąg jest używany do wywołania systemu. Stąd musimy zrozumieć, w jaki sposób dostarczany jest adres URL w ciągu formatu. Wymaga to od nas prześledzenia przepływu sterowania programu do tego punktu. Aby prześledzić przepływ sterowania do wejścia tej podprogramu/funkcji, musimy przewinąć do góry funkcji i wybrać adres (00408f30) po lewej stronie. Po wybraniu adresu po prostu naciskamy CTRL-SHIFT-F, aby przejść do odniesienia, jak pokazano tutaj.

Odwołanie krzyżowe do procedury pobierania jest w rzeczywistości tabelą wyszukiwania ze wskaźnikami funkcji do punktów wejścia dla każdego polecenia. Kod wyszukuje polecenie i przechodzi do wskaźnika procedury, który jest obok niego. Zobaczysz polecenia dla „Funkcji IPv6”, „Pobierz FW i język do DUT” i „get_wan_ip”, tuż nad i pod adresem. Zwróć uwagę, że polecenia mają formę krótkiej nazwy, wskaźnika funkcji i długiej nazwy. Ponieważ jest to tabela wyszukiwania, musimy znaleźć początek tabeli, aby zlokalizować do niej odwołanie krzyżowe. Przewijając w górę, widzimy, że adres 004466dc wydaje się być podstawą tabeli skoków. Naciśnięcie CTRL-SHIFT-F na tym adresie powoduje, że otrzymujemy kod, który przetwarza tabelę skoków, jak pokazano poniżej (ssi_cgi_tool_main).

Chociaż nie udało nam się całkowicie prześledzić pochodzenia wywołania systemowego do roota, można śmiało powiedzieć, że wskazuje ono na polecenie cgi w celu pobrania oprogramowania sprzętowego. Kilka poleceń greps (2) (4) w rootfs dla ciągu „download_fw_lp” daje nam pochodzenie (3)(5). W tym momencie przejdziemy do próby wykorzystania urządzenia poprzez aktualizację oprogramowania sprzętowego.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *