Python para Hacking (I) - Run a secure Shell command


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

0 comentarios:

Publicar un comentario