È possibile eseguire in modo affidabile codice arbitrario da una singola sovrascrittura della tabella offset globale quando W ^ X è abilitato? Con "in modo affidabile" intendo assumendo che controllo solo la posizione indicata dal puntatore dell'istruzione e possibilmente alcuni dati non eseguibili altrove.
Perché chiedo: utilizzando l'exploit dell'heap di House of Force demo qui , è possibile sovrascrivere la memoria arbitraria, il che rende il GOT un bersaglio attraente per il dirottamento del puntatore di istruzioni. Tuttavia, per rendere tale implementazione del lavoro di overflow dell'heap (ad esempio ottenere una shell), l'autore ha dovuto iniettare shellcode per puntare al GOT. Se W ^ X è abilitato, questa tecnica fallirebbe. Esiste un metodo (possibilmente facendo leva su ROP / JOP?) Che superi questa limitazione? Il motivo per cui sto avendo difficoltà con questo è perché in questo exploit si controlla solo il puntatore dell'istruzione, non il puntatore dello stack, quindi non riesco a vedere facilmente un modo per far funzionare ROP, e JOP sembra richiedere il controllo di più si registra per farlo funzionare (ma per essere onesto, implementare JOP mi è ancora in testa).