Consulta; Mi hosting me provee de proteccion que no necesito.

Iniciado por astinx, 20 Diciembre 2011, 15:47 PM

0 Miembros y 1 Visitante están viendo este tema.

astinx

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.
La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando

Dusk


astinx

Okaz, disculpa por no hablerlo puesto antes, no me di cuenta.


//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 ''='*/
?>




//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
?>




//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.
La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando

Dusk

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í:


php_flag magic_quotes_gpc off


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



Código (php) [Seleccionar]
if ( get_magic_quotes_gpc () ){
function traverse ( &$arr ){
if ( !is_array ( $arr ) ) return;
foreach ( $arr as $key => $val )
is_array ( $arr[$key] ) ? traverse ( $arr[$key] ) : ( $arr[$key] = stripslashes ( $arr[$key] ));
}
$gpc = array ( &$_GET, &$_POST, &$_COOKIE, &$_REQUEST );
traverse ( $gpc );
}



perdona por la tardada respuesta, espero te ayude.

astinx

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!
La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando