Pasé por una publicación en Seguridad ofensiva y mientras leía, el autor declaró que:
En la próxima SEH (cuando se usa una dirección de manejador de SE que comienza con un byte nulo), por lo general, pondremos un código para saltar. Después de todo, el byte nulo actuaría como un terminador de cadena y no tiene sentido poner algo después de la dirección del controlador SE (después de todo, no podría saltar a él de todos modos, ¿verdad?)
Por lo general, en un escenario como este, queremos hacer un salto corto hacia atrás ... este código de operación de retorno se ve así: xebxf0xffxff (así que, básicamente, saltar 10 bytes)
Entonces, según mi entendimiento, a jmp back, tengo que convertir el valor decimal a hexadecimal (estoy usando este [printf "%x\n" -7]
en mi shell como una forma rápida de convertir -7 a hex) y luego agregar este valor a la instrucción jmp
\xeb
.
Tengo 2 preguntas aquí:
1: el formato final del código de operación debe ser \xeb\xAA\xBB\xCC\xDD
(la instrucción de salto \xeb
seguida de 4 bytes), sin embargo, el autor incluye solo 3 bytes después de \xeb
? ¿hay un \xff
faltante?
2-el autor afirma que \xeb\xf0\xff\xff
salta 10 bytes, sin embargo, lo convertí yo mismo y encontré que saltar 10 bytes debería ser \xeb\xf6\xff\xff
en lugar de \xeb\xf0\xff\xff
¿cuál salta 16 bytes?