Exploiting Tools
Last updated
Last updated
Dowiedz się i praktykuj Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Dowiedz się i praktykuj Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Opcjonalnie możesz użyć tej wersji GEF, która zawiera bardziej interesujące instrukcje.
Podczas debugowania GDB będzie miał nieco inne adresy niż te używane przez binarny plik podczas wykonywania. Możesz sprawić, że GDB będzie miał takie same adresy, wykonując następujące kroki:
unset env LINES
unset env COLUMNS
set env _=<ścieżka>
Wstaw bezwzględną ścieżkę do pliku binarnego
Wykorzystaj błąd w binarnym pliku, używając tej samej bezwzględnej ścieżki
PWD
i OLDPWD
muszą być takie same podczas korzystania z GDB i wykorzystywania błędu w binarnym pliku
Gdy masz statycznie połączony binarny plik, wszystkie funkcje będą należeć do binarnego pliku (a nie do zewnętrznych bibliotek). W tym przypadku będzie trudno zidentyfikować przepływ, którym podąża binarny plik, aby na przykład poprosić o dane wejściowe od użytkownika.
Możesz łatwo zidentyfikować ten przepływ, uruchamiając binarny plik z gdb, aż zostaniesz poproszony o dane wejściowe. Następnie zatrzymaj go za pomocą CTRL+C i użyj polecenia bt
(backtrace) aby zobaczyć wywołane funkcje:
gdbserver --multi 0.0.0.0:23947
(w IDA musisz podać pełną ścieżkę do pliku wykonywalnego na maszynie z systemem Linux i na maszynie z systemem Windows)
Ghidra jest bardzo przydatne do znalezienia przesunięcia dla przepełnienia bufora dzięki informacjom o położeniu zmiennych lokalnych.
Na przykład, w poniższym przykładzie, przepełnienie bufora w local_bc
wskazuje, że potrzebujesz przesunięcia 0xbc
. Ponadto, jeśli local_10
jest ciasteczkiem kanarkowym, wskazuje to, że aby je nadpisać z local_bc
, istnieje przesunięcie 0xac
.
Pamiętaj, że pierwsze 0x08, gdzie zapisywany jest RIP, należy do RBP.
Zdobądź każdy opcode wykonany w programie.
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> Kompiluj bez zabezpieczeń -o --> Wyjście -g --> Zapisz kod (GDB będzie w stanie go zobaczyć) echo 0 > /proc/sys/kernel/randomize_va_space --> Aby wyłączyć ASLR w systemie Linux
Aby skompilować shellcode: nasm -f elf assembly.asm --> zwraca ".o" ld assembly.o -o shellcodeout --> Wykonywalny
-d --> Rozkładaj na części sekcje wykonywalne (zobacz kody operacyjne skompilowanego shellcode, znajdź ROP Gadgets, znajdź adres funkcji...) -Mintel --> Składnia Intel -t --> Tabela Symboli -D --> Rozkładaj wszystko (adres zmiennej statycznej) -s -j .dtors --> sekcja dtors -s -j .got --> sekcja got -D -s -j .plt --> sekcja plt zdekompilowana -TR --> Relokacje ojdump -t --dynamic-relo ./exec | grep puts --> Adres "puts" do modyfikacji w GOT objdump -D ./exec | grep "VAR_NAME" --> Adres lub zmienna statyczna (przechowywane w sekcji DATA).
Uruchom ulimit -c unlimited
przed uruchomieniem mojego programu
Uruchom sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
sudo gdb --core=<path/core> --quiet
ldd executable | grep libc.so.6 --> Adres (jeśli ASLR, to zmienia się za każdym razem) for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done --> Pętla, aby zobaczyć, czy adres zmienia się dużo readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system --> Przesunięcie "system" strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> Przesunięcie "/bin/sh"
strace executable --> Funkcje wywołane przez wykonywalny rabin2 -i ejecutable --> Adres wszystkich funkcji
Wewnątrz folderu IDA znajdziesz pliki binarne, które można użyć do debugowania binarnego pliku w systemie Linux. Aby to zrobić, przenieś plik linux_server
lub linux_server64
do serwera Linux i uruchom go wewnątrz folderu, który zawiera dany plik binarny:
Następnie skonfiguruj debugger: Debugger (linux remote) --> Opcje procesu...:
Dowiedz się i praktykuj Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Dowiedz się i praktykuj Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)