Crear Cronologías de Archivos utilizando NBTempo

Body

Durante un análisis forense es muy útil crear una cronología o línea de tiempo, la cual permite rastrear y seguir las actividades relacionadas al tiempo de los archivos residentes en un dispositivo de almacenamiento. Este es un proceso delicado, pues se deben considerar factores como la zona horaria del país donde se capturó la evidencia digital (GMT / UTC); la cual puede ser diferente a la del analista; de esta manera se contextualiza perfectamente los tiempos. También se debe considerar la desviación del tiempo, el cual es la diferencia en minutos / segundos del tiempo del Sistema (Ejemplo Marca de Tiempo del BIOS) y el tiempo actual.

NBTempo esta basado en The SleuthKit , el cual puede crear archivos de cronologías o lineas de tiempo mediante una Interfaz Gráfica de Usuario y reportarla en formato CSV.

Para la siguiente demostración se utilizará la imagen forense de un sistema Windows 7.

Hacer clic en “Menu -> Forensics Tools -> NBTempo” para ejecutar la herramienta requerida.

Se presenta una ventana con información de la herramienta. Hacer clic en el botón de nombre “OK”.

Seleccionar la imagen forense desde la cual se requiere crear la cronología o linea de tiempo.

Definir el directorio de destino en el cual se creará el archivo de la cronología en formato CSV.

Insertar el tiempo UTC o GMT relacionado al ítem de evidencia digital. En caso se requiera utilizar los ajustes del tiempo local dejar este campo vacío.

Insertar una desviación de tiempo en segundos. Para esta demostración se define el valor “0”.

Seleccionar la fecha desde la cual iniciará la cronología.

Seleccionar la fecha en la cual finalizará la cronología.

Se consulta sobre la creación previa de una cronología para el dispositivo actual. A razón de no haber realizado este proceso previamente, se selecciona la opción “No”.

Al culminar la operación de manera satisfactoria se detalla la creación del reporte en el directorio pertinente.

El archivo de cronología creado puede ser abierto utilizando un programa de hoja de calculo como “LibreOffice Calc”.

En este archivo reside la información detallada sobre todos los archivos incluidos durante la creación de la cronología, como Fecha, Tamaño, Tipo, Modo, UID, GUID, Meta, y Nombre del Archivo.

Fuentes:

http://scripts4cf.sourceforge.net/tools.html
http://nannibassetti.com/dblog/articolo.asp?articolo=141
http://www.html.it/articoli/forensics-nbtempo-una-gui-per-le-timeline-1/
http://www.sleuthkit.org/sleuthkit/

Montar las Particiones de una Imagen Forense utilizando FMount

Body

Fmount, permite montar todos los volúmenes detectados asignados en una imagen de solo lectura en el directorio /media. Las particiones son nombradas con el formato “IMAGEN_VOLUMEN”. Si la imagen está dividida, se deben especificar todos los segmentos. Las imágenes divididas son montadas primero como un disco virtual en /mnt/ antes de montarse las particiones.

Para las siguientes demostraciones se utilizan dos imágenes forenses, una correspondiente a un Sistema Windows 7, y la segunda corresponde a una imagen forense dividida de un sistema Windows XP.

Hacer clic en “Menu -> Forensics Tools -> FMount” para ejecutar la herramienta requerida.

Se presenta una nueva ventana en la cual se debe seleccionar la imagen forense a montar.

Ubicada y seleccionada la imagen forense hacer clic en el botón de nombre “Ok”.

El mensaje expuesto indica la operación satisfactoria del proceso y el montado del disco. Se pueden visualizar en el escritorio las particiones montadas desde la imagen forense.

Se ingresa a las particiones sencillamente haciendo doble clic sobre sus respectivos íconos. Siendo factible navegar por todos los archivos y directorios.

En caso se requiera montar una imagen forense divida en diversas partes, se deben seleccionar todas ellas. Luego hacer clic en el botón de nombre “Ok”.

La operación ha sido satisfactoria y el disco ha sido montado. Se presenta en el escritorio un ícono correspondiente a la partición montada desde la imagen forense.

Ahora es factible ingresar y explorar la partición montada.

Para desmontar las particiones hacer clic derecho sobre el ícono correspondiente, para luego seleccionar la opción “Unmount”.

Al revisar el directorio /media/ se observan los directorios creados por las acciones de montaje realizadas.

Fuentes:

https://code.google.com/p/linuxsleuthing/source/browse/miscellaneous/fm…
http://www.caine-live.net/page11/page11.html
http://www.caine-live.net/

Capturar una Imagen Forense utilizando Guymager

Body

Guymager es un replicador forense libre para adquisición de medios. Entre sus principales características se enumeran, Una fácil interfaz de usuario en diferentes lenguajes, Se ejecuta en GNU/Linux, Es realmente rápido debido a su diseño multi-threaded, pipelined, y compresión de datos multi-hilos, Realiza una completa utilización de máquinas multi-procesador, Genera imágenes en bruto (dd), EWF (E01) y AFF, soportando clonación de disco, Es libre de cargos, completamente open source.

Para la siguiente demostración se utilizará la distribución Forense CAINE y una unidad USB.

Hacer clic en “Menu -> Forensics Tools -> Guymager” para ingresar a la herramienta requerida.

Guymager presentará una ventana con todos los dispositivos de almacenamiento conectados. En caso se conecte un nuevo dispositivo, se debe presionar el botón de nombre “rescan” para mostrarlos.

Seleccionado el dispositivo desde el cual se realizará la captura de la imagen forense. El panel inferior muestra información detallada sobre la adquisición actualmente seleccionada por el cursor de color azul.

Hacer clic derecho y seleccionar la opción “Info” para obtener más información sobre el dispositivo de almacenamiento seleccionado.

Se apertura una nueva ventana con la información obtenida desde el dispositivo de almacenamiento.

Para crear una nueva imagen forense, hacer clic derecho y luego seleccionar la opción “Acquire imagen” o Adquirir Imagen.

Se presenta una nueva ventana, en la cual como primera acción se debe seleccionar el formato del archivo correspondiente a la imagen forense a capturar.

Para la presente demostración se realiza la captura de una imagen en bruto dd en Linux. Además de ello se inactiva la opción “Split image files” o de dividir la imagen en partes. Se define el Directorio donde se almacenará la imagen capturada, el nombre del archivo de imagen, y el nombre del archivo con la información del proceso realizado.

Adicionalmente se activan las opciones “Calculate MD5”, “Calculate SHA-1” para calcular los hashes MD5 y SHA-1 de la imagen forense creada. También se activa la opción “Verify imagen after acquisition”, para verificar la imagen después de realizada la adquisición.

Hacer clic en el botón de nombre “Start” para iniciar el proceso.

El proceso ha iniciado. El tiempo para la culminación del proceso esta afectado por diversos factores, como el tamaño de las unidades de almacenamiento, sus características técnicas, velocidad de procesamiento, etc.

Finalizado el proceso se visualiza un círculo de color verde, el cual es indicativo de la culminación satisfactoria del procedimiento.

Se ingresa a la carpeta donde reside la imagen forense creada. Se observan dos archivos, el archivo con extensión “.dd” corresponde a la imagen forense adquirida.

El archivo de extensión “.info” contiene la información detallada sobre el dispositivo y el proceso de adquisición realizado.

Existe otra opción la cual permite realizar la clonación de discos. Ambos pueden ser fácilmente adaptados a requerimientos específicos. Se tiene también la capacidad de añadir o remover campos. Se pueden ajustar valores por defecto estáticamente (texto) y dinámicamente (fecha actual, tamaño del disco, número de serie, etc). Revisar el archivo "/etc/guymager/guymager.cfg".

http://guymager.sourceforge.net/
http://sourceforge.net/p/guymager/wiki/Home/
http://guymager.sourceforge.net/guymager.cfg
http://www.caine-live.net/

Escaneo de Vulnerabilidades utilizando Nmap

Body

El escaneo de vulnerabilidades es el proceso de descubrir e identificar vulnerabilidades en una red. Este proceso puede generar un gran cantidad de tráfico, pudiendo también inducir a condiciones de negación de servicio en dispositivos de red. Una herramienta capaz de realizar un escaneo de vulnerabilidades es Nmap, mediante su poderosa y flexible característica denominada NSE (Nmap Scripting Engine). La cual permite a los usuarios escribir (y compartir) scripts sencillos para automatizar una amplia diversidad de tareas de red.

Detección de Vulnerabilidades en Nmap

Cuando se descubre una nueva vulnerabilidad, frecuentemente se desea escanear la red rápidamente para identificar los sistemas vulnerables antes de que los chicos malos lo hagan. Mientras Nmap no es un escaner de vulnerabilidades completo, NSE es lo suficientemente poderoso para manejar cada verificación de vulnerabilidad demandada. Muchos scripts de detección de vulnerabilidades están disponibles y se publicarán más cuando sean escritos.

Se procede a escanear el objetivo de evaluación. La opción “-n” no realiza una resolución al DNS. La opción “-Pn” trata a todos los hosts como en funcionamiento. La opción “-p-” define el escaneo de los 65535 puertos TCP, y la opción –script=vuln define la utilización de todos los Scripts NSE incluidos en la categoría “vuln”.


# nmap -n -Pn 192.168.0.18 -p- --script=vuln

Culminado el escaneo se presentan los resultados obtenidos. Entre los más relevantes se enumeran.

http-frontpage-login:
VULNERABLE:
Frontpage extension anonymous login
Estado: VULNERABLE
Descripción:
Las instalaciones por defecto de versiones antiguas de extensiones frontpage permiten logins anónimos los cuales pueden conducir a un compromiso del servidor.

http-slowloris-check:
VULNERABLE:
Slowloris DOS attack
Estado: VULNERABLE
Descripción:
Slowloris intenta mantener abiertas varias conexiones hacia el servidor web objetivo y mantenerlas abiertas tanto como sea posible. Esto se realiza abriendo las conexiones hacia el servidor web objetivo y enviando peticiones parciales. Haciendo esto se consumen los recursos del servidor web causando una Negación de Servicio.

rdp-vuln-ms12-020:
VULNERABLE:
MS12-020 Remote Desktop Protocol Denial Of Service Vulnerability
Estado: VULNERABLE
IDs: CVE:CVE-2012-0152
Factor de Riesgo Medium CVSSv2: 4.3 (MEDIUM) (AV:N/AC:M/Au:N/C:N/I:N/A:P)
Descripción:
Una vulnerabilidad en el Protocolo de Escritorio Remoto puede permitir a los atacantes remotos causar una negación de servicio.

MS12-020 Remote Desktop Protocol Remote Code Execution Vulnerability
Estado: VULNERABLE
IDs: CVE:CVE-2012-0002
Factor de Riesgo High CVSSv2: 9.3 (HIGH) (AV:N/AC:M/Au:N/C:C/I:C/A:C)
Descripción
Una vulnerabilidad en el Protocolo de Escritorio Remoto puede permitir a los atacantes remotos ejecutar código arbitrario sobre el sistema objetivo.

Es factible también definir la utilización de un solo script con Nmap. Para el caso de las siguiente demostración se utiliza el script de nombre “smb-check-vulns”. El cual verifica diversas vulnerabilidades como el famoso MS08-067, Conficker, MS06-025, entre otros. Tener especial cuidado con este script, pues realiza verificaciones peligrosas las cuales podrían traer abajo el servidor. Se sugiere no utilizarlos en entornos de producción a menos de entender el riesgo.


# nmap -n -Pn 192.168.0.18 -p139,445 --script=smb-check-vulns

En el mensaje devuelto luego de la ejecución de nmap, se indica el requerimiento de añadir la opción “--script-args=unsafe=1” para ejecutar los scripts considerados “no seguros”. Esto razón de lo riesgoso de las pruebas a ejecutar.


# nmap -n -Pn 192.168.0.18 -p139,445 --script=smb-check-vulns --script-args=unsafe=1

Ha sido factible detectar dos nuevas vulnerabilidades adicionales a las ya descubiertas anteriormente. La siguiente fase implica realizar la explotación de las vulnerabilidades encontradas.

Nmap también tiene la capacidad, a través de NSE, de explotar vulnerabilidades en lugar de solo encontrarlas. Esta capacidad de añadir scripts puede ser muy valiosa para algunas personas, especialmente aquellas haciendo pruebas de penetración. No se planea el convertir a Nmap en un framework de explotación como Metasploit.

Fuentes:

http://nmap.org/nsedoc/categories/vuln.html
http://nmap.org/nsedoc/lib/vulns.html
http://nmap.org/book/nse.html
http://insecure.org/sploits/Microsoft.frontpage.insecurities.html
http://ha.ckers.org/slowloris
http://technet.microsoft.com/en-us/security/bulletin/ms12-020
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0152
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-0002
http://nmap.org/nsedoc/scripts/smb-check-vulns.html

Enumerar información SMB desde un Sistema Windows utilizando enum4linux

Body

Enum4linux es una herramienta para enumerar información desde sistemas Windows y Samba. Intenta ofrecer funcionalidades similares a “enum.exe”. Ha sido escrito en Perl y es básicamente un envoltorio alrededor de las herramientas Samba, smbclient, rpcclient, net y nmblookup. Entre sus funcionalidades se enumeran, RID cíclico, Listar usuarios, Listas información de grupos de membresías, Enumeración de compartidos, Detectar si el host esta un grupo o dominio, Identificar el sistema operativo remoto, Capturar políticas de contraseñas.

La manera más simple de ejecutar la herramienta enum4linux es utilizado la opción “-a”, la cual permite realizar una enumeración sencilla utilizando las opciones “-U, -S, -G, -P, -r, -o, -n , -i”.


# enum4linux -a 192.168.0.18

En los resultados obtenidos no ha sido factible para la herramienta obtener información relacionada a los SID del dominio. Para analizar esto se utiliza la opción "-U" la cual permite obtener una lista de usuarios, y la opción “-v” la cual muestra completamente los comandos ejecutados.


# enum4linux -U -v 192.168.0.18

Se ejecuta el comando “rpcclient” utilizado por enum4linux. Según el mensaje expuesto no es factible obtener el SID para el dominio. Ahora se modifican las opciones del comando “rpcclient” agregando la opción “-N” para no realizar la consulta de una contraseña, y se modifica la opción “-U” a un usuario “ ” nulo.


# rpcclient -W 'GRUPOXXXXXXXX' -U" " -N 192.168.0.18 -c 'enumdomusers' 2>&1

Dada la factibilidad de obtener la información utilizando el comando "rpcclient" de manera manual, se infiere el requerimiento de definir las opciones “-u” y “-p” en enum4linux, las cuales permiten especificar un nombre de usuario y contraseña respectivamente. Para el escenario en evaluación no se definirá nada en estas opciones.


# enum4linux -a -u " " -p " " 192.168.0.18

Revisando la información puntual capturada sobre los usuarios en el objetivo de evaluación, se verifica la obtención satisfactoria de esta u otra ingente cantidad de información.

Fuentes:

https://labs.portcullis.co.uk/tools/enum4linux/
https://code.google.com/p/phillips321/source/browse/trunk/enum4linux-0…
https://technet.microsoft.com/en-us/library/cc785969%28WS.10%29.aspx
http://www.iodigitalsec.com/windows-null-session-enumeration/

Enumeración DNS utilizando dnsrecon

Body

DNSRecon es una herramienta de escaneo y enumeración DNS escrita en Python, la cual permite realizar diferentes tareas, como enumeración de registros estándar para un dominio definido (A, NS, SOA y MX). Expansión de dominio de nivel superior para un dominio definido. Transferencia de zona contra todos los registros NS para un dominio definido. Consulta reversa contra un rango de direcciones IP, proporcionando una dirección IP inicial y final.

La manera mas simple de utilizar dnsrecon es definiendo el dominio del objetivo de evaluación utilizando la opción “-d”. Si no se especifica la opción “-n” o servidor de nombres a utilizar, se utilizará el SOA del objetivo.


# dnsrecon -d xxxxx .com

Obtenidos los servidores de nombres, se procede a realizar una enumeración por fuerza bruta. La opción “-n” define el servidor de dominio a utilizar. La opción “-D” define el archivo Diccionario de sudominios o nombres de host a utilizar para la fuerza bruta. La opción “-t brt” especifica el tipo de enumeración a realizar, “brt” es para realizar fuerza bruta de dominios y host utilizando un diccionario definido.


# dnsrecon -d xxxxx .com -n dns1. xxxxx. com -D namelist.txt -t brt

Es factible utilizar el motor de búsqueda Google para realizar una búsqueda de subdominios y hosts. Para esto se utiliza la opción “-t goo”


# dnsrecon -d xxxxx .com -n dns1. xxxxx .com -t goo

Para la siguiente demostración se utiliza el dominio, zonetransfer.me cuyos servidores de nombres permiten realizar transferencias de zona satisfactorias.


# dnsrecon -d zonetransfer.me -t axfr

Fuentes:

https://github.com/darkoperator/dnsrecon
http://digi.ninja/projects/zonetransferme.php
https://www.ietf.org/rfc/rfc1034.txt
https://www.ietf.org/rfc/rfc1035.txt
https://www.ietf.org/rfc/rfc1034.txt

Reconocimiento Web utilizando Recon-ng

Body

Recon-ng es un framework de reconocimiento web escrito en Python. Entre sus características principales se enumeran los módulos independientes, interacción con base de datos, construcción con funciones confortables, ayuda interactiva, y completado de comandos. Recon-ng proporciona un poderoso entorno en el cual se puede realizar reconocimiento open source basado en web de manera rápida y total.

Recon-ng tiene una apariencia similar a Metasploit Framework, reduciendo la curva de aprendizaje para aprovechar el framework, sin embargo es muy diferente. Recon-ng no tiene la intención de competir con los frameworks existentes, ha sido diseñado exclusivamente para reconocimiento basado en web open source. Si se desea realizar explotación utilizar Metasploit Framework. Si se desea realizar Ingeniería Social utilizar Social Engineer Toolkit (SET). Y si se desea conducir un reconocimiento utilizar Recon-ng.

La versión más reciente de Kali Linux no incluye por defecto Recong-ng, razón por la cual se procede con su instalación.

La siguiente demostración utiliza el módulo de nombre “whois_pocs”, el cual usa el Whois de ARIN para cosechar o recolectar información de personas de contacto desde la consultas whois para un dominio seleccionado. Actualizando la tabla “contacts” con los resultados.


# apt-get install recon-ng

Se procede a ejecutar recon-ng.


# recon-ng

Para obtener la ayuda relacionada a los comandos utilizar “help”.

Para buscar un módulo utilizar el comando “search”.


> search whois_pocs

Para indicar al framework el uso de un modulo utilizar el comando “use”. Para mostrar las opciones utilizar “show options”.


> use recon/domains-contacts/whois_pocs
> show options

Definir la opción de nombre “SOURCE” con el nombre de dominio a evaluar. Luego ejecutar el módulo con el comando “run”.

Culminada la ejecución del módulo se presentan los resultados del proceso realizado.

La siguiente demostración utilizará el módulo de nombre “google_site”, el cual permite recolectar o cosechar hosts desde Google.com utilizando el operador de búsqueda “site”. Actualiza la tabla de nombre “host” con los resultados obtenidos.

Buscar el módulo de nombre “google_site”, se indica su utilización, se definen sus opciones y se procede a su ejecución.


> search google_site
> use recon/domains-hosts/google_site_web
> show options
> set SOURCE XXXXX.com
> run

Finalizada la ejecución del módulo son presentados los resultados del proceso realizado.

Para visualizar los datos o información obtenida utilizando los módulos “whois_pocs” y “google_site”, se utiliza el comando "show” seguido del nombre de la tabla a consultar.


> show contacts


> show hosts

Fuentes:

https://bitbucket.org/LaNMaSteR53/recon-ng

Decompilar Applets Java de una Aplicación Web

Body

Adicionalmente a los formularios HTML, otro método para capturar, validar y enviar datos del usuario es utilizar un componente en el lado del cliente el cual se ejecuta en una extensión del navegador como Java o Flash. Cuando son empleados en las aplicaciones web pueden crear componentes completamente funcionales en el lado del cliente. Incluyendo validaciones complejas y manipulación de los datos capturados antes de su envío hacia el servidor. Erroneamente los desarrolladores asumen la no factibilidad de evadir su validación, lo cual convierte a las extensiones del navegador en un objetivo atractivo para descubrir vulnerabilidades dentro de las aplicaciones web.

Para la siguiente demostración se utiliza un Applet Java. Los Applets Java se ejecutan en una Máquina Virtual Java (JVM) y están sujetos a un sandboxing aplicado por la Política de seguridad de Java. Debido a que Java existió desde hace tiempo en la historia de internet y debido a que sus conceptos claves han permanecido relativamente sin cambio, una gran cantidad de conocimiento y herramientas están disponible para atacar y defender los Applets Java.

Uno de los métodos de ataque implica decompilar el objeto, realizar una revisión de su código fuente, y de ser necesario modificar su código, para luego recompilarlo. Las extensiones del navegador como los Aplets Java están compilados en “bytecode”. Bytecode es una representación binaria de alto nivel independiente de la plataforma, la cual puede ser ejecutada por un interprete, en este caso la Máquina Virtual de Java (JVM). Como resultado de esto, la aplicación puede ejecutarse sobre cualquier plataforma en la cual el interprete puede ejecutarse.

Se procede a obtener el bytecode pertinente para realizar la siguiente demostración.

Para decompilar el archivo se utilizará la herramienta “Jad”. Jad o Java decompiler es una herramienta la cual permite decompilar bytecode Java en código fuente Java.

Se procede a descargar y descomprimir la herramienta.

Ejecutar Jad con la opción “sjava” permite cambiar la extensión del archivo de salida.


$ jad -sjava slideb.class

Es factible ahora abrir con un editor, el archivo creado con extensión “.class”.

En caso se realice alguna modificación en el código fuente decompilado, se requiere compilarlo nuevamente a bytecode, para luego realizar las evaluaciones requeridas con el objeto. Para realizar la compilación se necesita utilizar las herramientas del desarrollador. En el caso de Java se requiere instalar el programa javac de JDK.

Fuentes:

http://varaneckas.com/jad/
http://www.javaworld.com/article/2077233/core-java/bytecode-basics.html
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-…

Evadir Restricciones de Datos Enviados por el Usuario en Formularios HTML

Body

Las aplicaciones usualmente utilizan controles en el lado del cliente para restringir los datos enviados por los clientes. Los formularios HTML son la manera más sencilla y simple de capturar datos desde el usuario y enviarlos hacia el servidor. Los usuarios escriben datos dentro de campos de texto nombrados, los cuales son enviados hacia el servidor como pares de nombre/valor. Los formularios también pueden imponer restricciones o realizar verificaciones de validación sobre los datos proporcionados por el usuario.

Cuando una aplicación emplea controles en el lado del cliente como mecanismo de seguridad para defenderse contra entradas maliciosas, estos controles pueden usualmente ser fácilmente evadidos, dejando a la aplicación potencialmente vulnerable a ataques.

Limites en la Longitud

El siguiente formulario impone una restricción del campo "login_usrname" a una longitud de 20 caracteres. maxlenght=”20”. Mencionar la utilización de “Firebug” para visualizar estos datos.

Esto puede ser fácilmente evadido modificando el valor del campo de nombre “maxlenght” a una longitud de 30 o más.

Es factible también utilizar Zed Attack Proxy para interceptar los datos enviados en el formulario, realizar una modificación sobre estos, para luego enviarlos hacia el servidor. En la siguiente demostración se define un valor de gran longitud para el campo de nombre “name”.

Validación con Scripts

Es también común el validar los datos ingresados por el usuario mediante la utilización de scripts. Analizar la linea resaltada en la siguiente fuente HTML. El atributo “onsubmit” de la etiqueta “form “instruirá al navegador a ejecutar la función “submitForm” cuando el usuario haga clic en el botón “Submit” y enviar el formulario solo si la función retorna un valor verdadero. Este mecanismo permite a la lógica en el lado del cliente interceptar un intento de envío del formulario, realizar verificaciones de validación personalizadas sobre la entrada del usuario, y decidir si aceptar la entrada.

En este caso la función “submitForm” verifica la existencia de datos en los campos "txtUserName" y "txtPassword". Caso contrario será mostrado un mensaje de alerta indicando la no existencia de estos. Si el ingreso de datos es correcto, se envían los datos ingresados hacia el servidor.

Para evadir esto sería factible deshabilitar JavaScript en el Navegador. En firefox se debe definir a falso “javascript.enabled”. Pero esta acción puede romper o generar funcionamientos anómalos en la aplicación web. Una forma mas elegante de evadir la validación con JavaScript es completar los datos en el formulario, interceptar el envío con Zed Attack Proxy, modificar los datos y enviarlos hacia el servidor.

Se ingresan datos en ambos campos de formulario y se hace clic en el botón "Login".

Se interceptan los datos y se borran los valores definidos para los campos “txtUserName” y “txtPassword”. Esto será enviado hacia el servidor, lo cual supuestamente no debería ser factible de realizar debido a la validación de la función “submitForm”.

Elementos Deshabilitados

Si un elemento en un formulario HTML está deshabilitado este será mostrado el color gris, no siendo factible tampoco su edición o utilización. A modo de demostración se ha incluido el código “disabled='true'” en la entrada correspondiente al botón “Clear” del formulario.

Esta información sobre el elemento abre un nuevo vector de ataque a la aplicación web, pues este podría ser habilitado simplemente eliminando esa definición. En otros escenarios podría sugerir la presencia de parámetros utilizados por la aplicación web.

Para todos los escenarios descritos, la explotación satisfactoria de vulnerabilidades en la aplicación web no solo son dependientes de las validaciones realizadas en el lado de cliente, sino también de las realizadas en el lado del servidor.

Fuentes:

http://getfirebug.com/
http://www.w3schools.com/jsref/event_onsubmit.asp
https://support.mozilla.org/en-US/questions/994809

Evaluar el ViewState de ASP NET

Body

Uno de los mecanismos comúnmente encontrados para transmitir datos mediante el cliente es el ViewState de ASP.NET. Este es un campo oculto creado por defecto en todas las aplicaciones web ASP.NET. Contiene información serializada sobre el estado de la página actual. La plataforma ASP.NET emplea ViewState para mejorar el desempeño del servidor. Permite al servidor preservar los elementos dentro de la interfaz de usuario entre peticiones sucesivas sin la necesidad de mantener toda la información relevante al estado en el lado del servidor.

El servidor por ejemplo puede poblar una lista desplegable en base a los parámetros enviados por un usuario. Cuando el usuario hace peticiones subsecuentes, el navegador no envía el contenido de la lista de retorno hacia el servidor. Sin embargo, el navegador envía el campo oculto ViewState, el cual contiene el formulado en serializado de la lista. El servidor deserializa el ViewState y recrea la misma lista la cual es presentada nuevamente al usuario.

Los desarrolladores además pueden utilizar ViewState para almacenar información arbitraria entre peticiones sucesivas. Es decir, en lugar de guardar el precio de un producto en un campo oculto del formulario, la aplicación puede guardarlo en el ViewState.

La manera más sencilla de localizar estos campos es visualizando la fuente HTML y buscando la cadena de texto “__VIEWSTATE”.

Cuando se intenta decodificar lo que parece ser un cadena codificada en Base64, un error común es empezar la decodificación en una posición errónea dentro de la cadena. Esto debido al funcionamiento de la codificación Base64, pues si se inicia en una posición errónea la cadena decodificada contendrá basura. Base64 es formato basado en bloques en el cual cada 4 bytes de datos codificados se traduce en 3 bytes de datos decodificados. Por lo tanto si se intenta decodificar una cadena Base64 sin descubrir nada significativo, se debe intentar iniciar desde 4 desplazamientos adyacentes en la cadena codificada.

Por defecto ASP.NET protege el ViewState de manipulación añadiendo un hash con clave (conocido como protección MAC (Message Authentication Codes) ). Sin embargo muchas aplicaciones deshabilitan esta protección por defecto, lo cual implica la capacidad de modificar el valor de ViewState para determinar si tiene algún efecto en el procesamiento del lado del servidor.

Existen diversos sitios web disponibles, los cuales permiten realizar la decodificación del ViewState.

Burp Suite incluye un interprete de ViewState el cual indica si tiene la protección MAC. Si no está protegido, el contenido del ViewState puede ser editado utilizando el editor hexadecimal, para luego enviarlo hacia la aplicación web objetivo

Fuentes:

https://msdn.microsoft.com/en-us/library/ms972976.aspx
http://ignatu.co.uk/ViewStateDecoder.aspx
http://en.wikipedia.org/wiki/Base64
http://www.troyhunt.com/2013/09/understanding-and-testing-for-view.html
http://portswigger.net/burp/
http://testaspnet.vulnweb.com/