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

4 KiB

Problèmes d'Exploitation Courants

{% hint style="success" %} Apprenez et pratiquez le Hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le Hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Soutenir HackTricks
{% endhint %}

FDs dans l'Exploitation à Distance

Lors de l'envoi d'un exploit à 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 s'attendra à une entrée depuis stdin (FD : 0) et imprimera 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 cela est de supposer que lorsque le serveur a démarré, il a créé le FD numéro 3 (pour écouter) et que ensuite, votre connexion sera dans le FD numéro 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 rendre possible le contact avec le shell une fois qu'il est exécuté.

Exemple d'exploit 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. Donc, 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 préfixé à tout \x7f envoyé.

Ici, vous pouvez trouver un exemple de ce comportement.

{% hint style="success" %} Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)

Supportez HackTricks
{% endhint %}