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](https://docs.python.org/2/library/subprocess.html))

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 

<span

style=“font-family: sans-serif; font-size: x-small; line-height: 20.7999992370605px;“>([read

about](https://docs.python.org/2/library/subprocess.html)<span

style=“font-family: sans-serif; font-size: x-small; line-height: 20.7999992370605px;“>)

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


Ver también