66 lines
1.8 KiB
Python
66 lines
1.8 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import random
|
|
from wordlists import get_wordlists
|
|
|
|
|
|
def generate_server_error() -> tuple[str, str]:
|
|
wl = get_wordlists()
|
|
server_errors = wl.server_errors
|
|
|
|
if not server_errors:
|
|
return ("500 Internal Server Error", "text/html")
|
|
|
|
server_type = random.choice(list(server_errors.keys()))
|
|
server_config = server_errors[server_type]
|
|
|
|
error_codes = {
|
|
400: "Bad Request",
|
|
401: "Unauthorized",
|
|
403: "Forbidden",
|
|
404: "Not Found",
|
|
500: "Internal Server Error",
|
|
502: "Bad Gateway",
|
|
503: "Service Unavailable"
|
|
}
|
|
|
|
code = random.choice(list(error_codes.keys()))
|
|
message = error_codes[code]
|
|
|
|
template = server_config.get('template', '')
|
|
version = random.choice(server_config.get('versions', ['1.0']))
|
|
|
|
html = template.replace('{code}', str(code))
|
|
html = html.replace('{message}', message)
|
|
html = html.replace('{version}', version)
|
|
|
|
if server_type == 'apache':
|
|
os = random.choice(server_config.get('os', ['Ubuntu']))
|
|
html = html.replace('{os}', os)
|
|
html = html.replace('{host}', 'localhost')
|
|
|
|
return (html, "text/html")
|
|
|
|
|
|
def get_server_header(server_type: str = None) -> str:
|
|
wl = get_wordlists()
|
|
server_errors = wl.server_errors
|
|
|
|
if not server_errors:
|
|
return "nginx/1.18.0"
|
|
|
|
if not server_type:
|
|
server_type = random.choice(list(server_errors.keys()))
|
|
|
|
server_config = server_errors.get(server_type, {})
|
|
version = random.choice(server_config.get('versions', ['1.0']))
|
|
|
|
server_headers = {
|
|
'nginx': f"nginx/{version}",
|
|
'apache': f"Apache/{version}",
|
|
'iis': f"Microsoft-IIS/{version}",
|
|
'tomcat': f"Apache-Coyote/1.1"
|
|
}
|
|
|
|
return server_headers.get(server_type, "nginx/1.18.0")
|