[ Home | Liste | F.A.Q. | Risorse | Cerca... ]


[ Data: precedente | successivo | indice ] [ Argomento: precedente | successivo | indice ]


Archivio: Giugno 2001 ml@sikurezza.org
Soggetto: Re: remote offset guessing
Mittente: Bonelli Nicola
Data: 26 Jun 2001 19:39:44 -0000
Calcolare l'offset da locale o da remoto, come dici tu, dipende da come e'
scritto l'exploit. 

Quindi non e' propriamente corretto chidere come si calcola un
offset, ma piuttosto come si scrive un exploit. 

Ad ogni modo un exploit generico e' scritto in modo da poter essere 'configurato', 
descrivendo l'indirizzo del [RET] mediante un base ed un offset.

ret=base+offset.

 NOP|NOP|NOP.......                         [fp][RET]
      \                                           / 
       `-----------------------------------------'

La base di solito e' suggerita dall'autore dell'exploit e cambia da
sistema operativo a sistema operativo.

L'offset e' un quantita' variabile che serve per le regolazioni fini.

L'obiettivo e' quello di far si' che il RET punti ad un indirizzo di
memoria virtuale dove e' stato allocato il buffer stesso. (questo nel caso
piu' semplice).

Dal momento ad ogni processo verra' quasi sempre assegnato lo stesso
indirizzo di memoria, (dipende dalla routine di paging) in genere l'offset
dovrebbe stare intorno allo zero.

Se l'exploit non funziona perche' il RET punta fuori dal buffer, allora
c'e' da pensare e chiedersi dove e per quale motivo il buffer sia stato
allocato.

Poiche' per exploit remoti si presume che tu non abbia accesso alla
macchina, l'unico modo per 'guessare' l'offset e' andare per tentativi,
ovvero provare localmente su una tua macchina identica al target.

Disponendo in oltre dei sorgenti e conoscendo le opzioni di default usate
per la compilazione del demone, e' anche possibile vedere proprio la
funzione incriminata  e da li' dumpare un po' di indirizzi... 

Si conosci l'indirizzo esatto dell'allocazione del buffer.. 

beh il gioco e' fatto...

addr-base(suggerita dall'exploit) = OFFSET


Questo OFFSET e' da prendere come limite superiore. 

Tutto quello che ho detto e' vero soltanto nel caso in cui il ret sia
calcolato nel sorgente dell'attacker mediante

retaddr= base +off.


Ripeto quello che ti ho mostrato e' soltanto un esempio piuttosto
classico.

Se l'exploit costruisce il buffer in un modo diverso perche' sfrutta altre
modalita' di attacco... allora e' tutto da rifare. 

Salute.
Nicola
 

-nb-
Conscience makes egotists of us all. 

Linux & C. contributor. bonelli@oltrelinux.com   
			bonelli@antifork.org     

			nicola@whitehats.it

			awgn@sicurezza.org    

Get my pgp.pub key at: http://awgn.antifork.org/pgp
Key fingerprint = E1FF 4CCE 5D60 F437 364E  7A6A A13E D061 6BE8 F7B8



________________________________________________________
http://www.sikurezza.org - Italian Security Mailing List




[ Home | Liste | F.A.Q. | Risorse | Cerca... ]

www.sikurezza.org - Italian Security Mailing List
(c) 1999-2005