El rincón de Zerial

Informática, GNU/Linux, Seguridad, Hacking, Programación, Ocio

Cómo provocar un ataque DDoS mediante SQL Injection

Julio 20th, 2009 · 30 Comentarios

Más que enseñar a explotar esta vulnerabilidad para provocar un ataque de denegación de servicio, lo que busco es que los desarrolladores sepan la magnitud que puede tener una falla de este tipo (hay que encontrarle el lado white a las cosa :) .  Un ataque de denegación de servicio (DoS), como su nombre lo dice y en palabras simples, consiste en denegar un servicio para que éste deje de responder y se caiga. Este tipo de ataque se puede realizar de forma distribuida para que tenga mejor efecto, es decir, sincronizando y distribuyendo la carga y el ataque en distintas máquinas con el mismo objetivo.

Imágen: http://nsl.cs.columbia.edu(Imágen: http://nsl.cs.columbia.edu)

La teoría de esto es muy sencilla, pensemos que para hacer que un servicio deje de responder hay que hacer que se sature y esto se puede lograr de varias formas, muchas conexiones simultaneas, flood, synflood, etc. La forma que quiero enseñar es bastante más simple y consiste en modificar una consulta SQL, mediante SQL Injection, de manera tal que el servidor aumente considerablemente su carga y tiempo de respuesta hasta lograr el esperado denial of service.

Por ejemplo, pensemos en una tienda comercial que tiene en su base de datos miles (o millones) de productos, una tipica consulta para listar los productos de una categoría en particular sería:

SELECT id,producto,valor FROM productos WHERE categoria = (id de la categoría)

Y la URI sería algo como
http://sitio.com/tienda/productos.php?categoria=(id de la categoría).
Si este sitio permitiese inyectar código SQL podríamos modificar la consulta de manera tal que nos muestre todos los productos, sin importar la categoría, haciendo que la consulta quede de la siguiente forma:

SELECT id,producto,valor FROM productos WHERE categoria = (id de la categoría) OR 1 = 1

Para lograr esto, la dirección quedaría mas o menos asi:
http://sitio.com/tienda/productos.php?categoria=(id de la categoría)%20OR%201=1
Logrando que el sitio web nos muestre todos los productos y generando una carga mayor al servidor.

Si encontamos la forma de lograr la mayor carga en el servidor, podemos hacer un ataque sincronizado y distribuido para lograr nuestro objetivo: DDoS.
La distribución del ataque se puede realizar de distintas formas, muchos computadores atacando un sitio web o bien buscar las sitios web alojados en el mismo servidor o que usen el mismo recurso de base de datos y de esta forma generar más carga aún.

Está de más decir que esto es sólo una prueba de concepto y que si bien hay muchos sitios vulnerables a este tipo de ataque, la finalidad de todo esto es saber el alcance que puede tener una no-validación de datos.

Posts relacionados

Etiquetas: Hacking · Seguridad

30 respuestas hasta ahora ↓

  • 1
    Panic // Jul 21, 2009 a las 1:06 am

    Interesante Zerial, Que pasa si lo ponemos en práctica :)

    Saludos.

  • 2
    Zerial // Jul 21, 2009 a las 8:20 am

    @Panic: okey! Pongamonos de acuerdo

  • 3
    MagnoBalt // Jul 22, 2009 a las 11:31 pm

    Buenas Zerial.. como andas?
    Tambien otra forma seria hacerle consultas pesadas haciendo una productos cartesianos de las tablas que traen por default los motores. Por ejemplo en MySQL seria la information_schema.
    Entonces en tu ejemplo. Hariamos una inyeccion asi

    http://sitio.com/tienda/productos.php?categoria=(id de la categoria) and (select count(*) from information_schema.columns, information_schema.columns T1, information_schema.tables T2)
    Atacando desde varios lugares hariamos un DoS.
    Es mas eh probado en un target y con tan solo atacando una sola pc

  • 4
    Zerial // Jul 23, 2009 a las 12:43 pm

    @MagnoBalt buen aporte. Esa forma de generar carga en el servidor ta muy buena. Deberiamos hacer unas pruebas de conceptos, podríamos contactarnos con Panic y hacer algo.

  • 5
    MagnoBalt // Jul 23, 2009 a las 12:52 pm

    Dale Zerial.. Coloquemos un dia.. si tenes msn agregame yo ya lo tengo a Panic…
    Nos vemos

  • 6
    Zerial // Jul 23, 2009 a las 4:02 pm

    MagnoBalt: Jabber, mi correo es el que aparece en la sección de “Contacto”.

  • 7
    Iván Alexis // Jul 27, 2009 a las 2:28 am

    Esa teoria yo la ocupaba en mi vida, cuando carreteaba y habia una mina, si un wn se acercaba a jotearla hay ciertas posibilidades que la mina lo acepte, pero si todos vamos a jotear a la mina, la mina hace un “denial of service” a todos xd.

  • 8
    Prueba de concepto: Denegación de Servicio mediante SQL Injection | El rincón de Zerial // Ago 2, 2009 a las 2:46 pm

    [...] semana pasada publiqué un artículo donde explicaba cómo llegar a realizar un ataque de denegación de servicio con éxito, pues bien, [...]

  • 9
    Fido_Dido // Ago 5, 2009 a las 4:17 pm

    Se puede acer un ataque DDoS mediante XSS?, esa tambien seria una buena prueva de conzeptop xD.

  • 10
    H4k_Lov1ng // Ago 5, 2009 a las 11:31 pm

    DDoS mediante XSS??? mmm no lo creo si injectas codigo javascript la carga se la lleva tu pc.

  • 11
    Zerial // Ago 6, 2009 a las 1:51 pm

    Pero se puede usar un sitio con vulnerabilidad XSS para generara muchos iframes apuntando a un target que tenga SQLi para tirar un sitio. Le pasas ese link a mucha gente y al abrirlo, por cada iframe que pongas, hara una peticion a la victima, pudiendo provocar la denegacion del servicio.

  • 12
    H4k_Lov1ng // Ago 6, 2009 a las 6:42 pm

    mmm…
    pero el iframe lo ejecuta “uno” no el site vulnerable a XSS seria cm hacer la peticion SQLi directamente, la vulnerabilidad XSS no tiene ningun aporte mas que ser un intermediario que retrasa la consulta.
    quisas habria q analizar mas afondo un caso real.

  • 13
    Fido_Dido // Ago 7, 2009 a las 10:11 am

    kreo ke podria yegar acerse algo si la pajina ess vulnerable a XSS permanente y admite html inject, en caso de ke fuese xss reflejado kreo ke seria inviable xD.

  • 14
    Zerial // Ago 7, 2009 a las 4:40 pm

    Si se que lo ejecuta “uno”, pero el tema de poner muchos iframes para hacer consultas simultaneas es bien conocido. Montas un sitio con 100 iframes dirigidos a un sitio X y le dices a muchas personas que ingresen, automaticamente, cada visita se multiplica por 100. No se si me entiendes… saludos

  • 15
    H4k_Lov1ng // Ago 7, 2009 a las 9:16 pm

    aaaha… ahora te capté zerial, yo me referia que es mejor hacer una tools para explotar la vulns pero si quieres recibir ayuda de usuarios con “conocimiento basicos (null)” es una posibilidad muy buena, seria como una especie de botnets (UserNet xD).

    pd: muy buen site sigue así.

  • 16
    AH1N5 // Feb 20, 2011 a las 1:53 am

    quisiera aprender algo de inyeccion de cualquier tipo… levo años invistiendo en ptc´s que me had dejado frito y me gustaria tomar cartas en el asunto…aun que en un principio mis conociemientos por muy pocos que fuesen los aplicaba con etica, esto es frustrante.
    ing.mujica@live.com.mx espero respuesta, para unirme a algun clan

  • 17
    cagmaster // Abr 19, 2011 a las 1:11 pm

    si, es fácil cuándo no tiene las comillas, pero para hacer ataques de ésta manera:

    SELECT * FROM categorias WHERE categorianombre = ‘categoria’;

    como sería?
    saludos

  • 18
    Zerial // Abr 19, 2011 a las 1:19 pm

    cagmaster: Podrías utilizar otras tecnicas, por ejemplo hacer calculos “pesados”, por ejemplo md5 sobre md5 recursivo, concat, etc.
    Por ej:

    concat(md5(concat(concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)),concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)))),md5(concat(concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)),concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)))))

    Y asi recursivamente.. Armando tu consulta asi:

    1′ or concat(md5(concat(concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)),concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)))),md5(concat(concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)),concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’))))) = concat(md5(concat(concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)),concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)))),md5(concat(concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’)),concat( md5( md5(‘asdf’) ), concat( md5( md5(‘asdf’) ), md5(‘asdf’))))) –

    entiendes? La idea es sobrecargar el server con consultas estupidamente pesadas. Obviamente si lo haces una vez quiza no pase nada, pero si lo haces de forma distribuida podrias lograr un DoS o al menos un bloqueo temporal.

  • 19
    iiiuutyu // Jun 29, 2011 a las 9:22 am

    ni puñetera idea de lo q dice no le entiendo ni pio

  • 20
    sawy // Ago 7, 2011 a las 10:10 pm

    tener cuidadito con eso que eh visto petar routers asi.
    haber si por tirar una web jodeis algo :D
    saludos

  • 21
    THE-1? // Ago 11, 2011 a las 5:43 pm

    Sigue vivo este tema?. Me gustaria poder aplicar esto en algun lado, Alguien conoce algun sitio con estas vulnerabilidades? o algun sitio de prueba. Zerial si tuvieras algunos manuales, tutoriales, o herramientas para hacer esto te lo agradeeria.

  • 22
    Zerial // Ago 11, 2011 a las 5:58 pm

    Hola THE-1?

    Puedes buscar en http://secureless.org sitios vulnerables a SQL Injection y aplicar los ejemplos del post y de los comentariosa.

    Busacare en un rato mas material y lo publicare aqui mismo

  • 23
    zeit_o0ne // Ago 20, 2011 a las 1:38 pm

    amigos tengo algo pensandandolo viendolo desde hace ya un rato y poes me parece que si ustedes sobrecargan el sistema de recursos aplicados en el sistema lo unico que pasa esque tu sistema se va cargasndo de las direcciones guardandolas en memoria temporal y no solo jodiendo ala pagina si no chingandote tu ejemplo como lo dijoivan alexis si entra ala mina 1 persona y la mina tiene capacidad de 6 personas obviamente tienes que entrar a un cierto punto a tirar las piedras que cargas en una carretilla pra poder sobre cargar la mina (esto es peligrosos) ahora si lo hacen 3 o mas personas con el movimento uno tendria que quedar atras y ese solo seria que no sobrecargaria su equipo pero los demas serian como un chivo espiatorio y la mina ya no solo se sobrecargaria si no que les caeria encima literalmente este es un ejemplo pero pienselo en grandes escalas y veran que mi idea no es tan descabellada

  • 24
    señor antuan // Nov 3, 2011 a las 1:53 am

    quien me ayuda a tumbar una plataforma, block nose es una pajina de mi escuela. parese ser un buen lugar par poder practicar la teoria

  • 25
    ppeep // Ene 12, 2012 a las 7:01 pm

    tiren sesweb.com/132

    porgfas

  • 26
    aizen // Ene 13, 2012 a las 7:08 pm

    me gustaria tener un maestro en este tema se ve interesante….

  • 27
    aizen // Ene 13, 2012 a las 7:09 pm

    me gustaria tener un maestro en este tema se ve bueno….

  • 28
    Jackpars // Ene 20, 2012 a las 12:34 am

    jajajaja que bueno el tema ehhh ,, estoy programando un software.. aver que onda noo … quiero destruir paginas web… …..

  • 29
    Gustbran // Ene 24, 2012 a las 10:35 am

    Hola a todos nos podias guiar un poco mas en este tema y como sabemos q paginas tienes erroes de seguridad?
    gracias

  • 30
    xe091534a0399 // Ene 25, 2012 a las 9:52 pm

    hay metodos mas sencillos para bloquear un servicio que un ddos y con mejores resultados.
    Ahora que si lo haceis por probar quiza os interese usar unos dummys que se lleven las cargas.
    Ahora si lo que quereis es tirar un sitio como facebook quiza os interese mas vuscar otro tipo de vulneravilidades como las llamadas de php ;)
    Un saludo

Deja un Comentario