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