Exploiting Tools
Metasploit
Shellkody
GDB
Instalacja
Parametry
Instrukcje
Opcjonalnie możesz użyć tej wersji GEF, która zawiera bardziej interesujące instrukcje.
Sztuczki
Takie same adresy w GDB
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 binarnegoWykorzystaj błąd w binarnym pliku, używając tej samej bezwzględnej ścieżki
PWD
iOLDPWD
muszą być takie same podczas korzystania z GDB i wykorzystywania błędu w binarnym pliku
Backtrace do znalezienia wywołanych funkcji
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:
Serwer GDB
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
Znajdowanie przesunięcia stosu
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.
qtool
Zdobądź każdy opcode wykonany w programie.
GCC
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
Objdump
-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).
Core dumps
Uruchom
ulimit -c unlimited
przed uruchomieniem mojego programuUruchom
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
sudo gdb --core=<path/core> --quiet
More
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
Inmunity debugger
IDA
Debugowanie w zdalnym systemie Linux
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...:
Last updated