Cómo provocar un ataque DDoS mediante SQL Injection

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: https://nsl.cs.columbia.edu(Imágen: https://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
https://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:
https://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.

47 comentarios

  1. Interesante Zerial, Que pasa si lo ponemos en práctica 🙂

    Saludos.

  2. @Panic: okey! Pongamonos de acuerdo

  3. 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

    julio 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. Dale Zerial.. Coloquemos un dia.. si tenes msn agregame yo ya lo tengo a Panic…
    Nos vemos

  6. Zerial

    julio 23, 2009 a las 4:02 pm

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

  7. 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. Se puede acer un ataque DDoS mediante XSS?, esa tambien seria una buena prueva de conzeptop xD.

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

  10. Zerial

    agosto 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.

  11. 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.

  12. 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.

  13. Zerial

    agosto 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

  14. 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í.

  15. 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

  16. 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

  17. 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.

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

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

  20. 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.

  21. 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

  22. 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

  23. 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

  24. tiren sesweb.com/132

    porgfas

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

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

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

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

  29. 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

  30. Zerial si se puede con con XSS permanente .

    Yo lo se hacer ya lo he comprobado que si se puede y no importa si la web esta en un hosting de paga.

    Mira resulta que yo encontre un chat en internet que trabaja con PHP MYSQL 5.1 , JQUERY Y AJAX. JAJJAJA Ese chat es muy facil de atacar con XSS permanente(aunke fue dificil conseguirlo para mi).

    Mira yo puedo bloquear la BD(Base de datos) de forma temporal de ese chat.

    A ver si logro que me entiendas….

    Existe una pagina web con varios chats, esos chats funcionan con una base de datos mysql (esos chats estan hechos en mysql, php, javascript & jquery & Ajax). En esa base de datos se guarda los mensajes de todos los chats, se guardan Nicks, Ip, fecha y hora, mensaje.

    Entonces yo se como introducir codigo Javascript y HTML a esos chats.

    Yo tengo un script de Javascript alojado en DropBox.com que cuando ese script se ejecuta lo que hace es hacer FLOOD, ese script envia un mensaje “programado” a 3 chats (distintos que estan en la misma web y q comporten la misma base de datos) 10 veces por segundo, osea envia casi 10 mensajes en un segundo a esos 3 chats.

    Entonces yo inyecto codigo javascript en 3 diferentes chats de esa misma web, yo inyecto este codigo:

    Osea introduzco el script que hace el flood en 3 chat distintos de esa pagina web y lo hago de forma simultanea osea inyecto el codigo js en cada chat al mismo tiempo.

    Entonces por cada persona que hayan en esos 3 chats se enviara a otros 3 chats 10 mensajes en un segundo.

    En esos chats suelen haber hasta 8 o 9 personas al mismo tiempo chateando.

    eso provoca que la base de datos se “sature” XD Y de Un Denial of Service temporal.

    Cuando eso sucede y uno intenta entrar al cualquiera decesos chats la pagina nisiquiera se carga sino que imprime en pantalla el siguiente error:

    Fatal error: Uncaught exception ‘Exception’ with message ‘Unable to connect to the database, please check your configuration.’ in /var/www/central/chat1/shoutbox/lib/shoutbox.class.php:80 Stack trace: #0 /var/www/central/chat1/shoutbox/lib/shoutbox.class.php(64): Shoutbox->connect_database() #1 /var/www/central/chat1/shoutbox/index.php(38): Shoutbox->__construct() #2 {main} thrown in /var/www/central/chat1/shoutbox/lib/shoutbox.class.php on line 80

    Y YA VES ESTO LO HAGO CUANDO SE ME DA LA GANA Y ASI LE HAGO UN DENIAL OF SERVICE A LOS CHATS DE ESAS PAGINAS WEBS Y HE PROVAFO ESE SCRIPT UN MONTON DE VECES Y SIEMPRE ME FUNCIONA!

    SALUDOS!!

  31. Zerial ACABO DE TUMBAR LA PAGINA WEB COMPLETA!!! JAJAJAJAJAJAJA ES INCREIBLE

    ESTE DIA DURANTE LA TARDE LE ESTUVE HACIENDO UN FLOOD POTENTE A LA BASE DE DATOS DEL CHAT Y CUANDO YO HACIA EL FLOOD EL CHAT LANZABA UN ERROR QUE DECIAL ALGO ASI COMO QUE “Era imposible conectarse a la base de datos”.

    EN FIN CUANDO EL CHAT LANZABA ESE ERROR YO DEJABA DE HACER EL FLOOD OSEA DETENIA EL FLOOD . EN UNOS CUANTOS MINUTOS EL CHAT SE RECUPERABA Y VOLVIA A FUNCIONAR.

    Y CUANDO YO VEIA QUE SE RECUPERABA LE VOLVIA A HACER FLOOD Y OTRA VEZ SE VOLVIA A CAER LA BASE DE DATOS.

    Y SEGUI HACIENDO LO MISMO HASTA QUE SE CAYO LA PAGINA WEB COMPLETA!! ^__^

    Y ESO QUE ES UNA PAGINA WEB QUE ESTA EN UN HOSTING DE PAGA ^__^

    YO LA VERDAD NO ENTIENDO MUCHO DE “Seguridad y redes” NI DE ESTO PERO LO HIZE JEJEJE .

  32. LUEGO FUE A UNA PAGINA DE ALOJAMIENTO WEB E INTENTE COMPRAR EL DOMINIO DE LA PAGINA QUE HE HECHO CAER “De rodillas” Jeje PERO NO PUDE PORQUE ME DECIA QUE ESE DOMINIO YACESTABA EN USO XD AUN CON LA PAGINA WEB CAIDA XD (CREI QUE SE PODIA HACER CAER UNA PAGINA WEB Y LUEGO “COJERLE” EL DOMINIO XD)

  33. Mister Zerial, veo que no tienes suficiente experiencia en este tema.. 🙂 sin subestimarte te lo digo.

    Yo tampoco es que tenga mucha, PERO Acabo de leer en un Libro PDF sobre “Ataques DDoS” que me descargue desde Google.

    Donde se habla de las distintas formas de hacer el DDoS (Es muy bueno el librito).

    Acabo de aprender que existe una Funcion de MYSQL que Ejecuta una Expresion el Numero de Veces que tu le indiques.

    Eso crea un Bucle que consume muchisimo CPU en el servidor Sin gastar muchos recursos. Lo cual hace que no funcione la base de datos MYSQL y hasta QUE SE CAIGA LA PAGINA WEB COMPLETA 😉

    Por ejemplo usando esa funcion tu haces que la expresion “1*1” se ejecute 7000000000000000000000 veces y eso crea un Bucle que consumiria mucho CPU y se haria un DDoS.

    ESTO NO ES TEORIA!!

    ES LA REALIDAD!! YO ACABO DE COMPROBARLO INYECTANDO ESA FUNCION EN UNA PAGINA WEB VUNERABLE Y EN MENOS DE UN MINUTO YO SOLO, CON UNA SOLA MAQUINA Y SIMPLEMENTE INYECTANDO ESA FUNCION LE HIZE UN DDoS A ESA WEB.

    OBVIO NO VOY A DECIROS CUAL ES ESA FUNCION . POR QUE ES MUY FACIL Y RAPIDO HACER CAER CUALKIER PAGINA WEB VULNERABLE USANDO ESA FUNCION DE MYSQL.

    SI KEREIS SABER CUAL ES LA FUNCION BUSCADLA EN GOOGLE (COMO HIZE YO, ESTUDIA SOBRE EL TEMA COMO HIZE YO ^_^)

    ESA FUNCION TUMBA CUALKIER PAGINA WEB EN MENOS DE UN MINUTO!! LA PAGINA K YO ACABO DE TUMBAR ESTA EN UN HOSTING DE PAGA $$(DE ESAS QUE TIENEN “MAS RECURSOS”) Y CAYO!!

    SIMPLEMENTE INYECTANDOLE POR EL METODO POST CODIGO SQL , CON LA FUNCION K TE DIJE.
    ….

    JAJAJA ACABO DE REVISAR SI LA PAGINA AUN SIGUE CAIDA Y EFECTIVAMENTE XD AUN ESTA CAIDA .. LA TUMBE HACE COMO 15 MINUTOS Y AUN SIGUE CAIDA JAJAJAJA NO LE FUNCIONA NADA A ESA PAGINA XD .. DDoS JAJAJAJAJA

  34. POSDATA: JAJAJA ES COMO SI TU LE ORDENARAS A LA PAGINA QUE SE HAGA “AUTO-DDoS”…

    ADIOS E INVESTIGUEN, SOLO QUERIA HACERLES SABER QUE SI QUIEREN TUMBAR UNA PAGINA WEB Y ESA WEB ES VULNERABLE A INYECCION SQL EXISTE UNA FUNCION DE MYSQL QUE PUEDE HACER EL DDoS POR TI (LITERALMENTE).

    SI LA WEB ES VUNERABLE A SQL INJECTION NO NECESITAS USAR NINGUN PROGRAMA COMO “Hulk, Loic, Hoic, DDosHttp, etc” NI NINGUNO DE ESOS “Online”.

    Y BUENO SI QUIEREN SABER CUAL ES LA FUNCION ESTUDIEN Y BUSQUEN EN GOOGLE ^_^ QUE NO ES “Tan dificil” . Y LES HE DADO PISTAS SOBRE CUAL FUNCION ES ^_^(EN EL POST DE ARRIVA)

    NO SE LAS DIGO POR AQUI POR QUE SE KE HAY GENTE “Mala”.

    Y ADEMAS SI TU ENCUENTRAS ESA FUNCION POR TI MISMO ESO QUIERE DECIR QUE NO ERES TAN UN LAMMER ^_^ JEJE

    COMO PISTA LES DIRE QUE ESTA FUNCION EJECUTA UNA EXPRESION UN NUMERO DE VECES .

  35. LA FUNCION ES benchmark(count, expr) DE MYSQL.

    YA SE DIJE QUE NO LA HIBA A DECIR, PERO SI ESTA EN INTERNET… Y QUIEN REALMENTE ESTUDIA MYSQL LA CONOCE…

    BUENO DE TODOS MODOS SE LAS DIGO:

    EN EL METODO POST(OSEA INYECTANDO SQL POR UN FORMULARIO) SE HARIA ASI COMO EN ESTE EJEMPLO:

    “+benchmark(70000000000000000000000000000000000000000000000000000000000000, 1*1) –”

    SINO TE FUNCIONA CON LAS COMILLAS DOBLES , CAMBIALAS POR COMILLAA SIMPLES.

    ‘+benchmark(70000000000000000000000000000000000000000000000000000000000000, 1*1) –‘

    YO INYECTE ESA FUNCION EN UN CHAT DONDE LOS MENSAJES SE GUARDAN EN UNA BASE DE DATOS MYSQL Y EL CHAT SE VA ABAJO POR MAS DE 1 HORA Y LANZA UN ERROR DE PHP…

    SI COMBINAS ESO CON UN FLOOD DE PETICIONES HTTP POST PUEDS HACER CAER LA PAGINA COMPLETA ABAJO.

    YO HIZE CAER LA MISMA PAGINA DEL CHAT ABAJO POR MAS DE 1 HORA.

    EL ADMIN DEBE ESTAR “CABREADO” … JEJEJE CADA VEZ QUE SU PAGINA SE “REPONE” YO SE LA VUELVO A TUMBAR .

  36. Y ESO DE QUE “SE NECESITAN MAS DE UNA MAQUINA PARA HACER CAER UNA PAGINA WEB” NO ES CIERTO!

    TODO ESO YO LO HE HECHO DESDE UNA SOLA MAQUINA… SI TE DIJERA TE SORPRENDERIAS!…

    Y LA PAGINA QUE YO TUMBE NO ES “UNA PAGINA PEQUEÑA” … ASI QUE!.

  37. If you are going for finest contents like myself, only go to see this site every day since it gives feature contents, thanks

  38. hi!,I like your writing very so much! share we be in contact extra approximately your post on AOL? I require an expert in this area to solve my problem. May be that is you! Looking ahead to peer you.

  39. Very good information. Lucky me I recently found your site by chance (stumbleupon). I have book marked it for later!

  40. The iPhone 6 is out on those same four, along around Cellular and Increase Mobile, for $650 unlocked or the same $200 with a two-year agreement.

  41. Jump into application advancement for today’s most amazing mobile communications platform, the Pragmatic way, with iPhone SDK Advancement.

  42. When Breaking News and Severe Weather conditions occur – turn to the station you’ve relied on for 55 years.

  43. HTC contains Uh Oh safety for the initial 12 months with every HTC M9. Essentially, if you break, smash or dunk your phone within 12 weeks HTC will replace

  44. Listed among already released devices, such as the Galaxy S6 and the S6 Edge, this indicates the S6 Active may be about to be announced.

  45. It leaves us absolve to connect to the cloud without endangering our digital personal.

  46. Stay educated with the most recent headlines and original stories from around the globe.

  47. Can I simply just say what a relief to discover someone that actually knows what they’re discussing on the web. You definitely understand how to bring a problem to light and make it important. More and more people must look at this and understand this side of your story. I was surprised that you aren’t more popular since you certainly possess the gift.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Esto sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.