Р. Эрик Кисер
Я постоянно стремлюсь оптимизировать свои процессы и оптимизировать эффективность. Выполнение мирских и повторяющихся задач может быстро стать утомительным и скучным. Иногда клиенты запрашивают всесторонние оценки, которые требуют тщательной эксплуатации и сбора данных в различных системах. Хотя установить точку опоры с помощью таких инструментов, как 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())