Wprowadzenie do Ghidry

https://chacker.pl/

Ghidra to zestaw narzędzi do inżynierii wstecznej oprogramowania (SRE) opracowany i utrzymywany przez Dyrekcję ds. Badań Agencji Bezpieczeństwa Narodowego w celu wsparcia jej misji w zakresie cyberbezpieczeństwa. Ghidra została udostępniona publicznie i otwarta w okresie od marca do kwietnia 2019 r., ale została przetestowana w walce prywatnie przez agencję. Można go używać do analizy złośliwego oprogramowania, badania podatności, opracowywania exploitów, a także wielu innych zadań związanych z inżynierią wsteczną systemów wbudowanych i oprogramowania sprzętowego. Ghidra obsługuje różne architektury, platformy i formaty binarne, zapewniając bardzo interesujący zestaw funkcji. Ponadto jego społeczność szybko rośnie, ponieważ Ghidra zapewniła doskonałą, bezpłatną i otwartą alternatywę dla innych świetnych narzędzi, takich jak IDA Pro.

heapme_demo.c

https://chacker.pl/

Na początek utwórz i skompiluj następujący program:

Następnie wykonaj następujące kroki (które zawierają odniesienia do kodu

poniżej), aby zobaczyć HeapME w akcji:

  1. Użyj gdb do debugowania programu heapme_demo (1).
  2. Wykonaj polecenie gdb start (2).
  3. Uruchom wtyczkę pomocniczą do analizy sterty Gef (3).
  4. Przejdź do strony internetowej HeapME (https://heapme.f2tc.com/).
  5. Zarejestruj się i zaloguj.
  6. Utwórz i skopiuj nowy adres URL i klucz HeapME.
  7. Po skopiowaniu kliknij przycisk Dalej.
  8. Wróć do gdb i wklej linię heapme init

https://heapme.f2tc.com/ <id> <klucz> (4) .

  1. Będziemy używać heapme watch malloc (5) i heapme watch free (6), aby zaktualizować informacje o wszystkich fragmentach sterty i wolnych pojemnikach, ilekroć te

trafione zostaną punkty przerwania.

  1. Wykonaj c lub kontynuuj (7) . Powinieneś zobaczyć adres URL HeapME

aktualizowane w czasie rzeczywistym. Jest to także dobra okazja, aby pobawić się poleceniami sterty Gef (pojemniki sterty, fragmenty sterty itd.).

Przedstawiliśmy listę przydatnych narzędzi, które znacząco usprawnią proces analizy dynamicznej. Omówiliśmy także sposoby rozszerzenia i automatyzacji procesu debugowania za pomocą gdb. Przyjrzeliśmy się podatnemu na ataki kodowi sprawdzającemu koncepcję z exploitem napisanym w Pythonie przy użyciu środowiska programistycznego pwntools. Na koniec zbadaliśmy narzędzie do analizy i współpracy sterty HeapME (Heap Made Easy).

HeapME (Heap Made Easy) Narzędzie do analizy sterty i współpracy

https://chacker.pl/

Heap Made Easy (HeapME)12 to narzędzie typu open source opracowane przez Huáscara Tejedę , aby pomóc uprościć proces analizy sterty i współpracy. Oto lista niektórych funkcji HeapME:

  • Ponadczasowe debugowanie sterty
  • Śledzenie wszystkich stanów porcji/wolnych pojemników
  • Bezproblemowa współpraca w zakresie analiz
  • Udostępniony link do wizualizacji tylko do odczytu
  • Świetne dla CTF

• Wsparcie dla ptmalloc2 w aktualnej wersji

leak-bof.c

https://chacker.pl/

Najpierw kompilujemy kod podatny na przepełnienie bufora:

Następnie uruchamiamy exploit napisany w Pythonie za pomocą pwntools:

Można tu zastosować mniejszy i prostszy exploit, ale celowo użyjemy nieco bardziej skomplikowanego exploita, aby pokazać jego możliwości. Oto wynik:

Podsumowanie funkcji

https://chacker.pl/

Otwórzmy nasz terminal Python, zaimportuj moduł pwn i poznajmy niektóre z potężnych funkcji Pwntools:

Inne funkcje obejmują funkcje pomagające w typowych prymitywach i technikach eksploatacji, takich jak budowanie łańcuchów ROP, kodów powłoki i struktur SROP, pomocników dynamicznych wycieków pamięci, wykorzystywanie ciągów formatujących, generowanie wzorców cyklicznych i wiele innych. Opracowujemy dwuetapowy exploit, który omija ASLR, PIE i NX przy użyciu ładunku ROP + SROP.

Framework i exploit Pwntools CTF

https://chacker.pl/

Biblioteka Rozwoju

Pwntools to biblioteka do przechwytywania flagi (CTF) i programowania exploitów, która doskonale nadaje się do szybkiego prototypowania exploitów. Oszczędza dużo czasu i wysiłku podczas pisania typowych zadań związanych z eksploatacją, pozwala skupić się na logice exploita, a także zapewnia szeroki zestaw przydatnych funkcji. Wykonaj następujące polecenia, aby zainstalować pwntools:

Rozszerzanie gdb za pomocą Pythona

https://chacker.pl/

W wersji 7 dodano obsługę rozszerzania gdb za pomocą Pythona. Ta funkcja jest dostępna tylko wtedy, gdy gdb został skompilowany z opcją konfiguracyjną –withpython. Dzięki tej funkcji, poza możliwością pisania niestandardowych funkcji i automatyzacji wielu zadań, aktywnie rozwijano wiele projektów wtyczek gdb w celu uproszczenia i wzbogacenia procesu debugowania o takie funkcje, jak osadzony widok zrzutu szesnastkowego, wyłuskiwanie danych lub rejestrów, sterta analiza, automatyczne wykrywanie stanu bez użycia (UAF) i inne zaawansowane funkcje. Oto niektóre z najpopularniejszych skryptów gdb:

  1. Ulepszone funkcje Gef9 GDB dla twórców exploitów i inżynierów wstecznych
  2. Pwndbg10 Tworzenie exploitów i inżynieria wsteczna dzięki GDB Made Easy

3. PEDA11 Pomoc w opracowywaniu exploitów w języku Python dla GDB.

Ropper

https://chacker.pl/

Ropper to przydatne narzędzie do generowania łańcuchów ROP i znajdowania gadżetów do ponownego wykorzystania kodu. Jest w stanie ładować pliki binarne w formatach ELF, PE i Mach-O i obsługuje wiele architektur (x86, x86_64, MIPS, MIPS64, ARM/Thumb, ARM64, PowerPC i Sparc) przy użyciu platformy deasemblacji Capstone7. Aby zainstalować Roppera, użyj sudo apt install ropper. Jedną z jego najciekawszych funkcji jest możliwość wyszukiwania gadżetów na podstawie ograniczeń i warunków formatu pliku. Utwórzmy łańcuch ROP, który wywoła mprotect(), aby włączyć uprawnienia wykonywalne dla dowolnego adresu

Powstały fragment kodu Pythona zostanie utworzony:

Możemy również użyć wyszukiwania semantycznego, aby znaleźć gadżet, który zwiększa wskaźnik stosu o 16 bajtów, unikając zaśmiecania rejestrów R15 i RDI: ropper — plik <plik-binarny> –semantic „rsp+=16 !r15 !rdi”. Aby skorzystać z tej funkcji, musisz zainstalować pyvex i z3, postępując zgodnie z instrukcjami na stronie projektu GitHub. Jak widać, oszczędza to dużo czasu i wysiłku, a także zapewnia wiele innych interesujących funkcji — od programowania zorientowanego na skok (JOP) po obracanie stosu.

Korzystanie z narzędzia one_gadget

https://chacker.pl/

Zamiast ręcznie szukać one_gadgets dla wielu wersji glibc, możesz użyć narzędzia one_gadget, napisanego w języku Ruby przez david942j i dostępnego w RubyGems (gem install one_gadget). To narzędzie wykorzystuje wykonanie symboliczne do znalezienia one_gadgets i ich ograniczeń. Projekt ten jest dostępny na GitHubie.6 Aby go zainstalować, użyj polecenia sudo gem install one_gadget. Aby automatycznie znaleźć one_gadgets, uruchamiamy narzędzie, podając bibliotekę docelową w następujący sposób: