Advanced HTTP testing framework as Burp Suite alternative
| 13279 | # ============================================================================ |
| 13280 | |
| 13281 | class HTTPTestingFramework: |
| 13282 | """Advanced HTTP testing framework as Burp Suite alternative""" |
| 13283 | |
| 13284 | def __init__(self): |
| 13285 | self.session = requests.Session() |
| 13286 | self.session.headers.update({ |
| 13287 | 'User-Agent': 'HexStrike-HTTP-Framework/1.0 (Advanced Security Testing)' |
| 13288 | }) |
| 13289 | self.proxy_history = [] |
| 13290 | self.vulnerabilities = [] |
| 13291 | self.match_replace_rules = [] # [{'where':'query|headers|body|url','pattern':'regex','replacement':'str'}] |
| 13292 | self.scope = None # {'host': 'example.com', 'include_subdomains': True} |
| 13293 | self._req_id = 0 |
| 13294 | |
| 13295 | def setup_proxy(self, proxy_port: int = 8080): |
| 13296 | """Setup HTTP proxy for request interception""" |
| 13297 | self.session.proxies = { |
| 13298 | 'http': f'http://127.0.0.1:{proxy_port}', |
| 13299 | 'https': f'http://127.0.0.1:{proxy_port}' |
| 13300 | } |
| 13301 | |
| 13302 | def intercept_request(self, url: str, method: str = 'GET', data: dict = None, |
| 13303 | headers: dict = None, cookies: dict = None) -> dict: |
| 13304 | """Intercept and analyze HTTP requests""" |
| 13305 | try: |
| 13306 | if headers: |
| 13307 | self.session.headers.update(headers) |
| 13308 | if cookies: |
| 13309 | self.session.cookies.update(cookies) |
| 13310 | |
| 13311 | # Apply match/replace rules prior to sending |
| 13312 | url, data, send_headers = self._apply_match_replace(url, data, dict(self.session.headers)) |
| 13313 | if headers: |
| 13314 | send_headers.update(headers) |
| 13315 | |
| 13316 | if method.upper() == 'GET': |
| 13317 | response = self.session.get(url, params=data, headers=send_headers, timeout=30) |
| 13318 | elif method.upper() == 'POST': |
| 13319 | response = self.session.post(url, data=data, headers=send_headers, timeout=30) |
| 13320 | elif method.upper() == 'PUT': |
| 13321 | response = self.session.put(url, data=data, headers=send_headers, timeout=30) |
| 13322 | elif method.upper() == 'DELETE': |
| 13323 | response = self.session.delete(url, headers=send_headers, timeout=30) |
| 13324 | else: |
| 13325 | response = self.session.request(method, url, data=data, headers=send_headers, timeout=30) |
| 13326 | |
| 13327 | # Store request/response in history |
| 13328 | self._req_id += 1 |
| 13329 | request_data = { |
| 13330 | 'id': self._req_id, |
| 13331 | 'url': url, |
| 13332 | 'method': method, |
| 13333 | 'headers': dict(response.request.headers), |
| 13334 | 'data': data, |
| 13335 | 'timestamp': datetime.now().isoformat() |
| 13336 | } |
| 13337 | |
| 13338 | response_data = { |