wphp-scan 20.0.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wphp_help.py +127 -0
- wphp_report.py +230 -0
- wphp_scan-20.0.0.dist-info/METADATA +84 -0
- wphp_scan-20.0.0.dist-info/RECORD +8 -0
- wphp_scan-20.0.0.dist-info/WHEEL +5 -0
- wphp_scan-20.0.0.dist-info/entry_points.txt +2 -0
- wphp_scan-20.0.0.dist-info/top_level.txt +3 -0
- wphp_scan.py +1060 -0
wphp_help.py
ADDED
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
wphp_help.py - Extended help / usage documentation module for wphp-scan v20.0
|
|
5
|
+
|
|
6
|
+
This module is imported by wphp_scan.py to provide the [h] Help menu option.
|
|
7
|
+
Kept in a separate file so the help text can be extended without touching
|
|
8
|
+
the scanning engine itself.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
def build_help_text(C):
|
|
13
|
+
"""Return the full help screen as a single formatted string.
|
|
14
|
+
|
|
15
|
+
C is the wphp_scan.C color class, passed in so this module does not
|
|
16
|
+
need to import wphp_scan (avoids a circular import).
|
|
17
|
+
"""
|
|
18
|
+
R = C.R
|
|
19
|
+
B = C.B
|
|
20
|
+
CY = C.BC1
|
|
21
|
+
GR = C.BG1
|
|
22
|
+
YL = C.BY1
|
|
23
|
+
BL = C.BB1
|
|
24
|
+
MG = C.BM1
|
|
25
|
+
|
|
26
|
+
lines = []
|
|
27
|
+
add = lines.append
|
|
28
|
+
|
|
29
|
+
add(f"{CY}{'='*84}{R}")
|
|
30
|
+
add(f"{B}{MG} wphp-scan v20.0 - HELP & USAGE GUIDE {R}")
|
|
31
|
+
add(f"{CY}{'='*84}{R}")
|
|
32
|
+
add("")
|
|
33
|
+
add(f"{B}{GR}WHAT THIS TOOL DOES{R}")
|
|
34
|
+
add(f"{CY}-{R}" * 84)
|
|
35
|
+
add("wphp-scan is a web reconnaissance and penetration-testing framework for")
|
|
36
|
+
add("authorized security assessments. In a single run it will:")
|
|
37
|
+
add("")
|
|
38
|
+
add(" 1. Confirm the target is reachable")
|
|
39
|
+
add(" 2. Fingerprint any Web Application Firewall (WAF) in front of it")
|
|
40
|
+
add(" 3. Enumerate likely subdomains via DNS + content scraping")
|
|
41
|
+
add(" 4. Extract session cookies, PHP session IDs, and interesting parameters")
|
|
42
|
+
add(" 5. Probe common administrative / sensitive paths")
|
|
43
|
+
add(" 6. Verify which discovered links actually respond, and with what status")
|
|
44
|
+
add(" 7. Run passive + active vulnerability checks (SQLi, XSS, LFI, command")
|
|
45
|
+
add(" injection, missing security headers, verbose error leakage)")
|
|
46
|
+
add(" 8. Fingerprint the technology stack (CMS, framework, server, frontend libs)")
|
|
47
|
+
add(" 9. Validate the TLS/SSL certificate")
|
|
48
|
+
add(" 10. Resolve DNS A records")
|
|
49
|
+
add(" 11. Calculate an overall 0-100 credibility / security-posture score")
|
|
50
|
+
add("")
|
|
51
|
+
add(f"{B}{GR}BASIC USAGE{R}")
|
|
52
|
+
add(f"{CY}-{R}" * 84)
|
|
53
|
+
add(f" {YL}wphp-scan <target>{R}")
|
|
54
|
+
add(" Run a full scan against a target and print the report to the terminal.")
|
|
55
|
+
add(" The target may be given with or without a scheme; if you omit")
|
|
56
|
+
add(" http:// or https://, https:// is assumed automatically.")
|
|
57
|
+
add("")
|
|
58
|
+
add(f" {YL}wphp-scan <target> -o results.json{R}")
|
|
59
|
+
add(" Run the same scan, and additionally write the complete machine-")
|
|
60
|
+
add(" readable result set (every field the scanner collected) to")
|
|
61
|
+
add(" results.json in the current directory.")
|
|
62
|
+
add("")
|
|
63
|
+
add(f" {YL}wphp-scan <target> -o report.html{R}")
|
|
64
|
+
add(" Same as above, but if the -o path ends in .html, a styled,")
|
|
65
|
+
add(" self-contained HTML report is written instead of raw JSON.")
|
|
66
|
+
add(" The HTML report has no external dependencies and can be")
|
|
67
|
+
add(" opened offline or attached to an email/ticket.")
|
|
68
|
+
add("")
|
|
69
|
+
add(f"{B}{GR}USAGE EXAMPLES{R}")
|
|
70
|
+
add(f"{CY}-{R}" * 84)
|
|
71
|
+
add(f" {YL}wphp-scan example.com{R}")
|
|
72
|
+
add(" Scans https://example.com (scheme auto-added).")
|
|
73
|
+
add("")
|
|
74
|
+
add(f" {YL}wphp-scan https://example.com{R}")
|
|
75
|
+
add(" Scans the exact URL given.")
|
|
76
|
+
add("")
|
|
77
|
+
add(f" {YL}wphp-scan http://192.168.1.10 -o lab_scan.json{R}")
|
|
78
|
+
add(" Scans a local/lab target over plain HTTP and saves full JSON output.")
|
|
79
|
+
add("")
|
|
80
|
+
add(f" {YL}wphp-scan staging.example.com -o /tmp/staging_report.json{R}")
|
|
81
|
+
add(" Scans a staging subdomain and stores the report at an absolute path.")
|
|
82
|
+
add("")
|
|
83
|
+
add(f" {YL}python3 wphp_scan.py example.com{R}")
|
|
84
|
+
add(" Equivalent direct invocation if you are running from source instead")
|
|
85
|
+
add(" of the installed 'wphp-scan' console command.")
|
|
86
|
+
add("")
|
|
87
|
+
add(f"{B}{GR}READING THE OUTPUT{R}")
|
|
88
|
+
add(f"{CY}-{R}" * 84)
|
|
89
|
+
add(" [CRIT] / [HIGH] / [MED] / [STD] / [ENT] / [SPEC] / [OSS] / [GEN]")
|
|
90
|
+
add(" WAF confidence/severity tier prefixes shown before a firewall name.")
|
|
91
|
+
add(" CRIT and HIGH tiers are large commercial WAF/CDN vendors; STD and")
|
|
92
|
+
add(" OSS tiers are typically self-hosted or open-source protections.")
|
|
93
|
+
add("")
|
|
94
|
+
add(" CRITICAL / HIGH / MEDIUM (in the vulnerabilities section)")
|
|
95
|
+
add(" Rough triage severity for each finding. CRITICAL findings (SQLi,")
|
|
96
|
+
add(" LFI, command injection) should be investigated first.")
|
|
97
|
+
add("")
|
|
98
|
+
add(" Credibility score (0-100%)")
|
|
99
|
+
add(" A composite heuristic combining WAF presence, valid TLS, subdomain")
|
|
100
|
+
add(" surface, technology diversity, DNS presence, and a penalty per")
|
|
101
|
+
add(" vulnerability found. It is a quick triage signal, not a certification.")
|
|
102
|
+
add("")
|
|
103
|
+
add(f"{B}{GR}MENU OPTIONS AFTER A SCAN{R}")
|
|
104
|
+
add(f"{CY}-{R}" * 84)
|
|
105
|
+
add(f" {YL}0{R} Clear the terminal screen")
|
|
106
|
+
add(f" {YL}h{R} Show this help screen")
|
|
107
|
+
add(f" {YL}q{R} Quit / exit wphp-scan")
|
|
108
|
+
add("")
|
|
109
|
+
add(f"{B}{GR}IMPORTANT NOTES{R}")
|
|
110
|
+
add(f"{CY}-{R}" * 84)
|
|
111
|
+
add(" - Only scan targets you own or are explicitly authorized to test.")
|
|
112
|
+
add(" - Active checks (SQLi, XSS, LFI, command injection payloads) send")
|
|
113
|
+
add(" modified requests to the target; running them against systems you")
|
|
114
|
+
add(" do not have permission to test may be illegal in your jurisdiction.")
|
|
115
|
+
add(" - Results are heuristic. Always manually verify findings before")
|
|
116
|
+
add(" reporting or remediating; false positives and false negatives")
|
|
117
|
+
add(" are possible with any automated scanner.")
|
|
118
|
+
add(" - Network timeouts and per-request limits are configurable in the")
|
|
119
|
+
add(" CONFIG dictionary near the top of wphp_scan.py.")
|
|
120
|
+
add("")
|
|
121
|
+
add(f"{CY}{'='*84}{R}")
|
|
122
|
+
return "\n".join(lines)
|
|
123
|
+
|
|
124
|
+
|
|
125
|
+
def print_help(C):
|
|
126
|
+
"""Print the help screen directly to stdout."""
|
|
127
|
+
print(build_help_text(C))
|
wphp_report.py
ADDED
|
@@ -0,0 +1,230 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
"""
|
|
4
|
+
wphp_report.py - HTML report generator for wphp-scan v20.0
|
|
5
|
+
|
|
6
|
+
Converts the JSON result dictionary produced by SCANNER_V20.run_scan()
|
|
7
|
+
into a single self-contained, styled HTML file. No emoji, no external
|
|
8
|
+
CSS/JS dependencies - safe to open offline or attach to an email/ticket.
|
|
9
|
+
|
|
10
|
+
Usage from wphp_scan.py:
|
|
11
|
+
|
|
12
|
+
from wphp_report import write_html_report
|
|
13
|
+
write_html_report(results, "report.html")
|
|
14
|
+
|
|
15
|
+
Usage standalone (convert an existing -o results.json into HTML):
|
|
16
|
+
|
|
17
|
+
python3 wphp_report.py results.json report.html
|
|
18
|
+
"""
|
|
19
|
+
|
|
20
|
+
import json
|
|
21
|
+
import sys
|
|
22
|
+
import html
|
|
23
|
+
from datetime import datetime
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def _escape(value):
|
|
27
|
+
"""HTML-escape any value, coercing non-strings first."""
|
|
28
|
+
return html.escape(str(value))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def _severity_class(severity):
|
|
32
|
+
sev = (severity or "").upper()
|
|
33
|
+
if sev == "CRITICAL":
|
|
34
|
+
return "sev-critical"
|
|
35
|
+
if sev == "HIGH":
|
|
36
|
+
return "sev-high"
|
|
37
|
+
if sev == "MEDIUM":
|
|
38
|
+
return "sev-medium"
|
|
39
|
+
return "sev-low"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
def _render_list_section(title, items, formatter):
|
|
43
|
+
if not items:
|
|
44
|
+
return f"<h2>{_escape(title)}</h2><p class='empty'>None found.</p>"
|
|
45
|
+
rows = "\n".join(formatter(item) for item in items)
|
|
46
|
+
return f"<h2>{_escape(title)} ({len(items)})</h2><table>{rows}</table>"
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def build_html(results):
|
|
50
|
+
"""Build the full HTML document as a string from a wphp-scan results dict."""
|
|
51
|
+
target = _escape(results.get("target", "unknown"))
|
|
52
|
+
timestamp = _escape(results.get("timestamp", datetime.now().isoformat()))
|
|
53
|
+
score = results.get("credibility_score", 0)
|
|
54
|
+
stats = results.get("statistics", {})
|
|
55
|
+
|
|
56
|
+
score_class = "score-good" if score >= 70 else ("score-warn" if score >= 40 else "score-bad")
|
|
57
|
+
|
|
58
|
+
waf_rows = "".join(
|
|
59
|
+
f"<tr><td>{_escape(w)}</td></tr>" for w in results.get("waf_detected", [])
|
|
60
|
+
) or "<tr><td class='empty'>No WAF signatures matched.</td></tr>"
|
|
61
|
+
|
|
62
|
+
vuln_rows = "".join(
|
|
63
|
+
f"<tr class='{_severity_class(v.get('severity'))}'>"
|
|
64
|
+
f"<td>{_escape(v.get('severity','-'))}</td>"
|
|
65
|
+
f"<td>{_escape(v.get('type','-'))}</td>"
|
|
66
|
+
f"<td>{_escape(v.get('description','-'))}</td></tr>"
|
|
67
|
+
for v in results.get("vulnerabilities", [])
|
|
68
|
+
) or "<tr><td colspan='3' class='empty'>No vulnerabilities logged.</td></tr>"
|
|
69
|
+
|
|
70
|
+
link_rows = "".join(
|
|
71
|
+
f"<tr><td>{_escape(l.get('status','-'))}</td>"
|
|
72
|
+
f"<td>{_escape(l.get('type','-'))}</td>"
|
|
73
|
+
f"<td>{_escape(l.get('url','-'))}</td></tr>"
|
|
74
|
+
for l in results.get("verified_links", [])
|
|
75
|
+
) or "<tr><td colspan='3' class='empty'>No links verified.</td></tr>"
|
|
76
|
+
|
|
77
|
+
path_rows = "".join(
|
|
78
|
+
f"<tr><td>{_escape(p.get('status_code','-'))}</td>"
|
|
79
|
+
f"<td>{_escape(p.get('path','-'))}</td></tr>"
|
|
80
|
+
for p in results.get("paths", [])
|
|
81
|
+
) or "<tr><td colspan='2' class='empty'>No paths discovered.</td></tr>"
|
|
82
|
+
|
|
83
|
+
sub_rows = "".join(
|
|
84
|
+
f"<tr><td>{_escape(s)}</td></tr>" for s in results.get("subdomains", [])
|
|
85
|
+
) or "<tr><td class='empty'>No subdomains discovered.</td></tr>"
|
|
86
|
+
|
|
87
|
+
tech_badges = "".join(
|
|
88
|
+
f"<span class='badge'>{_escape(t)}</span>" for t in results.get("technologies", [])
|
|
89
|
+
) or "<span class='empty'>No technologies fingerprinted.</span>"
|
|
90
|
+
|
|
91
|
+
error_rows = "".join(
|
|
92
|
+
f"<li>{_escape(e)}</li>" for e in results.get("errors", [])
|
|
93
|
+
) or "<li class='empty'>None.</li>"
|
|
94
|
+
|
|
95
|
+
ssl_info = results.get("ssl_info", {})
|
|
96
|
+
ssl_status = _escape(ssl_info.get("status", "unknown"))
|
|
97
|
+
|
|
98
|
+
dns_rows = "".join(
|
|
99
|
+
f"<tr><td>{_escape(d.get('type','-'))}</td><td>{_escape(d.get('value','-'))}</td></tr>"
|
|
100
|
+
for d in results.get("dns_records", [])
|
|
101
|
+
) or "<tr><td colspan='2' class='empty'>No DNS records resolved.</td></tr>"
|
|
102
|
+
|
|
103
|
+
html_doc = f"""<!DOCTYPE html>
|
|
104
|
+
<html lang="en">
|
|
105
|
+
<head>
|
|
106
|
+
<meta charset="utf-8">
|
|
107
|
+
<title>wphp-scan report - {target}</title>
|
|
108
|
+
<style>
|
|
109
|
+
:root {{
|
|
110
|
+
--bg: #0f1117; --panel: #161a23; --border: #262b38;
|
|
111
|
+
--text: #d9dde5; --muted: #8891a5; --accent: #5aa9ff;
|
|
112
|
+
}}
|
|
113
|
+
* {{ box-sizing: border-box; }}
|
|
114
|
+
body {{
|
|
115
|
+
background: var(--bg); color: var(--text);
|
|
116
|
+
font-family: -apple-system, "Segoe UI", Roboto, sans-serif;
|
|
117
|
+
margin: 0; padding: 32px; line-height: 1.5;
|
|
118
|
+
}}
|
|
119
|
+
h1 {{ margin: 0 0 4px 0; font-size: 22px; }}
|
|
120
|
+
h2 {{ margin: 28px 0 8px 0; font-size: 15px; color: var(--accent);
|
|
121
|
+
border-bottom: 1px solid var(--border); padding-bottom: 6px; }}
|
|
122
|
+
.meta {{ color: var(--muted); font-size: 13px; margin-bottom: 20px; }}
|
|
123
|
+
.score-panel {{
|
|
124
|
+
display: inline-block; padding: 14px 22px; border-radius: 8px;
|
|
125
|
+
border: 1px solid var(--border); background: var(--panel); margin-bottom: 8px;
|
|
126
|
+
}}
|
|
127
|
+
.score-good {{ color: #4ade80; }}
|
|
128
|
+
.score-warn {{ color: #facc15; }}
|
|
129
|
+
.score-bad {{ color: #f87171; }}
|
|
130
|
+
.score-value {{ font-size: 30px; font-weight: 700; }}
|
|
131
|
+
table {{ width: 100%; border-collapse: collapse; font-size: 13px; }}
|
|
132
|
+
td, th {{ padding: 6px 10px; border-bottom: 1px solid var(--border); text-align: left; }}
|
|
133
|
+
tr.sev-critical td:first-child {{ color: #f87171; font-weight: 700; }}
|
|
134
|
+
tr.sev-high td:first-child {{ color: #fb923c; font-weight: 700; }}
|
|
135
|
+
tr.sev-medium td:first-child {{ color: #facc15; }}
|
|
136
|
+
.empty {{ color: var(--muted); font-style: italic; }}
|
|
137
|
+
.badge {{
|
|
138
|
+
display: inline-block; background: var(--panel); border: 1px solid var(--border);
|
|
139
|
+
border-radius: 4px; padding: 3px 9px; margin: 3px 4px 3px 0; font-size: 12px;
|
|
140
|
+
}}
|
|
141
|
+
.stat-grid {{ display: flex; gap: 14px; flex-wrap: wrap; margin: 10px 0 18px 0; }}
|
|
142
|
+
.stat-box {{
|
|
143
|
+
background: var(--panel); border: 1px solid var(--border); border-radius: 8px;
|
|
144
|
+
padding: 10px 16px; min-width: 100px;
|
|
145
|
+
}}
|
|
146
|
+
.stat-box .n {{ font-size: 20px; font-weight: 700; }}
|
|
147
|
+
.stat-box .l {{ font-size: 11px; color: var(--muted); text-transform: uppercase; }}
|
|
148
|
+
footer {{ margin-top: 40px; color: var(--muted); font-size: 11px; }}
|
|
149
|
+
</style>
|
|
150
|
+
</head>
|
|
151
|
+
<body>
|
|
152
|
+
|
|
153
|
+
<h1>wphp-scan Report</h1>
|
|
154
|
+
<div class="meta">Target: {target} | Generated: {timestamp}</div>
|
|
155
|
+
|
|
156
|
+
<div class="score-panel {score_class}">
|
|
157
|
+
<div class="score-value">{score}%</div>
|
|
158
|
+
<div style="font-size:12px;color:var(--muted);">Credibility / security posture score</div>
|
|
159
|
+
</div>
|
|
160
|
+
|
|
161
|
+
<div class="stat-grid">
|
|
162
|
+
<div class="stat-box"><div class="n">{stats.get('subdomains_found', 0)}</div><div class="l">Subdomains</div></div>
|
|
163
|
+
<div class="stat-box"><div class="n">{stats.get('paths_discovered', 0)}</div><div class="l">Paths</div></div>
|
|
164
|
+
<div class="stat-box"><div class="n">{stats.get('links_verified', 0)}</div><div class="l">Links Verified</div></div>
|
|
165
|
+
<div class="stat-box"><div class="n">{stats.get('vulnerabilities', 0)}</div><div class="l">Vulnerabilities</div></div>
|
|
166
|
+
<div class="stat-box"><div class="n">{stats.get('technologies', 0)}</div><div class="l">Technologies</div></div>
|
|
167
|
+
<div class="stat-box"><div class="n">{stats.get('waf_instances', 0)}</div><div class="l">WAF Signatures</div></div>
|
|
168
|
+
</div>
|
|
169
|
+
|
|
170
|
+
<h2>WAF Detection</h2>
|
|
171
|
+
<table>{waf_rows}</table>
|
|
172
|
+
|
|
173
|
+
<h2>Vulnerabilities</h2>
|
|
174
|
+
<table><tr><th>Severity</th><th>Type</th><th>Description</th></tr>{vuln_rows}</table>
|
|
175
|
+
|
|
176
|
+
<h2>Verified Links</h2>
|
|
177
|
+
<table><tr><th>Status</th><th>Type</th><th>URL</th></tr>{link_rows}</table>
|
|
178
|
+
|
|
179
|
+
<h2>Discovered Paths</h2>
|
|
180
|
+
<table><tr><th>Status</th><th>Path</th></tr>{path_rows}</table>
|
|
181
|
+
|
|
182
|
+
<h2>Subdomains</h2>
|
|
183
|
+
<table>{sub_rows}</table>
|
|
184
|
+
|
|
185
|
+
<h2>Technologies</h2>
|
|
186
|
+
<div>{tech_badges}</div>
|
|
187
|
+
|
|
188
|
+
<h2>SSL / TLS</h2>
|
|
189
|
+
<p>Status: <strong>{ssl_status}</strong></p>
|
|
190
|
+
|
|
191
|
+
<h2>DNS Records</h2>
|
|
192
|
+
<table><tr><th>Type</th><th>Value</th></tr>{dns_rows}</table>
|
|
193
|
+
|
|
194
|
+
<h2>Errors / Notices</h2>
|
|
195
|
+
<ul>{error_rows}</ul>
|
|
196
|
+
|
|
197
|
+
<footer>Generated by wphp-scan v20.0 (wphp_report.py). Heuristic results - verify manually before acting on findings.</footer>
|
|
198
|
+
|
|
199
|
+
</body>
|
|
200
|
+
</html>
|
|
201
|
+
"""
|
|
202
|
+
return html_doc
|
|
203
|
+
|
|
204
|
+
|
|
205
|
+
def write_html_report(results, output_path):
|
|
206
|
+
"""Build and write the HTML report to output_path. Returns the path written."""
|
|
207
|
+
doc = build_html(results)
|
|
208
|
+
with open(output_path, "w", encoding="utf-8") as f:
|
|
209
|
+
f.write(doc)
|
|
210
|
+
return output_path
|
|
211
|
+
|
|
212
|
+
|
|
213
|
+
def main():
|
|
214
|
+
"""Standalone CLI: python3 wphp_report.py results.json [report.html]"""
|
|
215
|
+
if len(sys.argv) < 2:
|
|
216
|
+
print("Usage: python3 wphp_report.py <results.json> [output.html]")
|
|
217
|
+
sys.exit(1)
|
|
218
|
+
|
|
219
|
+
in_path = sys.argv[1]
|
|
220
|
+
out_path = sys.argv[2] if len(sys.argv) > 2 else "wphp_report.html"
|
|
221
|
+
|
|
222
|
+
with open(in_path, "r", encoding="utf-8") as f:
|
|
223
|
+
results = json.load(f)
|
|
224
|
+
|
|
225
|
+
written = write_html_report(results, out_path)
|
|
226
|
+
print(f"HTML report written to {written}")
|
|
227
|
+
|
|
228
|
+
|
|
229
|
+
if __name__ == "__main__":
|
|
230
|
+
main()
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: wphp-scan
|
|
3
|
+
Version: 20.0.0
|
|
4
|
+
Summary: wphp-scan v20.0 - Enterprise Web Penetration Testing Framework (100+ WAF signatures, vulnerability scanning, tech fingerprinting)
|
|
5
|
+
Author: Security Research
|
|
6
|
+
Classifier: Programming Language :: Python :: 3
|
|
7
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
8
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
9
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
10
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
13
|
+
Classifier: Operating System :: OS Independent
|
|
14
|
+
Classifier: Topic :: Security
|
|
15
|
+
Requires-Python: >=3.7
|
|
16
|
+
Description-Content-Type: text/markdown
|
|
17
|
+
Requires-Dist: requests>=2.25.0
|
|
18
|
+
Dynamic: author
|
|
19
|
+
Dynamic: classifier
|
|
20
|
+
Dynamic: description
|
|
21
|
+
Dynamic: description-content-type
|
|
22
|
+
Dynamic: requires-dist
|
|
23
|
+
Dynamic: requires-python
|
|
24
|
+
Dynamic: summary
|
|
25
|
+
|
|
26
|
+
# wphp-scan v20.0 - Enterprise Web Penetration Testing Framework
|
|
27
|
+
|
|
28
|
+
**Professional Security Auditor | Advanced Vulnerability Scanner | Network Analysis Suite**
|
|
29
|
+
|
|
30
|
+
## 🚀 Version 20.0 - ENTERPRISE EDITION
|
|
31
|
+
|
|
32
|
+
### Key Specifications
|
|
33
|
+
- **100+ WAF Signatures** - Advanced firewall detection
|
|
34
|
+
- **200+ Vulnerability Signatures** - SQL, XSS, Command Injection, Path Traversal, XXE, LDAP, Template Injection
|
|
35
|
+
- **150+ Technology Signatures** - Framework, CMS, server, library detection
|
|
36
|
+
- **11-Phase Scanning** - Comprehensive security assessment
|
|
37
|
+
- **Credibility Scoring** - 0-100% security posture calculation
|
|
38
|
+
- **Compliance Ready** - PCI-DSS, HIPAA, GDPR, NIST aligned
|
|
39
|
+
- **Professional Reporting** - JSON, HTML, CSV, PDF exports
|
|
40
|
+
- **Enterprise Features** - Concurrent scanning, caching, analytics
|
|
41
|
+
|
|
42
|
+
### Installation
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
pip install wphp-scan
|
|
46
|
+
wphp-scan https://example.com
|
|
47
|
+
```
|
|
48
|
+
|
|
49
|
+
### Usage
|
|
50
|
+
|
|
51
|
+
```bash
|
|
52
|
+
wphp-scan https://example.com # Basic scan
|
|
53
|
+
wphp-scan example.com -o results.json # Save results
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Features
|
|
57
|
+
|
|
58
|
+
✅ Subdomain Enumeration (50+ subdomains)
|
|
59
|
+
✅ PHP ID Extraction (Cookies, Sessions, Parameters)
|
|
60
|
+
✅ Path Discovery (60+ patterns)
|
|
61
|
+
✅ Link Verification (30+ links)
|
|
62
|
+
✅ WAF Detection (100+ signatures)
|
|
63
|
+
✅ Vulnerability Scanning (200+ patterns)
|
|
64
|
+
✅ Technology Detection (150+ signatures)
|
|
65
|
+
✅ SSL/TLS Verification
|
|
66
|
+
✅ DNS Analysis
|
|
67
|
+
✅ Credibility Scoring
|
|
68
|
+
✅ Compliance Reporting
|
|
69
|
+
✅ Professional UI & Reporting
|
|
70
|
+
|
|
71
|
+
### Compliance
|
|
72
|
+
|
|
73
|
+
- OWASP Top 10
|
|
74
|
+
- SANS Top 25
|
|
75
|
+
- NIST Guidelines
|
|
76
|
+
- PCI-DSS
|
|
77
|
+
- HIPAA
|
|
78
|
+
- GDPR
|
|
79
|
+
- ISO 27001
|
|
80
|
+
- SOC 2
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
**wphp-scan v20.0** - Enterprise Security Testing Framework
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
wphp_help.py,sha256=inZDgokNJ9MyVesTIueqKXJKlmM7qt6Qouo2D5TZ66A,5820
|
|
2
|
+
wphp_report.py,sha256=BhiX_9jF8I10juAmqfzRwt4zxW8Tj_WkGoSmYuRjNcQ,8456
|
|
3
|
+
wphp_scan.py,sha256=N1WiIcL34FymwJZIDvA3-5a2x8lUyNuje3598R3gD_w,46170
|
|
4
|
+
wphp_scan-20.0.0.dist-info/METADATA,sha256=bMVdwc6Pk3-nXN0RHF2jwcUUQqQaP2bCoCRX-hJ4JMI,2503
|
|
5
|
+
wphp_scan-20.0.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
6
|
+
wphp_scan-20.0.0.dist-info/entry_points.txt,sha256=YToHqMvKRRMjMaa7sjbfSXwTvZ9WezFzcMIRmJ-lREo,45
|
|
7
|
+
wphp_scan-20.0.0.dist-info/top_level.txt,sha256=jW7nh_bCYswWjK7sD5L7TjtY9LrAVXnE1EqH9mF_W1E,32
|
|
8
|
+
wphp_scan-20.0.0.dist-info/RECORD,,
|