Fuzzing Parameters
Last updated
Last updated
Para exploração de buffer overflow baseada em pilha, geralmente seguimos cinco etapas principais para identificar e explorar a vulnerabilidade de buffer overflow:
Parâmetros de difusão
Controlando EIP
Identificando bad characters
Encontrando uma instrução de devolução
Pulando para Shellcode
Normalmente, o primeiro passo em qualquer exercício de vulnerabilidade binária é confundir vários parâmetros e qualquer outra entrada que o programa aceita para ver se nossa entrada pode causar o travamento do aplicativo. Se alguma de nossas entradas causar o travamento do programa, revisaremos o que causou o travamento do programa. Se percebermos que o programa travou porque nossa entrada substituiu o EIP
registro, provavelmente teremos uma vulnerabilidade de buffer overflow baseada em pilha. Tudo o que resta é explorar esta vulnerabilidade com sucesso, cuja dificuldade pode variar dependendo do sistema operacional, da arquitetura do programa e das proteções.
Conforme discutido na seção anterior, podemos abrir nosso programa com x32dbg ou executá-lo separadamente e anexar a ele. É sempre preferível executá-lo separadamente e anexá-lo para garantir que o depuraremos exatamente como é quando executado normalmente. Isso pode não fazer muita diferença para programas básicos como este, mas outros programas que dependem de várias bibliotecas podem enfrentar algumas diferenças, por isso preferimos anexar a um processo. Depois que nosso depurador estiver anexado Free CD to MP3 Converter
, podemos começar a confundir vários campos de entrada.
Vamos começar criando uma carga útil de texto muito grande, como 10,000
caracteres, e inseri-los em nosso campo. Podemos obter nossa carga de texto com python, da seguinte maneira:
Agora podemos copiar nosso payload e colá-lo em ambos os campos da janela de registro e clicar em Ok
:
Agora vamos passar para a difusão do programa com os arquivos abertos. Tanto o menu do programa File
quanto o clique no Encode
botão parecem aceitar .wav
arquivos, que está entre os arquivos que tendem a causar overflows. Então, vamos tentar confundir o programa com .wav
arquivos.
Primeiro, repetiremos o que fizemos acima para gerar nossa carga de texto e gravar a saída em um .wav
arquivo, como segue:
Assim que abrimos o arquivo, vemos que o programa trava e o depurador faz uma pausa com uma mensagem dizendo First chance exception on 41414141
:
A mensagem indica que o programa tentou executar o endereço 41414141
. Em ASCII, a letra maiúscula A
tem código hexadecimal 0x41
, então parece que o programa tentou ir para o endereço AAAA
, o que significa que alteramos o EIP
endereço com sucesso.
Podemos confirmar isso verificando a janela de registros no canto superior direito:
Como podemos ver, de fato substituímos EBP
e EIP
e, em seguida, o programa tentou executar nosso EIP
endereço substituído.
Isso mostra que estamos controlando o EIP
, então podemos explorar essa vulnerabilidade para executar o shellcode que gravamos na memória.
Agora, enquanto estamos anexados ao x32dbg
, vamos tentar abrir nosso arquivo payload, clicando no Encode
ícone: