Mostrando entradas con la etiqueta Programacion. Mostrar todas las entradas
Mostrando entradas con la etiqueta Programacion. Mostrar todas las entradas

Ahora que estoy de vacaciones (bendita semana santa) he sacado un hueco para terminar uno de los muchos artículos que tengo pensado escribir sobre el lenguaje de programación python, donde a pesar de ser yo un recién llegado al mundo python, ya me siento extremadamente cómodo programando en python, hasta tal punto que se ha convertido en mi lenguaje favorito.

En artículos anteriores os hable de como usar python como lenguaje de Hacking, al hilo de los mismos, os voy a introducir en algunos conceptos y/o comandos de python de utilidad en el área de la Seguridad Informática, como por ejemplo ejecutar comandos del sistema de forma segura (evitando inyección arbitraria de comandos) desde un programa escrito en python.


Introducción

Cuando aprendes a programar lo habitual es empezar con el lenguaje pseudo-código y C, en mi experiencia programando, de C pase a emsablador Morotorla 6880 y luego C++; en el momento que empiezas a utilizar la programación orientada a Objetos descubres los beneficios e inconvenientes de los cuales no os voy a hablar. Lo mejor de python es la flexibilidad, rapidez e ingente cantidad de recursos disponibles con los que contar.

Tras probar varios lenguajes de programación (con sus contras y sus pros) me quedo con python, siendo este el inicio de una serie de artículos o publicaciones, donde os mostrare algunos ejemplos prácticos de programación en python (orientados a hacking), como es el caso de éste artículo, donde vamos a ver como leer los puertos abiertos del sistema (listening port).

¿ Por donde empiezo ?

Existen al menos tres maneras distintas de ejecutar un comando del sistema desde un programa escrito en python, la primera es utilizando las librerías del sistema os, la segunda, utilizando la librería subprocess y la tercera, es utilizando la librería commands.

Vamos a ilustrar con algunos ejemplos prácticos la utilización de las diferentes librerías. Sin embargo, tanto como la librerías commands, como la librería os, ha sido sustituidas por subprocess, por lo que centraré los ejemplos en subprocess.

Nota: Los ejemplos estan preparados para funcionar solamente en sistemas UNIX, 
No obstante, las librerías commands, y os, ha sido sustituidas por subprocess.

Ejemplo 1

Ejecutar cualquier comando del sistema a través de un programa escrito con python (run a system command through python script), en el ejemplo se ha utilizado "ls -lsa", para listar el contenido de un directorio.

CODE_

Example python code - e1-py

OUT_

Example 1: e1.py - Run system command from python

Nota:
Passing shell=True can be a security hazard if combined with untrusted input (read about)

Ejemplo 2

Ejecuta cualquier comando introducido por el usuario desde el teclado o STDIN !

Example python code - e2.py

Nota:
Passing shell=True can be a security hazard if combined with untrusted input 
(read about)

OUT_

Running cat /etc/passwd

Example 2: run cat /etc/passwd command from python code

Ejemplo 3: 

Ejecutar y mostrar el resultado de listar los archivos de un directorio "ls -ls", utilizando parametrización del comando y usando tuberías en lugar de ejecución directa en la SHELL, es una forma más segura de ejecutar comandos directamente en sistema, evitando ataques de COMMAND OS Injection sobre vuestro código, claro esta que esto es meramente un ejemplo didáctico y las diferencias entre los ejemplos son minimamente significativas.

CODE_

Example python code - e3.py

Ejecución

ST2Labs > python e3.py

OUT_

Example 3 - Run a secure system command.

Todos los ejemplos los puedes descargar desde mi repositorio ST2Labs en GitHub (https://github.com/ST2Labs/ST2Example).

#ST2Labs

Después este largo "letargo" he sacado un poco de tiempo para colgar el blog un trabajo sobre python como lenguaje de Ataque y Defensa. Este trabajo ha sido realizado por Fernando Crespo Ingeniero de Telecomunicaciones como proyecto fin del Curso Experto Seguridad TIC

Fernando eligió realizar un trabajo sobre de Hacking tras finalizar el Curso Exp, y decidió aplicar y ampliar algunos de los conceptos adquiridos en el modulo de Hacking y pentesting impartido por mi (@rhodius - @ST2Labs - @seguridadparatodos), ahora convertido en un Máster de Seguridad TIC (+Info).

El resultado es un trabajo sobre python como lenguaje de Hacking (Ataque) y Defensa. El trabajo se irá subiendo en varias partes (artículos) en el Blog, espero que os guste!

Gracias a Fernando, todos podemos disfrutar de su trabajo !

INDICE

1. Introducción y objetivos

En este documento se pretende investigar la potencia como herramienta para cualquier Ingeniero de Seguridad de uno de los lenguajes de programación más utilizados en la industria del software : Python.

Python es un lenguaje interpretado muy utilizado como herramienta de pentesting sobre todo para la creación de exploits. Pero su integración con infinidad de librerías de terceros hace pensar en Python como un lenguaje poderoso tanto para el ataque como para la defensa. Así, durante los diferentes artículos se mostrará al lector las dos caras que puede tener Python en el mundo de la Seguridad, incluyendo ejemplos prácticos.

La primera y segunda parte se van a centrar en Python como Lenguaje de Ataque (Hacking con Python).

2. Hacking con Python

Esta sección trata de mostrar al lector la potencia de Python para construir herramientas propias de hacking a través de ejemplos prácticos. Se analizarán las ventajas de Python y se verá su integración con otras herramientas muy conocidas como nmap y exploitdb.

2.1. Python como lenguaje para Hackers

Según [O’Connor, 2012], “Python es un lenguaje para Hackers”. Expone su defensa de esta aseveración en su sencillez, lo apropiado que es para iniciarse en la programación y la infinidad de librerías con las que puede integrarse, razón por la cual puede ayudar a extender las funcionalidades de las herramientas actuales de hacking. 

Por otro lado, según [Seitz, 2011] el autor y otros colegas de trabajo “Aprendieron Python específicamente para hacking”. Después de estas afirmaciones, cabe la pregunta de si es Python un lenguaje de hacking. Vamos a ver casos prácticos para comprobar la veracidad de las mismas.

2.2. Casos prácticos

En esta sección se plantean dos casos prácticos obtenidos de [O’Connor, 2013]. El primero será un escanner de puertos integrado con las librerías de nmap para Python. El siguiente será la utilización conjunta de Python y exploitdb para generar un exploit que aproveche una vulnerabilidad en un servidor FTP obteniendo la shell del equipo de la víctima.

2.2.1. Scanning de puertos: integración con nmap

Supongamos que quisiéramos crear un escáner de puertos. Tendríamos que crear un hilo por cada socket que abriese una conexión en un puerto y gestionar el uso compartido de la pantalla mediante un semáforo. Con esto tendríamos un código largo como se muestra a continuación y además sólo haríamos un scanning simple TCP, pero no ACK, SYN-ACK, RST o FIN proporcionados por el toolkit Nmap.

El formato de respuesta de Nmap es XML. Steve Milner y Brian Buston escribieron librerías Python para parsear este formato de respuesta, proporcionando la integración total con nmap y pudiendo hacer más tipos de escaneos.

||| Hasta aquí en esta primera entrega .... CONTINUARÁ

Un Saludo.
#ST2Labs