R.Eric Kiser

Saya terus berupaya menyederhanakan proses dan mengoptimalkan efisiensi. Melakukan tugas-tugas biasa dan berulang-ulang dapat dengan cepat menjadi membosankan dan membosankan. Terkadang, klien meminta penilaian komprehensif yang memerlukan eksploitasi menyeluruh dan pengumpulan data di berbagai sistem. Meskipun membangun pijakan menggunakan alat seperti impacket biasanya mudah, pengumpulan data secara manual dari berbagai sistem dapat memakan waktu dan tidak menarik. Meski demikian, saya mengutamakan memberikan hasil berkualitas tinggi sesuai dengan ekspektasi klien. Pada artikel ini, saya akan menunjukkan kepada Anda bagaimana saya menggunakan Python dan Ansible untuk mengelola beberapa server Linux dan mengumpulkan data sensitif dari satu lokasi.

Jika Anda belum pernah mendengar tentang Ansible, saya sarankan untuk melihatnya lebih dekat. Alat manajemen Linux sumber terbuka ini sederhana dan ramah pengguna. Ansible menggunakan buku pedoman, yang ditulis dalam bahasa YAML, membuatnya sangat mudah dibaca dan dipahami.

Pertama-tama kami akan mengimpor modul subproses yang memungkinkan Anda menjalankan perintah shell dari dalam skrip Python kami.

import subprocess

Kita dapat menggunakan fungsi subprocess.call() untuk menjalankan perintah shell yang memperbarui daftar paket dan menginstal Ansible. Seperti biasasudo digunakan untuk memastikan bahwa perintah dijalankan dengan hak administratif.

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

Kami ingin skrip meminta nama atau alamat IP server Linux untuk mencari file. Fungsi input() menampilkan prompt ke dan menunggu nama server atau IP (dipisahkan koma). Kami kemudian membagi masukan yang dipisahkan koma menjadi daftar nama server atau alamat IP menggunakan metode split(). Kami juga ingin menanyakan jenis file yang ingin kami cari, seperti .conf atau .pem.

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

Selanjutnya kita akan membuat string perintah yang Mungkin menggunakan fitur f-string dari Python. Perintah ini menggunakan perintah ansible untuk menjalankan pedoman Ansible di server yang ditentukan, menggunakan modul find untuk mencari file. Opsi -a digunakan untuk meneruskan parameter pencarian, termasuk jenis file yang akan dicari. Fungsi subprocess.check_output() menjalankan perintah dan mengembalikan hasilnya. Kami meneruskan opsi shell=True untuk menunjukkan bahwa kami menjalankan perintah shell. Mari kita juga membuat prompt yang menunjukkan apakah kita ingin menyimpan file yang ditemukan ke lokasi tertentu. Jika tidak, skrip akan mencetak path lengkap ke layar.

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) ")

Jika kita memilih untuk menyimpan file yang ditemukan, fungsi open() akan membuka file dengan mode tulis ("w"), menulis string result yang didekodekan ke file, dan menutup file.

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())

Hanya itu saja! Menggabungkan Ansible dan Python menawarkan banyak kemungkinan. Meskipun perangkat yang saya bagikan bersifat dasar, saya sangat menyarankan untuk membuat menu numerik dalam skrip Python Anda yang memungkinkan Anda menyelesaikan berbagai tugas, termasuk menulis file (seperti kunci atau kartu panggil) atau menjalankan perangkat lunak penangkap paket. Tepuk tangan, ikuti, dan bagikan jika Anda menyukai artikel ini dan Selamat Berburu!

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())