Building a Remote Exploit
Last updated
Last updated
Após a difusão da porta de escuta, as etapas restantes de identificação e exploração de buffer overflow devem ser basicamente as mesmas da exploração de buffer overflow local. As principais etapas que seguimos nas seções anteriores foram:
Parâmetros de difusão
Controlando EIP
Identificando personagens ruins
Encontrando uma instrução de devolução
Pulando para Shellcode
Com a difusão concluída, seguiremos as etapas restantes nesta seção até que possamos explorar com êxito a vulnerabilidade de buffer overflow.
Começaremos criando um padrão único com 2000
bytes de comprimento, usando ERC --pattern c 2000
como fizemos anteriormente:
Agora começamos a escrever nossa eip_offset()
função. Adicionaremos nossa pattern
variável como o padrão abaixo Ascii
no Pattern_Create_1.txt
arquivo criado em nossa área de trabalho
Assim que nossa eip_offset()
função estiver pronta, podemos reiniciar nosso programa x32dbg
e executar nosso código, e nosso programa deve travar e devemos ser EIP
substituído por nosso padrão como 316A4230
:
Agora podemos usar ERC --pattern o 1jB0
para calcular o deslocamento exato, que é encontrado em 1052
bytes:
Agora, para garantir que podemos controlar o valor exato em EIP
, usaremos a mesma eip_control()
função do nosso exploit anterior (enquanto alteramos offset
), mas usando socket
para enviar nossa carga útil em vez de gravá-la em um arquivo:
Mais uma vez reiniciaremos nosso programa e executaremos nosso exploit, e poderemos confirmar que controlamos EIP
conforme substituímos EIP
por 4 B
:
Nosso próximo passo é identificar se devemos evitar o uso de caracteres ruins em nossa entrada. Podemos começar executando ERC --bytearray
para x32dbg
criar nosso ByteArray_1.bin
arquivo. Então podemos copiar as mesmas bad_chars()
funções do nosso exploit anterior e, mais uma vez, mudar de gravar a carga útil em um arquivo para enviá-la para a porta:
Depois de reiniciarmos nosso programa x32dbg
e executarmos nosso exploit, podemos usar ERC --compare
para comparar os bytes do ESP
endereço com o ByteArray_1.bin
arquivo:
Como podemos ver, todos os bytes correspondem entre a memória e ByteArray_1.bin
, o que significa que este programa não possui caracteres ruins.
Nosso passo final é explorar o programa, então começaremos criando nosso shellcode para msfvenom
abrir calc.exe
como prova de exploração bem-sucedida:
Agora, para criar nossa exploit()
função final, primeiro adicionaremos a saída acima e usaremos a mesma payload
do nosso exploit anterior (enquanto alteramos offset
o endereço em eip
). Por fim, usaremos o mesmo código de bad_chars()
para enviar nossa carga útil para a porta:
Finalmente, podemos executar CloudMe
(não necessariamente em x32dbg
) e executar nosso exploit, e devemos vê-lo travar e uma calculadora deve abrir.