Domanda

Sto lavorando su un compiti problema che richiede la disattivazione di ottimizzazione del compilatore di protezione per farlo funzionare.Sto usando gcc 4.4.1 su ubuntu linux, ma non riesco a capire che le bandiere sono quelle giuste.Mi rendo conto che l'architettura di dipendente - la mia macchina w/ 32-bit processore Intel.

Grazie.

È stato utile?

Soluzione

Che un buon problema.Per risolvere questo problema si avrà anche a disabilitare ASLR in caso contrario l'indirizzo di g() saranno imprevedibili.

Disattivare ASLR:

sudo bash -c 'echo 0 > /proc/sys/kernel/randomize_va_space'

Disattivare canarie:

gcc overflow.c -o overflow -fno-stack-protector

Dopo canarie e ASLR sono disabili dovrebbe essere un dritto in avanti di attacco, come quelli descritti in Smashing the Stack per Divertimento e Profitto

Ecco una lista di caratteristiche di sicurezza utilizzato in ubuntu: https://wiki.ubuntu.com/Security/Features Non è necessario preoccuparsi di NX bit, l'indirizzo di g() sarà sempre in un eseguibile regione di memoria, perché è all'interno il TESTO del segmento di memoria.NX bit entrano in gioco solo se si sta tentando di eseguire shellcode in pila o heap, che non è richiesto per questo incarico.

Ora vai e clobber che EIP!

Altri suggerimenti

Urm, tutti delle risposte finora sono stati male con la risposta di Rook essere corretta.

Immissione:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

A seguire:

gcc -fno-stack-protector -z execstack -o bug bug.c

Disattiva ASLR, SSP / Propolice e di Ubuntu NoneXec (che è stato posto in 9.10, e abbastanza semplice da aggirare vedere la mprotect (2) tecnica per mappare le pagine come eseguibile e JMP) dovrebbe aiutare un po ', ma queste 'caratteristiche di sicurezza' non sono affatto infallibili. Senza il flag `execstack -z', le pagine hanno marcature di stack non eseguibili.

On distro più recenti (come del 2016), sembra che PIE è abilitato di default in modo avrete bisogno di disattivare in modo esplicito durante la compilazione.

Ecco un piccolo riassunto di comandi che può essere utile quando si gioca a livello locale con esercizi di tipo buffer overflow in generale:

Disattiva canarino:

gcc vuln.c -o vuln_disable_canary -fno-stack-protector

Disattiva DEP:

gcc vuln.c -o vuln_disable_dep -z execstack

Disattiva PIE:

gcc vuln.c -o vuln_disable_pie -no-pie

Disattiva tutti i meccanismi di protezione di cui sopra (attenzione: per la prova locale):

gcc vuln.c -o vuln_disable_all -fno-stack-protector -z execstack -no-pie

Per le macchine a 32 bit, è necessario aggiungere il parametro -m32 pure.

Prova la bandiera -fno-stack-protector.

Lo so che è un vecchio thread, ma voglio sottolineare che non è necessario disabilitare ASLR al fine di fare un buffer overflow! Anche se ASLR è abilitato (kernel_randomize_va_space = 2) esso non ha effetto a meno che l'eseguibile compilato è PIE, quindi a meno che u compilato il file con la bandiera -fPIC -pie, ASLR non avrà effetto.

io soltanto disabilitando i canarini con -fno-stack-protector è sufficiente. Se si vuole verificare se ASLR funziona o non (codice indipendente di posizione deve essere impostata), uso: indurimento-check executable_name

Non voglio citare l'intera pagina, ma l'intero manuale di ottimizzazione è disponibile qui: http://gcc.gnu.org/onlinedocs/gcc-4.4.3/gcc/Optimize-Options.html#Optimize-Options

Dai suoni di esso che si desidera, almeno -O0, il default, e:

  

-fmudflap -fmudflapth -fmudflapir

     

Per front-end che lo supportano (C e C ++), strumento tutti rischioso   puntatore / array dereferenziazione   operazioni, qualche libreria standard   stringa / funzioni di heap e un certo altro   costrutti associati con   test gamma / validità. moduli così   strumentato dovrebbe essere immune   buffer overflow, uso mucchio valido,   e alcune altre classi di C / C ++   errori di programmazione. Il   strumentazione si basa su un separato   libreria di runtime (libmudflap), che   saranno collegati in un programma se   -fmudflap viene dato in fase di collegamento. comportamento in fase di esecuzione del strumentato   programma è controllata dal   variabile d'ambiente MUDFLAP_OPTIONS.   Vedere ENV MUDFLAP_OPTIONS = -help a.out   per le sue possibilità.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top