Exploiting Tools
Last updated
Last updated
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Możesz opcjonalnie użyć tego forka GEF, który zawiera bardziej interesujące instrukcje.
Podczas debugowania GDB będzie miało nieco inne adresy niż te używane przez binarny podczas wykonywania. Możesz sprawić, aby GDB miało te same adresy, wykonując:
unset env LINES
unset env COLUMNS
set env _=<path>
Podaj absolutną ścieżkę do binarnego
Wykorzystaj binarny, używając tej samej absolutnej ścieżki
PWD
i OLDPWD
muszą być takie same podczas korzystania z GDB i podczas eksploatacji binarnego
Kiedy masz statycznie powiązany binarny, wszystkie funkcje będą należały do binarnego (a nie do zewnętrznych bibliotek). W takim przypadku będzie trudno zidentyfikować przepływ, który binarny podąża, aby na przykład poprosić o dane wejściowe.
Możesz łatwo zidentyfikować ten przepływ, uruchamiając binarny 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ływane funkcje:
gdbserver --multi 0.0.0.0:23947
(w IDA musisz wypełnić absolutną ścieżkę do pliku wykonywalnego w maszynie Linux i w maszynie Windows)
Ghidra jest bardzo przydatna do znalezienia offsetu 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 potrzebny jest offset 0xbc
. Ponadto, jeśli local_10
jest ciastkiem kanarowym, wskazuje, że aby go nadpisać z local_bc
, potrzebny jest offset 0xac
.
&#xNAN;Remember, że pierwsze 0x08, z którego zapisywane jest RIP, należy do RBP.
Get every opcode executed in the program.
gcc -fno-stack-protector -D_FORTIFY_SOURCE=0 -z norelro -z execstack 1.2.c -o 1.2 --> Kompiluj bez zabezpieczeń &#xNAN;-o --> Wyjście &#xNAN;-g --> Zapisz kod (GDB będzie mógł go zobaczyć) echo 0 > /proc/sys/kernel/randomize_va_space --> Aby dezaktywować ASLR w linuxie
Aby skompilować shellcode: nasm -f elf assembly.asm --> zwraca ".o" ld assembly.o -o shellcodeout --> Wykonywalny
-d --> Zdekompiluj sekcje wykonywalne (zobacz opcodes skompilowanego shellcode, znajdź ROP Gadgets, znajdź adres funkcji...) &#xNAN;-Mintel --> Intel składnia &#xNAN;-t --> Tabela symboli &#xNAN;-D --> Zdekompiluj wszystko (adres zmiennej statycznej) &#xNAN;-s -j .dtors --> sekcja dtors &#xNAN;-s -j .got --> sekcja got -D -s -j .plt --> plt sekcja zdekompilowana &#xNAN;-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 (te są 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 --> Offset "system" strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> Offset "/bin/sh"
strace executable --> Funkcje wywoływane przez wykonywalny rabin2 -i ejecutable --> Adres wszystkich funkcji
W folderze IDA można znaleźć pliki binarne, które można wykorzystać do debugowania binariów w systemie linux. Aby to zrobić, przenieś plik binarny linux_server
lub linux_server64
na serwer linux i uruchom go w folderze, który zawiera plik binarny:
Następnie skonfiguruj debugger: Debugger (linux remote) --> Opcje procesu...:
Ucz się i ćwicz Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Ucz się i ćwicz Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)