auto_pentest/main.py

94 lines
2.5 KiB
Python
Raw Normal View History

2026-01-26 10:39:23 +01:00
import requests
from rich.table import Table
from bs4 import BeautifulSoup
import sys
from console import console
from rich.panel import Panel
from rich.layout import Layout
layout = Layout()
layout.split_column(
Layout(name="target"),
Layout(name="headers"),
Layout(name="cookies"),
Layout(name="scripts")
)
target = sys.argv[1]
wanted_headers = [
"Content-Security-Policy",
"X-Frame-Option",
"X-Content-Type-Options",
"Strict-Transport-Security",
"Referrer-Policy"
]
s = requests.Session()
with console.status("Making request..."):
base_session = s.get(target)
soup = BeautifulSoup(base_session.text, "html.parser")
redirect_string = ""
if len(base_session.history) > 0:
for history_item in base_session.history:
redirect_string += f" -> {history_item.url} ({history_item.status_code})"
redirect_string += f" -> {base_session.url} ({base_session.status_code})"
layout["target"].split(
Panel(target, title="Target"),
Panel(redirect_string, title="Request Chain")
)
base_headers = base_session.headers
header_string = ""
for wanted_header in wanted_headers:
if wanted_header not in base_headers.keys():
header_string += f"[red]- {wanted_header}\n"
else:
header_string+= f"[green]- {wanted_header}\n"
layout['headers'].split(
Panel(header_string, title="Headers")
)
if len(base_session.cookies) > 0:
cookie_table = Table()
cookie_table.add_column("Name", justify="right")
cookie_table.add_column("Secure")
cookie_table.add_column("HttpOnly")
cookie_table.add_column("SameSite")
for cookie in base_session.cookies:
is_secure_string = "[green]✓" if cookie.secure else "[red]X"
is_http_only_string = "[green]✓" if cookie.has_nonstandard_attr('HttpOnly') else "[red]X"
is_samesite_string = f"[green]✓ ({cookie.get_nonstandard_attr('SameSite')})" if cookie.has_nonstandard_attr('SameSite') else "[red]X"
cookie_table.add_row(cookie.name, is_secure_string, is_http_only_string, is_samesite_string)
cookie_panel = Panel(cookie_table, title="Cookies")
else:
cookie_panel = Panel("No Cookies", title="Cookies")
layout['cookies'].split(
cookie_panel
)
scripts_string = ""
script_tags = soup.find_all('script')
for script in script_tags:
if script.has_attr('src'):
if str(script['src']).startswith("http"):
if not script.has_attr("integrity"):
scripts_string += f"[red]{script}\n"
layout['scripts'].split(
Panel(scripts_string, title="Scripts")
)
console.print(layout)