Foro de elhacker.net

Seguridad Informática => Nivel Web => Mensaje iniciado por: andres_5 en 11 Junio 2010, 23:28 pm



Título: Duda Inyeccion sql...
Publicado por: andres_5 en 11 Junio 2010, 23:28 pm
Tuve que crear una web para el colegio, pero ahora estoy intentando inyectar codigo SQL a mi misma web, para experiencia personal...
el codigo es este:
Código:
$query = "INSERT INTO `usuarios`(log_nombre, contrasenya, nombre, email, localidad) VALUES (";
$query.= "'".$log_nombre."', '".$contraseña."', '".$name."', '".$email."', '".$localidad."');";

pero aprovecho el ultimo campo de localidad para intentar inyectar esto:
Código:
localidad'); DROP DATABASE `creandoside`('');

quedando en sentencia SQL algo como esto:
Código:
INSERT INTO `usuarios`(log_nombre, contrasenya, nombre, email, localidad) 
VALUES ('123', '123', '123', '123', 'localidad'); DROP DATABASE `creandoside`('');
pero me aparece un error y no tengo ni idea de que sucede,
la sentencia del error de phpmyadmin es:
Código:
consulta SQL:
INSERT INTO `usuarios` ( log_nombre, contrasenya, nombre, email, localidad )
VALUES (
'123', '123', '123', '123', 'localidad.'
);
MySQL ha dicho: Documentación
#1046 - No database selected
saludos y muchas gracias ;)
PD: puse este mismo tema en apartado Programacion/Diseños Web/Bases de Datos... Espero que no os moleste pero pense que talvez es mas correcto aqui, si hay cualquier tipo de problema podeis borrad algunos de los dos temas ;)


Título: Re: Duda Inyeccion sql...
Publicado por: winroot en 11 Junio 2010, 23:37 pm
es mas correcto en bugs a nivel web.
:D
saludos!


Título: Re: Duda Inyeccion sql...
Publicado por: Shell Root en 11 Junio 2010, 23:43 pm
Lo que pasa es que en MySQL no se pueden concatenar querys con ; como se hace en MSSQL.


Título: Re: Duda Inyeccion sql...
Publicado por: andres_5 en 11 Junio 2010, 23:49 pm
no entiendo bien lo que me quieres decir :S
Pero voy a añadir esto para evitar confusion:
Código:
<?php
include "base.php";
$name= $_POST['usureg'];
$nick= $_POST['nickreg'];
$pass= $_POST['passreg'];
$pass2= $_POST['passreg2'];
$email= $_POST['emailreg'];
$localidad= $_POST['locreg'];
if ($pass == $pass2){

include "base.php";

        $log_nombre=$_POST['nickreg'];
        $contraseña=$_POST['passreg'];
$name= $_POST['usureg'];
$email= $_POST['emailreg'];
$localidad=$_POST['locreg'];

        $query = "INSERT INTO `usuarios`(log_nombre, contrasenya, nombre, email, localidad) VALUES (";
        $query.= "'".$log_nombre."', '".$contraseña."', '".$name."', '".$email."', '".$localidad."');";

        $resultado = mysql_query($query, $conexion);

        if ($resultado) {
            echo 'Usuario '.$log_nombre.' registrado con éxito.<br/>';
            ?>
            <meta http-equiv="refresh" content="5;URL=inicio.php">
            <?php
        }
        else {
           echo '<br/>'.$query.'<br/><br/>';
           echo 'Usuario '.$log_nombre.' y Contraseña '.$contraseña.', no ha podido ser registrado.<br/>';
       }}
        else{
?>
<script>alert('Debes confirmar la contraseña')</script>

<meta http-equiv="refresh" content="0;URL=registro.php">
<?php
}
?>
</body>

</html>

Gracias por vuestra atencion


Título: Re: Duda Inyeccion sql...
Publicado por: Shell Root en 12 Junio 2010, 00:24 am
mmm te doy la respuesta de un Dios!, sé que no quieres hacer un UPDATE, pero supongo que es lo mismo que con un DELETE!
no puedes hacer un UPDATE si ya estas en el contexto de un SELECT. en MySQL no se pueden hacer varias queries por consulta. (como en mssql).

Saludos!!


Título: Re: Duda Inyeccion sql...
Publicado por: Lobito14 en 12 Junio 2010, 13:39 pm
Ahi veo varias cosas que no me terminan de convencer...

A ver, primero que nada, incluyes dos veces el archivo "base.php" que supongo que sera en el que tengas declarada la variable $conexion.

Podias poner tambien ese codigo aqui...

Porque el fallo que te da PhpMyAdmin es que no has selccionado la base de datos en la que hacer esa consulta, eso se hace con: "USE nombredb;"

Ya nos cuentas.


Título: Re: Duda Inyeccion sql...
Publicado por: Shell Root en 12 Junio 2010, 15:44 pm
A lo que en PHP es así
Código
  1. $conexion = mysql_connect("localhost", "root", "root");
  2. mysql_select_db("db_BaseDatos", $conexion);


Título: Re: Duda Inyeccion sql...
Publicado por: Lobito14 en 12 Junio 2010, 18:37 pm
A lo que en PHP es así
Código
  1. $conexion = mysql_connect("localhost", "root", "root");
  2. mysql_select_db("db_BaseDatos", $conexion);

Ahí va! eso es lo que espero que tenga en su archivo "base.php", si no... ya sabemos donde tiene el problema!


Título: Re: Duda Inyeccion sql...
Publicado por: Shell Root en 12 Junio 2010, 18:42 pm
... ya sabemos donde tiene el problema!
El problema, es que ese no era el problema xD, lo que él queria hacer era inyectar código SQL, dentro de una Query ya construida.


Título: Re: Duda Inyeccion sql...
Publicado por: Lobito14 en 12 Junio 2010, 18:52 pm

...

pero me aparece un error y no tengo ni idea de que sucede,
la sentencia del error de phpmyadmin es:
Código:
consulta SQL:
INSERT INTO `usuarios` ( log_nombre, contrasenya, nombre, email, localidad )
VALUES (
'123', '123', '123', '123', 'localidad.'
);
MySQL ha dicho: Documentación
#1046 - No database selected
saludos y muchas gracias ;)
PD: puse este mismo tema en apartado Programacion/Diseños Web/Bases de Datos... Espero que no os moleste pero pense que talvez es mas correcto aqui, si hay cualquier tipo de problema podeis borrad algunos de los dos temas ;)

Es que como el dice que le aparece un error y no tiene idea de lo que sucede, y como el error es "#1046 - No database selected", por eso pense que preguntaba por ese error.

Saludos!


Título: Re: Duda Inyeccion sql...
Publicado por: WHK en 16 Junio 2010, 20:38 pm

...

pero me aparece un error y no tengo ni idea de que sucede,
la sentencia del error de phpmyadmin es:
Código:
consulta SQL:
INSERT INTO `usuarios` ( log_nombre, contrasenya, nombre, email, localidad )
VALUES (
'123', '123', '123', '123', 'localidad.'
);
MySQL ha dicho: Documentación
#1046 - No database selected
saludos y muchas gracias ;)
PD: puse este mismo tema en apartado Programacion/Diseños Web/Bases de Datos... Espero que no os moleste pero pense que talvez es mas correcto aqui, si hay cualquier tipo de problema podeis borrad algunos de los dos temas ;)

Es que como el dice que le aparece un error y no tiene idea de lo que sucede, y como el error es "#1046 - No database selected", por eso pense que preguntaba por ese error.

Saludos!

eso sucede en phpmyadmin porque no seleccionaste una base de datos de la lista de bases de datos antes de ejecutar la query.
primero selecciona la abse de datos y luego ejecutas la query.


Título: Re: Duda Inyeccion sql...
Publicado por: MagnoBalt en 17 Junio 2010, 07:24 am
Buenas, como algunos usuarios recalcarón no se puede realizar Stacked Query en MySQL con PHP, por lo tanto no te puedes salir de esa consulta para apilar una nueva, es imposible usando esas tecnologias por desgracia :p
Ahora si estas dentro de un SELECT puedes inyectar con Subconsultas o con la Clausula UNION

Escenarios Correctos:

Con UNION

SELECT TITULO, CUERPO, FECHA FROM NOTICIAS WHERE ID = 4

INYECCION

SELECT TITULO, CUERPO, FECHA FROM NOTICIAS WHERE ID = -4343 UNION SELECT PASSWORD,USERS,3 FROM USUARIOS

Con SUBCONSULA

SELECT TITULO, CUERPO, FECHA FROM NOTICIAS WHERE ID = 4

SELECT TITULO, CUERPO, FECHA FROM NOTICIAS WHERE ID = 4 AND (SELECT COUNT(*) FROM USERS)

Este tipo de ataques a subconsultas es la la logica de Booleanizacion la cual es la tecnica de Blind SQL.

andres_5 a lo que voy es que no puedes hacer esto en mysql con php

SELECT TITULO, CUERPO, FECHA FROM NOTICIAS WHERE ID = 4; DELETE * FROM USUARIOS

No se permiten stacked query, dejo una imagen donde muestra los esenarios donde se soporta y donde no.

(http://www.ubuntu-pics.de/bild/20593/screenshot_191_lbJN7j.png)


Saludos