¿Es posible ejecutar de manera confiable un código arbitrario desde una sola sobrescritura de la Tabla de compensación global cuando W ^ X ¿está habilitado? Por "confiablemente" me refiero a asumir que controlo solo la ubicación señalada por el puntero de instrucción y posiblemente algunos datos no ejecutables en otro lugar.
Por qué pregunto: utilizando el exploit de la Casa de Fuerza demostrado aquí , es posible sobrescribir la memoria arbitraria, lo que hace que el GOT sea un objetivo atractivo para secuestrar el puntero de instrucción. Sin embargo, para hacer que la implementación del desbordamiento del montón funcione (es decir, obtener un shell), el autor tuvo que inyectar el código de shell para señalar desde el GOT. Si W ^ X está habilitado, esta técnica fallará. ¿Hay un método (posiblemente aprovechando ROP / JOP?) Que supere esta limitación? La razón por la que estoy teniendo dificultades con esto es porque en esta explotación solo controlas el puntero de instrucción, no el puntero de pila, por lo que no puedo ver fácilmente una forma de hacer que ROP funcione, y JOP parece requerir el control de múltiples se registra para que funcione (pero para ser honesto, la implementación de JOP todavía está por encima de mi cabeza).