Test d'intrusion Python : exécution simultanée de plusieurs scripts sur plusieurs appareils
R. Eric Kiser
Cela peut surprendre, mais le frisson des tests d'intrusion peut perdre de son éclat, en particulier lors de l'exécution de tâches répétitives lors de chaque engagement. Cela peut commencer à ressembler à un travail de routine en usine, ce que je n'aime pas particulièrement. L'idée de devoir effectuer des tâches identiques à plusieurs reprises sur chaque système compromis devient fastidieuse et ennuyeuse. Par conséquent, je préfère créer des outils qui peuvent gérer de telles tâches pour moi, libérant du temps pour me concentrer sur des activités plus engageantes. Je suppose que je pourrais être considéré comme un accro du savoir, cherchant toujours à élargir ma compréhension au-delà de ce que je sais actuellement.
Une façon d'exécuter plusieurs scripts python sur de nombreux systèmes Linux consiste à utiliser Ansible et Python. Pour accomplir cette tâche, le package ansible-runner peut être utilisé, qui offre une méthode simple pour exécuter des playbooks Ansible par programme. Dans cet article, nous allons développer un programme qui sollicite l'utilisateur pour les emplacements de divers scripts python et des systèmes Linux cibles, divise les chaînes d'entrée en listes, définit un playbook Ansible qui exécute les scripts python sur les systèmes désignés, génère une instance de l'ansible-runner, et lance le playbook.
Avant d'exécuter ce script, assurez-vous qu'Ansible et ansible-runner sont installés sur votre système. De plus, vérifiez que vous disposez d'un accès SSH aux systèmes Linux cibles et qu'ils sont correctement configurés pour être gérés par Ansible. Pour plus d'informations sur la façon d'y parvenir, veuillez vous référer à mes articles précédents, Python Penetration Testing: Building Multi-Option Tools and Python Penetration Testing: How I control multiple Linux servers from one device .
Nous devons d'abord importer le ansible_runnerpackage. Ce package fournit une interface simple pour exécuter des playbooks Ansible par programmation.
import ansible_runner
# Prompt user for the location of the python scripts and the target systems
script_location = input("Enter the location of the python scripts (comma-separated): ")
target_systems = input("Enter the target Linux systems (comma-separated): ")
# Split the input strings into lists
scripts = [s.strip() for s in script_location.split(",")]
hosts = [h.strip() for h in target_systems.split(",")]
# Define the Ansible playbook that runs the python scripts
playbook = {
'name': 'Run Python Scripts on Linux Systems',
'hosts': hosts,
'tasks': [
{
'name': f'Run script {s}',
'command': f'python {s}'
} for s in scripts
]
}
# Create an instance of the ansible-runner
runner = ansible_runner.Runner(playbook=playbook, inventory=None)
# Run the playbook
runner.run()
J'ai utilisé cet outil à de nombreuses reprises. Par exemple, si je tombe sur un compte de service avec des privilèges d'administrateur de domaine, je peux l'utiliser pour exécuter des scripts impacket sur plusieurs systèmes, permettant un mouvement latéral sur différents segments de réseau. Applaudissez et suivez si vous aimez et bonne chasse !
import ansible_runner
# Prompt user for the location of the python scripts and the target systems
script_location = input("Enter the location of the python scripts (comma-separated): ")
target_systems = input("Enter the target Linux systems (comma-separated): ")
# Split the input strings into lists
scripts = [s.strip() for s in script_location.split(",")]
hosts = [h.strip() for h in target_systems.split(",")]
# Define the Ansible playbook that runs the python scripts
playbook = {
'name': 'Run Python Scripts on Linux Systems',
'hosts': hosts,
'tasks': [
{
'name': f'Run script {s}',
'command': f'python {s}'
} for s in scripts
]
}
# Create an instance of the ansible-runner
runner = ansible_runner.Runner(playbook=playbook, inventory=None)
# Run the playbook
runner.run()![Qu'est-ce qu'une liste liée, de toute façon? [Partie 1]](https://post.nghiatu.com/assets/images/m/max/724/1*Xokk6XOjWyIGCBujkJsCzQ.jpeg)



































