Sto leggendo e sto cercando di imparare le vulnerabilità delle stringhe di formato. Ho una funzione vulnerabile e capisco il succo di ciò che devo fare con la mia stringa di formato.Formattare le stringhe e utilizzare% n per sovrascrivere l'indirizzo di memoria con un valore specifico
Fondamentalmente, questo è quello che voglio fare. Passa nella mia stringa di formato che contiene alcuni shellcode come parte di esso. Ho anche bisogno di formattare la mia stringa in modo che l'indirizzo di ritorno della funzione vulnerabile venga sostituito in modo che punti al mio shellcode nello stack. Quindi, quando la funzione ritorna, salterà al mio shellcode nello stack e aprirà una shell.
Attualmente, sono al punto in cui posso vedere il mio shellcode in pila e sono in grado di scrivere sull'indirizzo di ritorno per cambiarlo. Il problema è che sto usando% n come metodo per sovrascrivere l'indirizzo di ritorno e non sono sicuro di come ottenere% n da sovrascrivere con un valore specifico. Ovviamente,% n stampa semplicemente il numero di byte scritti finora nell'indirizzo specificato nello stack. Ho letto un paio di cose su come puoi manipolare% n per scrivere l'indirizzo esatto/il valore che vuoi, ma sono perso su come farlo.
Qualcuno può far luce?
Modifica: Ho provato a riempire la mia stringa di formato con elementi come "% 500d" e "% .500d" e "% nu" per alcuni valori n. (Ho provato valori molto più piccoli come . bene), ma che porta solo di un errore di segmentazione
per chiarire una certa confusione, ecco un esempio veloce che ho scritto in risposta a un commento:
Va bene, cercherò di essere un po 'più Ho un programma vulnerabile Il punto vulnerabile è "printf (input);" Voglio sfruttarlo passando una stringa di formato Ora, ad esempio, ho una stringa di formato
"\x0c\xde\xbf\xff%08x.%08x.%08x.%08x.%08x.%08x.%n"
Questa stringa di formato, quando viene passata nella funzione vulnerabile, sovrascrive l'indirizzo di memoria di 0xffbfde0c con il numero di byte scritti. Sto cercando di scoprire come posso modificare quella stringa di formato in modo che possa rendere% n sovrascrivere con un valore specifico in qualche modo riempendo il numero di byte scritti prima di% n.
Qual è la tua domanda? – ouah
La mia domanda è come utilizzerei% n (nella mia stringa di formato) per stampare qualsiasi valore (leggi: indirizzo) che voglio. – Tesla
'% n' è usato negli exploit stringa di formato per sovrascrivere la memoria non per leggere la memoria. Usa '% x' per scaricare la memoria. – ouah