Foro de elhacker.net

Programación => Desarrollo Web => Mensaje iniciado por: astinx en 20 Diciembre 2011, 15:47 pm



Título: Consulta; Mi hosting me provee de proteccion que no necesito.
Publicado por: astinx en 20 Diciembre 2011, 15:47 pm
Hola, estaba haciendo una pagina recopilando ejercicios de SQL Injection, hasta el momento solo he subido dos http://www.dijkstraeasteregg.com.ar/. Ahora, el problema es que el hosting me limpia automaticamente la cadena es decir si le paso ' OR ''=', en realidad le pasa \' OR \'\'=\'.
No estoy seguro, ¿pero esto puede modificarse cambiando el juego de caracteres de la base de datos?. La verdad que lo único que se me ocurre es que sea algo de el hosting, pero no se en que parte tocar para quitarle esta protección. Por cierto el hosting que uso es awardspace, y usa phpMyAdmin para administrar las bases de datos.

Desde ya gracias por detenerse a leer.

Muchas gracias.


Título: Re: Consulta; Mi hosting me provee de proteccion que no necesito.
Publicado por: Dusk en 20 Diciembre 2011, 20:26 pm
no creo que sea el hosting..

podras poner el codigo.?


Título: Re: Consulta; Mi hosting me provee de proteccion que no necesito.
Publicado por: astinx en 21 Diciembre 2011, 01:05 am
Okaz, disculpa por no hablerlo puesto antes, no me di cuenta.

Código:
//conectar1.php
<?php
$usuario=$_POST['user'];
$password=$_POST['pass'];
/*Conectamos*/
$conexion = mysql_connect("xxx", "xxx", "xxx");
  mysql_select_db("xxx", $conexion);
  /*Hacemos la consulta*/
$consulta_test = "SELECT NOMBRE, PASSWORD FROM USUARIO WHERE (NOMBRE = '".$usuario."') AND (PASSWORD = '".$password."')";
    echo "$consulta_test<br>";
    /*Obtenemos la respuesta*/
      $respuesta_consulta = mysql_query($consulta_test, $conexion) or die(mysql_error());
  /*Numero total de filas, para hacer las iteraciones de manera correcta*/
      $total_filas = mysql_num_rows($respuesta_consulta);
      if ($total_filas > 0) {
echo " Well Done!";
      } else {
/*ERROR*/
echo " Fallaste!";
}
/* Respuesta:' OR ''='*/
?>

Código:
//conectar2.php
<?php
$us=$_POST['usuario'];
$pas=$_POST['pass'];
if($_GET['usuario'] || $_GET['pass']){
die("Hack Attempt");
}
/*Conectamos*/
$conexion = mysql_connect("xxx", "xxx", "xxx");
  mysql_select_db("xxx", $conexion);
$sql="SELECT PASSWORD FROM USUARIO WHERE USUARIO.NOMBRE = '$us'";
echo "$sql<br>";
$resp = mysql_query($sql, $conexion) or die(mysql_error());
if($fila = mysql_fetch_array($resp)){
if($fila['PASSWORD']==$pas){
echo "Inicio de sesión exitoso"; // Esto fue modificado
}else{
echo "el password ".$pas." es incorrecto";
}
} //' UNION SELECT MIN(Password),2,3,4,5 FROM USUARIO WHERE NOMBRE = 'zanahoria
?>

Código:
//index.php
<html>
<head>
<title>Ejercicios de SQL Injection</title>
</head>

<body>
<br>Primer Ejercicio. De por sentado que existe un usuario llamado Marcelo.</br>
<form  action="conectar1.php" method="POST" >
Nombre de usuario: <br><input type="text" name="user" align="right" /><br>
Contrase&#241;a: <br><input type="password" name="pass" align="right" /><br>
<input type="submit" value="Iniciar Sesion" />
</form>
<form action="respuesta1.txt" method="post">
Ver respuesta: <input type="submit" value="Spoilerr!"/></br>
</form>

<br>Segundo ejercicio. Unidos estamos de pie.</br>
<form  action="conectar2.php" method="POST" >
Nombre de usuario: <br><input type="text" name="usuario" align="right" /><br>
Contrase&#241;a: <br><input type="password" name="pass" align="right" /><br>
<input type="submit" value="Iniciar Sesion" />
</form>
<form action="respuesta2.txt" method="post">
Ver respuesta: <input type="submit" value="Spoilerr!"/></br>
</form>
</body>
</html>

Igualmente ahora que lo pienso, lo probé en un localhost, así que no tendría que haber diferencia.


Título: Re: Consulta; Mi hosting me provee de proteccion que no necesito.
Publicado por: Dusk en 21 Diciembre 2011, 19:52 pm
al parecer es por la configuración del php.ini

las magic_quotes_gpc <- si tu versión de php es menor que la 6 (creo.) o verifica mejor..  esta opción esta activada...

pero la puedes .. am. la puedes desactivar con un script php o con un archivo de apache


si quieres desde un .htaccess es así:

Código:
php_flag magic_quotes_gpc off

en google me encontré esta función que te ayuda a evitar esto:



Código
  1. function traverse ( &$arr ){
  2. if ( !is_array ( $arr ) ) return;
  3. foreach ( $arr as $key => $val )
  4. is_array ( $arr[$key] ) ? traverse ( $arr[$key] ) : ( $arr[$key] = stripslashes ( $arr[$key] ));
  5. }
  6. $gpc = array ( &$_GET, &$_POST, &$_COOKIE, &$_REQUEST );
  7. traverse ( $gpc );
  8. }


perdona por la tardada respuesta, espero te ayude.


Título: Re: Consulta; Mi hosting me provee de proteccion que no necesito.
Publicado por: astinx en 22 Diciembre 2011, 00:13 am
Uh buenisimo! Muchas gracias.

Es un poco frustrante hacer una pagina de ejercicios de SQL injection y que el mismo server te proteja de los ejercicios XD

Saludos!