Python Script untuk Mengendalikan Administrative Share secara Remote & MASSAL

Photo of author

By admin

Pengenalan tentang Administrative Share

Pengenalan tentang Administrative Share

Administrative Share adalah fitur yang ada di sistem operasi Windows yang memungkinkan akses remote terhadap berbagai sumber daya pada komputer, seperti direktori, drive, printer, dan lainnya. Fitur ini dapat sangat berguna dalam lingkungan administrasi jaringan, karena memungkinkan administrator untuk dengan mudah mengakses dan mengelola banyak komputer secara bersamaan. Akan tetapi selain fungsi, fitur ini juga bisa dimanfaatkan oleh compromised admin untuk melakukan pencurian data seperti pada artikel ini.

Dalam artikel ini, kami akan memperkenalkan sebuah script Python yang menggunakan protokol WMI (Windows Management Instrumentation) untuk mengendalikan administrative share secara remote dan massal. Dengan menggunakan script ini, administrator dapat dengan mudah mematikan atau menyalakan administrative share pada banyak komputer dalam satu kali proses.

Penggunaan WMI Protokol dalam Script Python

WMI adalah infrastruktur manajemen Windows yang menyediakan informasi tentang komponen perangkat keras dan perangkat lunak yang ada di sistem operasi Windows. Protokol ini memungkinkan kita untuk melakukan tindakan administratif pada komputer jarak jauh melalui skrip Python.

Dalam script yang kami sediakan, kami menggunakan modul Python bernama `wmi` untuk melakukan koneksi ke setiap komputer dalam jaringan dan mengirimkan perintah untuk mengubah status administrative share. Modul ini memungkinkan kami untuk melakukan pemrograman tingkat tinggi dengan mudah, tanpa harus mengerti detail implementasi dari protokol WMI itu sendiri.

Mengendalikan Administrative Share secara Remote dan Massal

Dengan menggunakan script Python yang kami sediakan, administrator dapat mengendalikan administrative share secara remote dan massal dengan mudah. Script ini memungkinkan administrator untuk memilih satu atau beberapa komputer dalam jaringan dan mengubah status administrative share pada komputer-komputer yang dipilih tersebut.

Administrator dapat memilih apakah ingin mematikan atau menyalakan administrative share pada setiap komputer terpilih. Dengan hanya menjalankan script ini, administrator dapat menghemat waktu dan usaha yang seharusnya diperlukan untuk mengelola administrative share secara manual pada setiap komputer.

Kesimpulannya, script Python dengan memanfaatkan protokol WMI dapat menjadi alat yang sangat berguna bagi administrator jaringan dalam mengendalikan administrative share secara remote dan massal. Dengan hanya menjalankan script ini, administrator dapat menghemat waktu dan usaha yang diperlukan untuk mengatur administrative share pada banyak komputer dalam jaringan.

Memanfaatkan Python untuk Mengendalikan Administrative Share

Python adalah bahasa pemrograman yang populer dan kuat yang memiliki dukungan luas untuk berbagai tugas pemrograman, termasuk mengendalikan administrative share secara remote dengan menggunakan WMI Protokol. Dengan menggunakan library atau modul tertentu, kita dapat membuat skrip Python yang dapat mengakses dan mengendalikan administrative share pada banyak komputer sekaligus.

Mengapa Memilih Python untuk Mengendalikan Administrative Share?

Ada beberapa alasan mengapa Python menjadi pilihan yang baik untuk mengendalikan administrative share secara remote dengan WMI Protokol. Berikut adalah beberapa keuntungan menggunakan Python dalam konteks ini:

1. Kemudahan Penggunaan: Python dirancang untuk mudah dipahami dan digunakan oleh pengembang pemula maupun berpengalaman. Bahasa ini memiliki sintaks yang bersih, sehingga memungkinkan pengembang untuk dengan cepat membuat skrip yang efisien dan fungsional.

2. Library dan Modul yang Kaya: Python menyediakan banyak library dan modul yang dapat membantu pengembang dalam mengendalikan administrative share. Salah satu library yang populer adalah “pywin32”, yang menyediakan API untuk mengakses WMI Protokol dan melakukan tugas-tugas administratif di sistem operasi Windows.

3. Portabilitas: Python dapat dijalankan di berbagai platform, termasuk Windows, MacOS, dan Linux. Hal ini memungkinkan pengembang untuk menggunakan skrip yang sama untuk mengendalikan administrative share pada berbagai jenis komputer dan server.

4. Fleksibilitas: Python sebagai bahasa pemrograman tingkat tinggi menyediakan banyak fitur dan dukungan yang dapat disesuaikan dengan kebutuhan pengembang. Pengguna dapat memanfaatkan kemampuan Python dalam memanipulasi berbagai jenis data dan melakukan tugas-tugas pemrosesan lainnya yang diperlukan dalam mengendalikan administrative share secara remote.

Dengan menggunakan Python, pengembang memperoleh alat yang kuat dan fleksibel untuk mengendalikan administrative share secara remote dengan WMI Protokol. Skrip Python dapat digunakan untuk mengotomatiskan tugas-tugas administratif, mengelola sumber daya jaringan, dan mempermudah pengelolaan sistem yang luas.

Berikut ini adalah full source code dari python script yang dimaksud:

import wmi
import winreg
import csv
import time
import datetime
import sys

def info(msg):
    print("[+] {}".format(msg))


def warning(msg):
    print("[!] {}".format(msg))


def restart_lanman_server(host):
    c = wmi.WMI(host)
    services = c.Win32_Service(Name='LanmanServer')
    
    if len(services) == 0:
        print("LanmanServer service not found.")
        return
    
    lanman_server = services[0]
    
    if lanman_server.State == 'Running':
        info("LanmanServer is running. Now restarting.")
        result = lanman_server.StopService()
        if result[0] == 0:
            info("LanmanServer stopped successfully")
            info("Restarting in 10 seconds...")
            time.sleep(10)  # Wait for 10 seconds
            result = lanman_server.StartService()
            if result[0] == 0:
                info("LanmanServer restarted successfully")
            else:
                warning("Failed to restart LanmanServer. Retrying...")
                time.sleep(10)  # Wait for another 10 seconds
                result = lanman_server.StartService()
                if result[0] == 0:
                    info("LanmanServer restarted successfully after retry")
                else:
                    warning("Failed to restart LanmanServer after retry")
        else:
            warning("Failed to stop LanmanServer")
    else:
        info("LanmanServer is not running. Now starting.")
        result = lanman_server.StartService()
        if result[0] == 0:
            info("LanmanServer restarted successfully")
        else:
            warning("Failed to restart LanmanServer")


def main(target, results, settingInput):
    # Mengnonaktifkan share setting
    if settingInput == "0":
        windows_type = 0
        try:
            conn = wmi.WMI(f"{target}")
            win_shares = conn.Win32_Share()
            win_OS = conn.Win32_OperatingSystem()
            windows_type = win_OS[0].ProductType

            print(f"\n[+] Scanning {target}")
            for instance in win_shares:
                share_name = instance.Name
                regstatus = None

                if share_name:
                    info(f"Administrative Shares {share_name} Enabled")
                    regstatus = 1  # Mark administrative share as enabled
                    break
                else:  
                    info(f"Administrative Shares Disabled")
                    regstatus = 0

            # Disabling shares with registry key
            if regstatus == 1:
                # Windows type 1 = Workstation. 2 = Domain controller. 3 = Server.
                if windows_type == 1:
                    try:
                        # Connect to the remote registry
                        remote_key = winreg.ConnectRegistry(
                            target, winreg.HKEY_LOCAL_MACHINE
                        )
                        # Open the registry key for writing
                        with winreg.OpenKey(
                            remote_key,
                            r"SYSTEM\CurrentControlSet\Services\lanmanserver\parameters",
                            0,
                            winreg.KEY_SET_VALUE,
                        ) as key:
                            # Set the registry value
                            winreg.SetValueEx(key, "AutoShareWks", 0, winreg.REG_DWORD, 0)
                        info("Registry key written successfully.")
                        info(f"Restarting LanmanServer on {target}")
                        regstatus = 2  # Mark regstatus as completed
                        # Restarting LanmanServer Service
                        restart_lanman_server(target)

                    except FileNotFoundError:
                        warning("FileNotFoundError: Registry key not found.")
                    except PermissionError:
                        warning(
                            "PermissionError: You might need administrator privileges to access the registry."
                        )
                    except Exception as e:
                        warning(f"An unexpected error occurred: {e}")
                else:
                    try:
                        # Connect to the remote registry
                        remote_key = winreg.ConnectRegistry(
                            target, winreg.HKEY_LOCAL_MACHINE
                        )
                        # Open the registry key for writing
                        with winreg.OpenKey(
                            remote_key,
                            r"SYSTEM\CurrentControlSet\Services\lanmanserver\parameters",
                            0,
                            winreg.KEY_SET_VALUE,
                        ) as key:
                            # Set the registry value
                            winreg.SetValueEx(
                                key, "AutoShareServer", 0, winreg.REG_DWORD, 0
                            )
                        info("Registry key written successfully.")
                        info(f"Restarting LanmanServer on {target}")
                        regstatus = 2  # Mark regstatus as completed
                        # Restarting LanmanServer Service
                        restart_lanman_server(target)

                    except FileNotFoundError:
                        warning("FileNotFoundError: Registry key not found.")
                    except PermissionError:
                        warning(
                            "PermissionError: You might need administrator privileges to access the registry."
                        )
                    except Exception as e:
                        warning(f"An unexpected error occurred: {e}")

            elif regstatus == 0:
                info(f"Administrative share already disabled on {target}")

            results.append(
                (
                    target,
                    "Enabled" if regstatus == 2 else "Administrative share is already disabled" if regstatus == 1 else "Administrative share is already disabled",
                    "Modified to disabled" if regstatus == 2 else "-",
                )
            )

            return results

        except wmi.x_wmi as x:
            if x.com_error.hresult == -2147023174:
                warning(f"Targeted host {target} is unreachable.")
                results.append(
                (
                    target,"Unreachable","Unreachable"
                )
            )
                return results
            else:
                warning(f"WMI Connection failed on {target}")
                results.append(
                (
                    target,"Unreachable","Unreachable"
                )
            )
                return results
    # Mengaktifkan share setting
    elif settingInput == "1":
        windows_type = 0
        try:
            conn = wmi.WMI(f"{target}")
            win_shares = conn.Win32_Share()
            win_OS = conn.Win32_OperatingSystem()
            windows_type = win_OS[0].ProductType

            print(f"\n[+] Scanning {target}")
            for instance in win_shares:
                share_name = instance.Name
                regstatus = None

                if share_name:
                    info(f"Administrative Shares {share_name}: Enabled")
                    regstatus = 1  # Mark administrative share as enabled
                else:
                    info(f"Administrative Shares Disabled")
                    regstatus = 0
                    break

            # Enabling shares with registry key
            if regstatus == 0:
                # Windows type 1 = Workstation. 2 = Domain controller. 3 = Server.
                if windows_type == 1:
                    try:
                        # Connect to the remote registry
                        remote_key = winreg.ConnectRegistry(
                            target, winreg.HKEY_LOCAL_MACHINE
                        )
                        # Open the registry key for writing
                        with winreg.OpenKey(
                            remote_key,
                            r"SYSTEM\CurrentControlSet\Services\lanmanserver\parameters",
                            0,
                            winreg.KEY_SET_VALUE,
                        ) as key:
                            # Set the registry value
                            winreg.SetValueEx(key, "AutoShareWks", 0, winreg.REG_DWORD, 1)
                        info("Registry key written successfully.")
                        info(f"Restarting LanmanServer on {target}")
                        regstatus = 2  # Mark regstatus as completed
                        # Restarting LanmanServer Service
                        restart_lanman_server(target)

                    except FileNotFoundError:
                        warning("FileNotFoundError: Registry key not found.")
                    except PermissionError:
                        warning(
                            "PermissionError: You might need administrator privileges to access the registry."
                        )
                    except Exception as e:
                        warning(f"An unexpected error occurred: {e}")
                else:
                    try:
                        # Connect to the remote registry
                        remote_key = winreg.ConnectRegistry(
                            target, winreg.HKEY_LOCAL_MACHINE
                        )
                        # Open the registry key for writing
                        with winreg.OpenKey(
                            remote_key,
                            r"SYSTEM\CurrentControlSet\Services\lanmanserver\parameters",
                            0,
                            winreg.KEY_SET_VALUE,
                        ) as key:
                            # Set the registry value
                            winreg.SetValueEx(
                                key, "AutoShareServer", 0, winreg.REG_DWORD, 1
                            )
                        info("Registry key written successfully.")
                        info(f"Restarting LanmanServer on {target}")
                        regstatus = 2  # Mark regstatus as completed
                        # Restarting LanmanServer Service
                        restart_lanman_server(target)

                    except FileNotFoundError:
                        warning("FileNotFoundError: Registry key not found.")
                    except PermissionError:
                        warning(
                            "PermissionError: You might need administrator privileges to access the registry."
                        )
                    except Exception as e:
                        warning(f"An unexpected error occurred: {e}")

            elif regstatus == 1:
                info(f"Administrative share already enabled on {target}")

            results.append(
                (
                    target,
                    "Disabled" if regstatus == 2 else "Administrative share is already enabled" if regstatus == 1 else "Administrative share is already enabled",
                    "Modified to enabled" if regstatus == 2 else "-",
                )
            )

            return results

        except wmi.x_wmi as x:
            if x.com_error.hresult == -2147023174:
                warning(f"Targeted host {target} is unreachable.")
                results.append(
                (
                    target,"Unreachable","Unreachable"
                )
            )
                return results
            else:
                warning(f"WMI Connection failed on {target}")
                results.append(
                (
                    target,"Unreachable","Unreachable"
                )
            )
                return results


if __name__ == "__main__":
    try:
        info("Starting Administrative Share Scan")
        hostnamesInput = sys.argv[1]
    except IndexError:
        warning("Argumen invalid!")
        warning(
        "Usage: python changeAdministrativeShare.py <hostnames text file>"
    )
        warning("Contoh: python changeAdministrativeShare.py hostnames.txt")
        sys.exit(1)
    
    print("Apakah mau mengaktifkan share settings atau mengnonaktifkan share settings? Ketik 1 untuk mengaktifkan Administrative Share. Ketik 0 untuk mengnonaktifkan Administrative Share.")
    settingInput = input()
    while True:
        if settingInput == '0' or settingInput == '1':
            break
        else:
            warning("Invalid input!")
            sys.exit(1)
     
    results = []   
    with open(hostnamesInput, "r") as i:
        targets = [line.strip() for line in i]
        for target in targets:
            results = main(target, results, settingInput)

    timestamp = datetime.datetime.now().strftime('%Y%m%d%H%M%S')
    output_filename = f"result-{timestamp}.csv"
    with open(output_filename, "w", newline="") as csvfile:
        csv_writer = csv.writer(csvfile)
        csv_writer.writerow(["Hostname", "Sharing Status", "Registry Key Status"])
        csv_writer.writerows(results)

Cara Menggunakan Script

Anda membuat satu file txt hostname.txt dimana pada file tersebut berisi daftar hostname yang akan dirubah status administrative share nya.

Saat menjalankan script, Anda akan ditanya, apakah Anda akan mematikan atau mengaktifkan administrative share yg dimaksud.

Menggunakan script Python dengan memanfaatkan WMI Protokol memberikan kemampuan untuk mematikan atau menyalakan administrative share secara remote pada beberapa komputer sekaligus. Hal ini memungkinkan kita untuk mengotomatiskan tugas administratif terkait dengan administrative share dan meningkatkan efisiensi dalam pengelolaan sistem.

Penting untuk diingat bahwa script ini harus dijalankan dengan hak akses administratif yang sesuai dan dengan hati-hati, karena perubahan pada administrative share dapat mempengaruhi akses dan keamanan sistem.

Python Script

Share This

Share This

Share this post with your friends!