Fuzzing: Encuentra rápidamente el número exacto de bytes

1

Actualmente estoy practicando desbordamiento de búfer. Y tengo una pregunta para usted con respecto a fuzzing.

Soy capaz de desarrollar una secuencia de comandos de Python que probará varios tamaños de búfer para bloquear una aplicación. Funciona bien y devuelve el tamaño del búfer en el que se bloqueó la aplicación.

Sin embargo, el valor que obtengo de mi script no es necesariamente el tamaño que "permite la reescritura de EIP" . Para encontrar este tamaño de búfer normalmente tengo que andar a tientas ...

El problema es que cuando busco el número exacto de bytes, me veo obligado a:

  1. Iniciar mi depurador (edb-debugger) en kali.
  2. Iniciar la aplicación
  3. Iniciar mi script con +1 o -1 en el tamaño del búfer
  4. Comprueba si el EIP está sobrescrito

Si este no es el caso, comienzo una y otra vez ...

Es una operación que desperdicia mucho tiempo . ¿Podemos hacer este paso más rápido? ¿Con una configuración adicional en el depurador que reiniciará automáticamente la aplicación siempre que no se sobrescriba el EIP? ¿O con una configuración específica en un script?

En mi caso, la aplicación (fuego cruzado) se bloquea en 4377 bytes primero. pero el EIP no se sobrescribe.

4378 bytes, es lo mismo.

Y 4379 bytes, es bueno !! ¡EIP está sobrescrito!

Pero cuando intento 4380 (o superior), el EIP no se sobrescribe ... y no entiendo por qué.

    
pregunta 3r4inZ 28.05.2018 - 22:22
fuente

1 respuesta

2

Tal vez sea un malentendido pero generalmente sobrescribir demasiado no es un problema.

Por lo tanto, el enfoque común es sobrescribir más de lo necesario, pero utilizando un patrón específico. Ver lo que termina en EIP y buscarlo en el patrón le indicará la posición exacta de los datos que terminan en EIP.

Las herramientas de explotación suelen tener esto para, por ejemplo, PEDA tiene la funcionalidad pattern .

    
respondido por el Elias 28.05.2018 - 23:12
fuente

Lea otras preguntas en las etiquetas