Gli overflow del buffer dello stack sono possibili anche in questo caso?

2

Diciamo che c'è un programma in C che prende semplicemente una stringa argv[1] e usa sprintf per copiarlo in un buffer finito. Overflow del buffer stack classico. Diciamo anche che il programma è più complicato, consentendo tecniche come ROP.

Ma poi è compilato con un cookie canary / security stack ed eseguito su un sistema operativo che utilizza ASLR e DEP.

Non ha la possibilità di eseguire un approccio shellcode arbitrario 0?

    
posta Jonny 07.09.2014 - 22:23
fonte

1 risposta

1

Dipende.

DEP ti impedisce semplicemente di saltare a esp e di eseguire il codice lì. ASLR è la cosa più importante da ignorare qui.

Ci sono diversi modi in cui potresti essere in grado di farlo:

  • Moduli caricati nel processo che non hanno ASLR abilitato. Ci sono molti modi in cui ciò potrebbe accadere:
    • DLL che fanno parte dell'applicazione che sono state compilate senza il flag ASLR.
    • Inserito come parte delle DLL di AppInit.
    • Inserito da applicazioni di terze parti, ad es. anti-virus o qualcosa come xfire / Fraps.
    • Gestori di shell caricati insieme a shdoclc.dll quando si utilizzano le finestre di dialogo standard dei file.
  • Allocazione indirizzo fisso (ad esempio VirtualAlloc con il set di parametri lpAddress )
  • Le vulnerabilità secondarie che consentono la divulgazione della memoria o la rivelazione del puntatore possono essere utili per costruire un'idea di dove sono le cose in memoria.
  • Corruzione dello stack in qualche modo che genera un problema secondario, ad es. corruzione dell'heap. Questo potrebbe quindi aprire altre vie di sfruttamento, usando trucchi come l'irrorazione dell'heap, l'heap feng-shui, l'irrorazione JIT, ecc.
risposta data 07.09.2014 - 22:42
fonte

Leggi altre domande sui tag