Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 20 de 27

SQL injection con ACCESS

  1. #1 SQL injection con ACCESS 
    Iniciado
    Fecha de ingreso
    Jan 2004
    Mensajes
    10
    Descargas
    0
    Uploads
    0
    Hola a todos!!

    He programado en ASP lo siguiente:

    ...
    set con = server.createObject("ADODB.Connection")
    con.open "Provider=Microsoft.Jet.OLEDB.4.0;Data source=" &
    server.MapPath("bd.mdb")
    set rs = server.CreateObject("ADODB.Recordset")
    sql = "Select * From Usuarios Where (usuario = '" &
    request.form("txtnombre") & "' AND " &_
    "password = '" & request.form("txtpass") & "')"
    rs.open sql,con,1,2
    ...

    Esto evidentemente es vulnerable a una SQL injection porque no verifica las
    ' simples.

    Es facil validarse aciendo un simple ' OR 'a'='a.
    El problema viene cuando quiero mostrar algun valor de un campo, ya que si
    intento multiplicar al campo usuario*5 me da un error de tipos no coinciden,
    pero no me dice que 'pepe' no es un integer. Es decir que no puedo usar esto
    para que me muestre el valor de los campos a partir de un error.

    He visto que en SQLServer se crea una variable para luego hacer que esta
    falle y que el error vuelque el contenido de la variable.

    Pero en ACCESS no se pueden crear variables, para poder volcar todo ahi.

    Tampoco se puede poner ;-- para que no interprete lo que añade despues, ya
    que dice que despues de ; no debe haber nada.

    ¿Alguien me puede decir si en ACCESS hay algun caracter que lo tome como
    comentario como el -- en SQLServer?

    ¿Alguien me puede decir como declarar una variable en ACCESS?

    ¿Como haria para que el contenido de la variable fuera una consulta?
    Es decir se podria hacer algo asi:
    ¿Set @variable = (SELECT usuarios+'/'+password FROM usuarios)?

    Otra cuestion seria si desde Access mediante uns SQL se puede crear una
    consulta y exsportarla a un fichero de texto o incluso a otra .MDB. Ya que
    la consulta CREATE DATABASE no la acepta el access, con lo cual no puedo
    crear ningun fichero.

    ¿Se pueden crear ficheros desde una consulta SLQ con Access?

    EN GENERAL sabeis donde puedo documentarme a cerca de como atacar una base
    de datos en ACCESS.

    Muchas gracias a todos por adelantado.

    Y un saludo.
    Citar  
     

  2. #2  
    Iniciado
    Fecha de ingreso
    Jan 2004
    Mensajes
    5
    Descargas
    0
    Uploads
    0
    A ver, sobre lo de la variable nunca me lo he planteado, siempre he usado MySQL con PHP que para mi gusto va mejor (ACCESS es demasiado lento cuando le pones un milion de registros...)

    Pero respecto a lo de sacar un fichero puedes usar SELECT * INTO OUTFILE 'file.txt'

    No se si te servira para ACCESS, espero que si xD
    Citar  
     

  3. #3  
    Administrador Foros HH
    Fecha de ingreso
    Mar 2002
    Mensajes
    3.067
    Descargas
    5
    Uploads
    0
    ¿y si no le permites meter comillas simples?
    Citar  
     

  4. #4  
    Avanzado
    Fecha de ingreso
    Jul 2003
    Ubicación
    Madrid
    Mensajes
    372
    Descargas
    0
    Uploads
    0
    Esa solucion no es fiable, lo unico que haces es retrasar cinco minutos el que te entren.. no es una forma fiable de evitar que te hagan SQLInjection
    Citar  
     

  5. #5  
    Administrador Foros HH
    Fecha de ingreso
    Mar 2002
    Mensajes
    3.067
    Descargas
    5
    Uploads
    0
    Yo no lo creo. Si no les permites meter comillas o simbolos como el '=', creo que es suficiente
    Citar  
     

  6. #6  
    Avanzado
    Fecha de ingreso
    Jul 2003
    Ubicación
    Madrid
    Mensajes
    372
    Descargas
    0
    Uploads
    0
    No estoy de acuerdo eXcalibur, es posible que le limites la entrada de comillas desde javascript o desde ASP, pero quien te dice a ti que el tio no se va a poder saltar las protecciones establecidas por ti y enviar las comillas en un formato distinto al que tu esperas, o de otra forma distinta, es decir, si las esperas llegadas desde un formulario, te las pasa por cabecera, por poner un ejemplo muy sencillo.....


    La solucion buena no es el eliminar las comillas mediante un replace, esa es , con todos mis respetos una solucion que no da garantias......, se sigue pudiendo entrar , te lo digo por experiencia, mas de un sitio y ma de dos han optado por la solucion que tu has comentado, y siguen cayendo...
    Citar  
     

  7. #7  
    Administrador Foros HH
    Fecha de ingreso
    Mar 2002
    Mensajes
    3.067
    Descargas
    5
    Uploads
    0
    Yo digo que te monto una página en ASP que no permite comillas, las envies desde donde las envies. El filtro se realizaría internamente, con vbscript por ejemplo, utilizando el "instr". Otra cosa es que quien lo montase lo hiciera mal, y por eso te puedas saltar la seguridad.
    Citar  
     

  8. #8  
    Avanzado
    Fecha de ingreso
    Jul 2003
    Ubicación
    Madrid
    Mensajes
    372
    Descargas
    0
    Uploads
    0
    Pero esas formas no son del todo fiables , en serio, la mejor forma de evitar esto es parametrizando la conexion con la base de datos.

    De la forma que tu coments, tarde o temprano se te escapa algo......., o eso o controlas todas las comillas, secuencias de escape, formatos de las instrucciones que te pasen, tipo de los parametros.......

    Me parece demasidas cosas a tener en cuenta.....
    Citar  
     

  9. #9  
    Administrador Foros HH
    Fecha de ingreso
    Mar 2002
    Mensajes
    3.067
    Descargas
    5
    Uploads
    0
    Plateatelo al revés, y verás que no son tantos. Es decir, solo permites valores alfanumericos (letras y numeros). El resto, no lo aceptas.
    Sabiendo entre que keycodes están estos valores ya está
    Citar  
     

  10. #10  
    Avanzado
    Fecha de ingreso
    Jul 2003
    Ubicación
    Madrid
    Mensajes
    372
    Descargas
    0
    Uploads
    0
    COn que sean dos me valen, has de controlar esto en todas las partes del sistema que conecten con la base de datos, y hay mil formas de romper la sentencia.

    Ademas, yo soy de la opinion de que las cosas de datos en la capa de datos, quye para eso esta, y si puedes parametrizar la abse de datos, ganaras en seguridad y flexibilidad del sistema, y perderas en tener un sistema mediocre que pouede ser reventado en cualquier momento....


    Ya han habido varios administradores de sistemas que se creeen que por quitar las comillas ya estan seguros..

    Creeme , la unica ley infalible que hay es la de Murphy, en alghun sitio te dejaras una query sin comprpobar, o bien no comprobaras las querys tanto como crees y te dejaras una posible entrada.


    De la forma que yo te comento, simplemente, te evitas tener que pensar en estas cosas y puedes dedicarte a generar un entorno robusto, seguro y fiable.
    Citar  
     

  11. #11  
    Administrador Foros HH
    Fecha de ingreso
    Mar 2002
    Mensajes
    3.067
    Descargas
    5
    Uploads
    0
    Pues sí.
    Venga, cierro el tema por mi parte. Un saludo
    Citar  
     

  12. #12  
    Avanzado
    Fecha de ingreso
    Jul 2003
    Ubicación
    Madrid
    Mensajes
    372
    Descargas
    0
    Uploads
    0
    ok, yo tambien cierro eXcalibur, un saludo, no te lo tomes a mal, me gustan la conversaciones deportivas, siempre y cuando la otra persona implicada en el debate sepa de que habla, como es tu caso..-

    Un saludo tio
    Citar  
     

  13. #13  
    Iniciado
    Fecha de ingreso
    Jan 2004
    Mensajes
    10
    Descargas
    0
    Uploads
    0
    Me ha gustado bastante la conversacion pero me hubiera gustado mas que os hubierais centrado en mi pregunta. Aunque repito que ha sido interesante.

    Respecto a lo que dices, UniRing, no consigo utilizar SELECT * INTO OUTFILE, porque segun he estado leyendo, no sirve para MS Access.

    Debido a que Access solo tiene unos cuantos comandos de SQL es muy complicado volcar el contenido de una tabla de validacion Usuarios, mediante SQL injection.

    Al final y despues de mucho probar va a resultar que ACCESS ES SEGURO!! Ya que no tiene comandos para exportar tablas, ejecutar comandos, etc...

    Sin embargo dudo mucho que esto sea asi, debe haber alguna manera de poder vulnerar una base de datos en Access.

    Espero vuestras contestaciones.

    Un saludo.
    Citar  
     

  14. #14  
    Avanzado
    Fecha de ingreso
    Jul 2003
    Ubicación
    Madrid
    Mensajes
    372
    Descargas
    0
    Uploads
    0
    En el momento en el que pueda hacer SQL Injection, la base de datos es vulnerable... ten en cuenta que no necesitas volcar el contenido de la tabla en ningun sitio, con una sentencia UNION encadenada a la tuya puedes ver el contenido de las tablas que desees...


    Si que es verdad que tiene una cosa buena Access, y es que el usuario que conecta por defecto a la base de datos no tiene permiso de lectura sobre las tablas de sistema.... una cosa que si se tiene en SQL....
    Citar  
     

  15. #15  
    Iniciado
    Fecha de ingreso
    Jan 2004
    Mensajes
    10
    Descargas
    0
    Uploads
    0
    Pero de que me sirve que el Server ejecute SELECT * FROM Usuarios si el .ASP solo verifica que ha devuelto un registro para dar paso. Es decir que no tiene ningun codigo programado para que muestre el contenido.

    No es como una pagina que hace busquedas y puedas por SQLInjection mostrar tablas del sistema, usuarios, etc... En una autenticacion solo puedes sacar informacion de campos mediante errores. Pero con Access debido a su funcionalidad es complicado.

    ¿Por cierto a que tablas del sistema te refieres? msysqueries,etc.. ¿Cuales existen mas?

    Segun estoy viendo, para una autenticacion, el ACCESS es el unico que soporta una SQLInjection sin problemas de seguridad.

    Un saludo.
    Citar  
     

  16. #16  
    Avanzado
    Fecha de ingreso
    Jul 2003
    Ubicación
    Madrid
    Mensajes
    372
    Descargas
    0
    Uploads
    0
    Pero bueno, lo que nos interesa es un usuario para poder acceder al sistema, eso es lo unico que necesitamos para tener el acceso garantizado al sistema......

    En cualquier caso, tenemos que tener en cuenta que en una autenticacion no solo podemos sacar informacion mediante errores, sino simplemente podemos colarnos sin necesitar saber ningun datos de la tabla en cuestion, y en access es exactamente igual a como lo hariamos en el resto de SGBD que soporten SQLInjection.....


    En cuanto a las tablas de sistema, hay varias que son utiles , como msysqueries, msysobjects, msysusers(creo que es asi)...... que nos dan informacion acerca de las tablas del sistema, columnas, usuarios...... es decir, lo que queramos....

    Y como te digo, si una autenticacion esta mal implementada, todos los sistemas soportan una SQLInjection sin problemas de seguridad, puedes hacer lo que quieras....
    Citar  
     

  17. #17  
    Iniciado
    Fecha de ingreso
    Jan 2004
    Mensajes
    5
    Descargas
    0
    Uploads
    0
    Un apunte sobre la frase "ACCESS ES SEGURO!". Seguro quizas (ya te digo yo que no xD) pero esa seguridad viene de su falta de funcionalidad, con lo que para mi gusto es el camino facil del programador. Para que te vas a complicar para dar un servicio seguro, simplemente no lo des. Es como tener un servidor sin ningun servicio.

    Ya se que eso no tiene nada que ver pero bueno, es un apunte.

    Respecto al tema, queria decir que yo para evitar el SQL injection en PHP con MySQL monte una funcion la cual llamo siempre cuando paso variables a una sentencia SQL. Esta funcion 'parsea' el string y elimina todo caracter no alfanumerico. Despues de probarle muchos tipos de sql injection llegue a la conclusion de que es un metodo viable ya que le entres lo que le entres lo elimina y con letras y numeros es imposible 'escribir' una comilla, aparte de eso la sentencia UNION esta desactivada en los nuevos MySQL por defecto (y sino lo desactivas a mano) ya que hay metodos mas seguros de hacer un UNION no es necesario tenerlo activado.

    Bueno, decir que al respecto de la disputa unholy VS eXcalibur yo estoy un poco mas a favor de eXcalibur, no del todo, dado que como dice unholy es un metodo un poco rudimentario y te puedes despistar, pero si la eliminacion de caracteres esta bien echa y siempre que uses una sentencia SQL no te olvidas de verificar los datos que le entras, para mi gusto, es un sistema valido.

    Estariamos horas discutiendo cual es la mejor manera de programar una cosa, pero la cuestion es que si las dos versiones funcionan, pues la resta va a gusto del programador xD.

    Y como dice un buen libro, "ningun sistema es seguro, solo podemos hablar de fiabilidad."

    Bueno, ya esta, tenia que decir la mia xD No os canseis.
    Citar  
     

  18. #18  
    Iniciado
    Fecha de ingreso
    Jan 2004
    Mensajes
    10
    Descargas
    0
    Uploads
    0
    Bueno yo sinceramente queria poner al Access encima de la camilla y destriparlo para ver sus "posibilidades" y por eso pedia ayuda de alguien que hubiera encontrado maneras de vulnerar Servidores por utilizar bases de datos en Access.

    Veo que las posibilidades son limitadas y que lo unico que ponemos en juego es el modificar o borrar valores de las tablas, pero a CIEGAS. Es decir no podemos ni revelar contraseñas ni verificar que los nuevos valores se han introducido correctamente.

    En cuanto al sistema del propio servidor, tambien veo que es casi imposible manipularlo.

    ¿Alguien ha tenido otras experiencias al respecto con Access?

    Un saludo a todos.
    Citar  
     

  19. #19  
    Avanzado
    Fecha de ingreso
    Jul 2003
    Ubicación
    Madrid
    Mensajes
    372
    Descargas
    0
    Uploads
    0
    Buenas de nuevo, creo que no has entendido del todo bien una cosa....

    No es que puedas borrar los datos a ciegas, puedes alterarlos, borrarlos, insertarlos... es decir, hacer lo que quieras, pero no a ciegas......

    Cuando hemos dicho que lo haces a ciegas, significa que por ejemplo en un login, no ves los datos devueltos en caso de hacer SQLInjection, pero sin embargo tienes acceso al sistema. Una vez dentro , seguramente que podras usar esta tecnica en otro lugar , romper una sql e ir haciendo la Injection viendo los datos devueltos en todo momento....


    Las posibilidades de acceso son muchisimas, de echo Access es uno de los sistemas menos seguros que hay...., lo unico es que por defecto no puedes ver las tablas de sistema, pero si rompes la sql el mensaje de error correspondiente te da el nombre de la tabla que estas atacando si sabes ahcerlo.....
    Citar  
     

  20. #20  
    Iniciado
    Fecha de ingreso
    Jan 2004
    Mensajes
    10
    Descargas
    0
    Uploads
    0
    Por supuesto, claro que consigues conocer nombre de tablas, campos, tipos de datos de las tablas, numero de campos de tablas,...

    Pero hay dos cosas que no consigo obtener:
    - El contenido de un campo(no el que yo pueda modificarlo sino, saber que tiene en un principio, por ejemplo para saber los usuarios y sus contraseñas). Aunque como tu dices, primero te autentificas y despues dentro con paginas de busqueda y tal podemos volcar valores. Pero....

    - Si usan distintos ficheros .MDB, como hago una consulta de un fichero que no se como se llama. ¿Se puede obtener el nombre del fichero de base de datos? ( En este caso el fichero.MDB que contenga los usuarios )

    Un saludo.
    Citar  
     

Temas similares

  1. duda con sql injection
    Por birdman en el foro INTRUSION
    Respuestas: 2
    Último mensaje: 09-07-2009, 01:28
  2. sql injection
    Por chico1988 en el foro VULNERABILIDADES
    Respuestas: 2
    Último mensaje: 09-06-2009, 00:24
  3. SQL Injection
    Por chico1988 en el foro VULNERABILIDADES
    Respuestas: 12
    Último mensaje: 15-07-2007, 13:48
  4. SQL Injection - SMF 1.0 RC2
    Por JØK en el foro VULNERABILIDADES
    Respuestas: 4
    Último mensaje: 09-08-2006, 16:05
  5. Injection SQL
    Por The_chacal en el foro VULNERABILIDADES
    Respuestas: 1
    Último mensaje: 15-06-2004, 21:25

Marcadores

Marcadores