Exploiting Tools
Last updated
Last updated
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)
İsterseniz bu GEF çatısını kullanabilirsiniz, bu daha ilginç talimatlar içerir.
Hata ayıklama sırasında GDB, çalıştırıldığında ikili dosya tarafından kullanılan adreslerden biraz farklı adreslere sahip olacaktır. GDB'nin aynı adreslere sahip olmasını sağlamak için:
unset env LINES
unset env COLUMNS
set env _=<path>
İkili dosyanın mutlak yolunu koyun
İkili dosyayı aynı mutlak yol ile istismar edin
PWD
ve OLDPWD
, GDB kullanırken ve ikili dosyayı istismar ederken aynı olmalıdır
Eğer statik bağlı bir ikili dosya varsa, tüm fonksiyonlar ikili dosyaya ait olacaktır (ve dış kütüphanelere değil). Bu durumda, ikili dosyanın kullanıcı girişi istemek için izlediği akışı tanımlamak zor olacaktır.
Bu akışı kolayca tanımlayabilirsiniz gdb ile ikili dosyayı çalıştırarak, giriş istenene kadar. Ardından, CTRL+C ile durdurun ve çağrılan fonksiyonları görmek için bt
(geri izleme) komutunu kullanın:
gdbserver --multi 0.0.0.0:23947
(IDA'da Linux makinesindeki çalıştırılabilir dosyanın mutlak yolunu ve Windows makinesindeki yolu doldurmalısınız)
Ghidra, yerel değişkenlerin konumu hakkında bilgi sayesinde bir buffer overflow için ofset bulmak için çok kullanışlıdır.
Örneğin, aşağıdaki örnekte, local_bc
'deki bir buffer akışı, 0xbc
ofsetine ihtiyacınız olduğunu gösterir. Ayrıca, local_10
bir canary çereziyse, local_bc
'den üzerine yazmak için 0xac
ofsetine ihtiyaç olduğunu gösterir.
&#xNAN;Remember, RIP'in kaydedildiği ilk 0x08'in RBP'ye ait olduğunu unutmayın.
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 --> Korumasız derleme &#xNAN;-o --> Çıktı &#xNAN;-g --> Kodu kaydet (GDB bunu görebilecek) echo 0 > /proc/sys/kernel/randomize_va_space --> Linux'ta ASLR'yi devre dışı bırakmak için
Bir shellcode derlemek için: nasm -f elf assembly.asm --> ".o" döndürür ld assembly.o -o shellcodeout --> Çalıştırılabilir
-d --> Çalıştırılabilir bölümleri ayrıştır (derlenmiş bir shellcode'un opcodlarını gör, ROP Gadget'ları bul, fonksiyon adresini bul...) &#xNAN;-Mintel --> Intel sözdizimi &#xNAN;-t --> Semboller tablosu &#xNAN;-D --> Tümünü ayrıştır (statik değişkenin adresi) &#xNAN;-s -j .dtors --> dtors bölümü &#xNAN;-s -j .got --> got bölümü -D -s -j .plt --> plt bölümü decompile edildi &#xNAN;-TR --> Yeniden konumlandırmalar ojdump -t --dynamic-relo ./exec | grep puts --> GOT'da değiştirilmesi gereken "puts" adresi objdump -D ./exec | grep "VAR_NAME" --> Statik bir değişkenin adresi (bunlar DATA bölümünde saklanır).
Programımı başlatmadan önce ulimit -c unlimited
çalıştırın
sudo sysctl -w kernel.core_pattern=/tmp/core-%e.%p.%h.%t
çalıştırın
sudo gdb --core=<path/core> --quiet
ldd executable | grep libc.so.6 --> Adres (eğer ASLR varsa, bu her seferinde değişir) for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done --> Adresin çok değişip değişmediğini görmek için döngü readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system --> "system" ofseti strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh --> "/bin/sh" ofseti
strace executable --> Çalıştırılabilir tarafından çağrılan fonksiyonlar rabin2 -i ejecutable --> Tüm fonksiyonların adresi
IDA klasörü içinde, bir binary'yi linux içinde hata ayıklamak için kullanılabilecek binary'ler bulabilirsiniz. Bunu yapmak için linux_server
veya linux_server64
binary'sini linux sunucusuna taşıyın ve binary'nin bulunduğu klasörde çalıştırın:
Sonra, hata ayıklayıcıyı yapılandırın: Debugger (linux remote) --> Proccess options...:
AWS Hacking'i öğrenin ve pratik yapın:HackTricks Training AWS Red Team Expert (ARTE) GCP Hacking'i öğrenin ve pratik yapın: HackTricks Training GCP Red Team Expert (GRTE)