Creación de herramientas multiopción

Creación de herramientas multiopción – Codelivly

 

Durante una prueba de penetración, puede ocurrir que necesite desarrollar una herramienta ligera y silenciosa. Después de realizar un reconocimiento del sistema, puede obtener una mejor comprensión de la estructura de los sistemas de red. Armado con este conocimiento, puede crear una herramienta que realice múltiples tareas con bajo impacto. En este artículo, mostraré cómo crear una secuencia de comandos de Python que incorpore una utilidad de línea de comandos que administre sistemas Linux mediante el uso de Ansible.

Tendremos que importar el osY subprocess módulos para interactuar con el sistema operativo y ejecutar comandos.

import os
import subprocess

Ahora puedo crear las funciones. Para esto quiero cinco funciones. La primera función facilitará la instalación de Ansible, mientras que la segunda función agregará mi clave SSH a un servidor remoto. La tercera función permitirá que el sistema busque tipos de archivos y la cuarta función permitirá la descarga de archivos y carpetas desde múltiples servidores. La quinta función facilitará la transferencia de archivos entre servidores. Además, incluiremos una función, denominada 0, para salir del script.

La primera función da la posibilidad de instalar Ansible en el sistema usando el subprocess.run función para ejecutar los comandos necesarios.

def install_ansible():
subprocess.run(["sudo", "apt", "update"])
subprocess.run(["sudo", "apt", "install", "software-properties-common"])
subprocess.run(["sudo", "apt-add-repository", "--yes", "--update", "ppa:ansible/ansible"])
subprocess.run(["sudo", "apt", "install", "ansible"])

La segunda función le pide al usuario la dirección IP del servidor remoto, el nombre de usuario en el servidor remoto y la ruta a la clave SSH. Luego ejecuta el ssh-copy-id comando usando subprocess.run para agregar la clave SSH al servidor remoto.

def add_ssh_key():
ip = input("Enter the IP address of the remote server: ")
username = input("Enter the username on the remote server: ")
ssh_key_path = input("Enter the path to the SSH key: ")
subprocess.run(["ssh-copy-id", f"{username}@{ip}", "-i", ssh_key_path])

La tercera función le pide al usuario las direcciones IP de los sistemas a escanear y los tipos de archivos a escanear. A continuación, utiliza un bucle para ejecutar el ansible ordenar con el find módulo para escanear cada sistema en busca de tipos de archivos específicos.

def download_files():
ips = input("Enter the IP addresses of the systems to download files from (comma-separated): ")
files = input("Enter the files to download (comma-separated): ")
dest = input("Enter the destination folder to save the files: ")
for ip in ips.split(","):
for file in files.split(","):
subprocess.run(["ansible", f"{ip}", "-m", "fetch", "-a", f"src={file} dest={os.path.join(dest, ip)}"])

La cuarta función solicita al usuario las direcciones IP de los sistemas desde los cuales descargar los archivos, los archivos para descargar y la carpeta de destino para guardar los archivos. A continuación, utiliza bucles anidados para ejecutar el ansible ordenar con el fetch módulo para descargar cada archivo de cada sistema y guardarlo en la carpeta de destino especificada.

def download_files():
ips = input("Enter the IP addresses of the systems to download files from (comma-separated): ")
files = input("Enter the files to download (comma-separated): ")
dest = input("Enter the destination folder to save the files: ")
for ip in ips.split(","):
for file in files.split(","):
subprocess.run(["ansible", f"{ip}", "-m", "fetch", "-a", f"src={file} dest={os.path.join(dest, ip)}"])

La quinta función solicita al usuario la dirección IP del servidor de origen, la dirección IP del servidor de destino y los archivos a transferir. A continuación, utiliza un bucle para ejecutar el ansible ordenar con el copy módulo para transferir cada archivo desde el servidor de origen al servidor de destino.

def transfer_files():
source_ip = input("Enter the IP address of the source server: ")
dest_ip = input("Enter the IP address of the destination server: ")
files = input("Enter the files to transfer (comma-separated): ")
for file in files.split(","):
subprocess.run(["ansible", f"{source_ip}", "-m", "copy", "-a", f"src={file} dest={dest_ip}:"])

Para crear una lista numérica en la CLI, necesitaremos definir la función main(). Esto desplegará el menú imprimiendo la lista de opciones. Luego podemos hacer una elección y ejecutar la función adecuada en función de la entrada numérica. Si el usuario ingresa una opción no válida, el programa muestra un mensaje de error y regresa al menú principal.

        choice = input("Enter your choice: ")
if choice == "1":
install_ansible()
elif choice == "2":
add_ssh_key()
elif choice == "3":
scan_files()
elif choice == "4":
download_files()
elif choice == "5":
transfer_files()
elif choice == "0":
break
else:
print("Invalid choice")

Esta última sección de la secuencia de comandos es una expresión estándar de Python que verifica si la secuencia de comandos se ejecuta como el programa principal. Si es así, el main() Se llama a la función para iniciar el programa. Si no, el script se importa como un módulo y el main() la función no se ejecuta.

if __name__ == "__main__":
main()

La respuesta se verá como la siguiente

Listo. ¡Ahora tiene la capacidad de construir cualquier herramienta que desee! Aplausos, sigue y comparte si te gusta este artículo y ¡Feliz Cacería!

Si quieres conocer otros artículos parecidos a Creación de herramientas multiopción puedes visitar la categoría Tutoriales.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Subir

Esta página web utiliza cookies para analizar de forma anónima y estadística el uso que haces de la web, mejorar los contenidos y tu experiencia de navegación. Para más información accede a la Política de Cookies . Ver mas