hacktricks/binary-exploitation/common-exploiting-problems.md

4.3 KiB

Problèmes courants d'exploitation

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!

FDs dans l'exploitation à distance

Lors de l'envoi d'une exploitation à un serveur distant qui appelle system('/bin/sh') par exemple, cela sera exécuté dans le processus du serveur bien sûr, et /bin/sh attendra une entrée de stdin (FD: 0) et affichera la sortie dans stdout et stderr (FDs 1 et 2). Ainsi, l'attaquant ne pourra pas interagir avec le shell.

Une façon de résoudre ce problème est de supposer que lorsque le serveur a démarré, il a créé le numéro de FD 3 (pour l'écoute) et que ensuite, votre connexion se fera sur le numéro de FD 4. Par conséquent, il est possible d'utiliser l'appel système dup2 pour dupliquer le stdin (FD 0) et le stdout (FD 1) dans le FD 4 (celui de la connexion de l'attaquant) afin de pouvoir contacter le shell une fois qu'il est exécuté.

Exemple d'exploitation à partir d'ici:

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

Notez que socat transfère déjà stdin et stdout vers le socket. Cependant, le mode pty inclut les caractères DELETE. Ainsi, si vous envoyez un \x7f (DELETE), cela supprimera le caractère précédent de votre exploit.

Pour contourner cela, le caractère d'échappement \x16 doit être ajouté avant tout envoi de \x7f.

Vous pouvez trouver un exemple de ce comportement** ici**.

Apprenez le piratage AWS de zéro à héros avec htARTE (HackTricks AWS Red Team Expert)!