Р. Эрик Кисер

Я постоянно стремлюсь оптимизировать свои процессы и оптимизировать эффективность. Выполнение мирских и повторяющихся задач может быстро стать утомительным и скучным. Иногда клиенты запрашивают всесторонние оценки, которые требуют тщательной эксплуатации и сбора данных в различных системах. Хотя установить точку опоры с помощью таких инструментов, как impacket, как правило, несложно, сбор данных вручную из нескольких систем может занять много времени и быть непривлекательным. Тем не менее, я отдаю предпочтение качественному результату в соответствии с ожиданиями клиента. В этой статье я покажу вам, как я использую Python и Ansible для управления несколькими серверами Linux и сбора конфиденциальных данных из одного места.

Если вы никогда не слышали об Ansible, предлагаю присмотреться к нему поближе. Этот инструмент управления Linux с открытым исходным кодом прост и удобен для пользователя. Ansible использует плейбуки, написанные на языке YAML, что делает их очень удобными для чтения и понимания.

Сначала мы импортируем модуль подпроцесса, который позволяет запускать команды оболочки из нашего скрипта Python.

import subprocess

Мы можем использовать функцию subprocess.call() для запуска команд оболочки, которые обновляют список пакетов и устанавливают Ansible. Как всегда, sudo используется для обеспечения того, чтобы команды выполнялись с правами администратора.

subprocess.call(["sudo", "apt-get", "update"])
subprocess.call(["sudo", "apt-get", "install", "ansible"])

Мы хотим, чтобы скрипт запрашивал имена или IP-адреса серверов Linux для поиска файлов. Функция input() отображает приглашение и ожидает имена серверов или IP-адреса (разделенные запятыми). Затем мы разбиваем входные данные, разделенные запятыми, на список имен серверов или IP-адресов, используя метод split(). Мы также хотим запрашивать тип файла, который мы хотим найти, например, .conf или .pem.

servers = input("Enter server names or IPs (comma separated): ").split(",")
filetype = input("Enter file type to search for: ")

Далее мы создадим командную строку Ansible, используя функцию Python f-string. Эта команда использует команду ansible для выполнения плейбука Ansible на указанных серверах, используя модуль find для поиска файлов. Параметр -a используется для передачи параметров поиска, включая тип файла для поиска. Функция subprocess.check_output() запускает команду и возвращает результат. Мы передаем параметр shell=True, чтобы указать, что мы запускаем команду оболочки. Давайте также создадим подсказку, указывающую, хотим ли мы сохранить обнаруженные файлы в определенном месте. В противном случае скрипт напечатает полный путь к экрану.

command = f"ansible {' '.join(servers)} -m find -a 'path=/ recurse=yes patterns={filetype}'"
result = subprocess.check_output(command, shell=True)
save_to_file = input("Do you want to save the discovered files to a file location? (y/n) ")

Если мы решим сохранить обнаруженные файлы, функция open() откроет файл в режиме записи ("w"), запишет декодированную строку result в файл и закроет файл.

if save_to_file == "y":
    file_path = input("Enter file path to save the discovered files: ")
    with open(file_path, "w") as f:
        f.write(result.decode())
else:
    print(result.decode())

Вот и все! Сочетание Ansible и Python предлагает множество возможностей. Хотя набор инструментов, которым я поделился, является базовым, я настоятельно рекомендую создавать числовые меню в вашем скрипте Python, которые позволят вам выполнять ряд задач, включая запись файлов (таких как ключи или визитные карточки) или запуск программного обеспечения для захвата пакетов. Хлопайте, подписывайтесь и делитесь, если вам понравилась эта статья и удачной охоты!

import subprocess

# Install Ansible
subprocess.call(["sudo", "apt-get", "update"])
subprocess.call(["sudo", "apt-get", "install", "ansible"])

# Prompt for server names or IPs
servers = input("Enter server names or IPs (comma separated): ").split(",")

# Prompt for the file type to search for
filetype = input("Enter file type to search for: ")

# Run Ansible playbook to search for files on servers
command = f"ansible {' '.join(servers)} -m find -a 'path=/ recurse=yes patterns={filetype}'"
result = subprocess.check_output(command, shell=True)

# Prompt to save the discovered files to a file location
save_to_file = input("Do you want to save the discovered files to a file location? (y/n) ")

if save_to_file == "y":
    # Prompt for file path to save the discovered files
    file_path = input("Enter file path to save the discovered files: ")
    with open(file_path, "w") as f:
        f.write(result.decode())
else:
    # Print the full path of the discovered files in the terminal
    print(result.decode())