Come trovare l'indirizzo di system () in un eseguibile - exploit ROP

1

Sto cercando di trovare l'indirizzo di system() in un repository di codice che sto tentando di sfruttare utilizzando Return Oriented Programming (per un progetto di corso). Il codice ha incluso stdlib.h ma non ha utilizzato system() ovunque.

Avevo l'impressione che tutte le funzioni in stdlib.h si trovassero nello stesso spazio degli indirizzi dell'eseguibile (che sto cercando di sfruttare) indipendentemente dal fatto che siano state utilizzate esplicitamente. gdb mi dà questo errore:

(gdb) print 'system@plt'
No symbol "system@plt" in current context.

Allo stesso modo, execve() non è nel contesto neanche:

(gdb) print 'execve@plt'
No symbol "execve@plt" in current context.

Questo significa che il codice è immune a ROP? Non conosco alcuna altra funzione che possa essere utilizzata per generare una shell.

    
posta Nikhil 07.10.2018 - 16:54
fonte

1 risposta

0

L'utilizzo di print 'system@plt' è valido solo se il programma ha già una funzione esistente (chiamata o meno) che fa riferimento direttamente a system (). Nel tuo esempio non è il caso.

Per prima cosa, disattiva la randomizzazione della libreria se non lo hai fatto ulimit -s unlimited

In GDB

  1. Imposta un punto di interruzione nella parte principale

  2. Esegui il programma.

  3. sistema di stampa

Questo ti dà l'indirizzo per system ()

Da lì esegui l'exploit come stavi provando.

Inoltre, invece di postare qui, potresti voler chiedere ad un TA o al tuo professore. Se sei confuso, è probabile che lo siano anche gli altri studenti.

    
risposta data 07.10.2018 - 17:11
fonte

Leggi altre domande sui tag