@waftester/cli 2.8.0
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.
- package/LICENSE +80 -0
- package/LICENSE-COMMUNITY +28 -0
- package/README.md +121 -0
- package/bin/cli.js +152 -0
- package/package.json +52 -0
- package/payloads/community/README.md +45 -0
- package/payloads/community/ai/ml-poisoning.json +173 -0
- package/payloads/community/ai/prompt-injection.json +247 -0
- package/payloads/community/ai/workflow-abuse.json +222 -0
- package/payloads/community/auth/jwt.json +855 -0
- package/payloads/community/auth/login-bypass.json +623 -0
- package/payloads/community/auth/mfa.json +402 -0
- package/payloads/community/auth/oauth.json +421 -0
- package/payloads/community/auth/open-redirect.json +1028 -0
- package/payloads/community/auth/session.json +404 -0
- package/payloads/community/cache/deception.json +402 -0
- package/payloads/community/cache/poisoning.json +403 -0
- package/payloads/community/deserialization/gadget.json +375 -0
- package/payloads/community/deserialization/prototype.json +370 -0
- package/payloads/community/fuzz/content-type.json +397 -0
- package/payloads/community/fuzz/headers.json +401 -0
- package/payloads/community/fuzz/methods.json +397 -0
- package/payloads/community/fuzz/obfuscation.json +362 -0
- package/payloads/community/fuzz/special-chars.json +740 -0
- package/payloads/community/fuzz/waf-bypass.json +452 -0
- package/payloads/community/graphql/batching-abuse.json +271 -0
- package/payloads/community/graphql/depth-limit.json +271 -0
- package/payloads/community/graphql/introspection.json +267 -0
- package/payloads/community/injection/crlf.json +569 -0
- package/payloads/community/injection/ldap.json +357 -0
- package/payloads/community/injection/nosqli.json +529 -0
- package/payloads/community/injection/oscmd.json +662 -0
- package/payloads/community/injection/rce-polyglots.json +452 -0
- package/payloads/community/injection/sqli.json +681 -0
- package/payloads/community/injection/ssti.json +584 -0
- package/payloads/community/injection/upload-attacks.json +632 -0
- package/payloads/community/injection/xpath.json +357 -0
- package/payloads/community/injection/xxe.json +716 -0
- package/payloads/community/logic/forced-browsing.json +405 -0
- package/payloads/community/logic/idor.json +1026 -0
- package/payloads/community/logic/privilege.json +337 -0
- package/payloads/community/media/exif-injection.json +225 -0
- package/payloads/community/media/metadata-poison.json +239 -0
- package/payloads/community/protocol/http-smuggling.json +798 -0
- package/payloads/community/protocol/http2-attacks.json +382 -0
- package/payloads/community/protocol/websocket-abuse.json +375 -0
- package/payloads/community/rate-limit/burst-simulation.json +286 -0
- package/payloads/community/rate-limit/bypass-attempts.json +326 -0
- package/payloads/community/rate-limit/zone-tests.json +332 -0
- package/payloads/community/services/authentik.json +415 -0
- package/payloads/community/services/immich.json +423 -0
- package/payloads/community/services/n8n.json +366 -0
- package/payloads/community/sqli-basic.json +182 -0
- package/payloads/community/ssrf/cloud-metadata.json +999 -0
- package/payloads/community/ssrf/dns-rebinding.json +503 -0
- package/payloads/community/ssrf/internal-networks.json +627 -0
- package/payloads/community/ssrf/protocol-smuggling.json +350 -0
- package/payloads/community/ssti/multi-language-templates.json +191 -0
- package/payloads/community/ssti/python-templates.json +200 -0
- package/payloads/community/traversal/basic.json +675 -0
- package/payloads/community/traversal/cloud-credentials.json +107 -0
- package/payloads/community/traversal/config-files.json +193 -0
- package/payloads/community/traversal/encoding.json +558 -0
- package/payloads/community/traversal/null-byte.json +105 -0
- package/payloads/community/traversal/symlink.json +93 -0
- package/payloads/community/traversal/unicode.json +134 -0
- package/payloads/community/traversal/unix-advanced.json +195 -0
- package/payloads/community/traversal/windows-advanced.json +195 -0
- package/payloads/community/waf-bypass/cloudflare-bypass.json +102 -0
- package/payloads/community/waf-bypass/encoding-bypass.json +120 -0
- package/payloads/community/waf-bypass/evasion-techniques.json +164 -0
- package/payloads/community/waf-bypass/hpp-bypass.json +92 -0
- package/payloads/community/waf-bypass/modsecurity-crs.json +220 -0
- package/payloads/community/waf-bypass/protocol-attacks.json +101 -0
- package/payloads/community/waf-bypass/sqlmap-tamper.json +252 -0
- package/payloads/community/waf-bypass/unicode-charset.json +152 -0
- package/payloads/community/waf-bypass/vendor-bypasses.json +72 -0
- package/payloads/community/waf-validation/README.md +172 -0
- package/payloads/community/waf-validation/bypass-techniques.json +272 -0
- package/payloads/community/waf-validation/custom-rules.json +952 -0
- package/payloads/community/waf-validation/evasion-techniques.json +272 -0
- package/payloads/community/waf-validation/modsecurity-core.json +151 -0
- package/payloads/community/waf-validation/owasp-top10.json +236 -0
- package/payloads/community/waf-validation/regression-tests.json +227 -0
- package/payloads/community/xss/csp-bypass.json +431 -0
- package/payloads/community/xss/dom.json +389 -0
- package/payloads/community/xss/filter-bypass.json +1242 -0
- package/payloads/community/xss/mutation.json +263 -0
- package/payloads/community/xss/polyglots.json +371 -0
- package/payloads/community/xss/reflected.json +187 -0
- package/payloads/community/xss/stored.json +330 -0
- package/payloads/crlf-injection.json +182 -0
- package/payloads/ids-map.json +155 -0
- package/payloads/ldap-injection.json +182 -0
- package/payloads/nosql-injection.json +227 -0
- package/payloads/prototype-pollution.json +182 -0
- package/payloads/request-smuggling.json +182 -0
- package/payloads/version.json +28 -0
- package/payloads/xss-advanced.json +227 -0
- package/templates/README.md +221 -0
- package/templates/nuclei/http/waf-bypass/crlf-bypass.yaml +146 -0
- package/templates/nuclei/http/waf-bypass/lfi-bypass.yaml +152 -0
- package/templates/nuclei/http/waf-bypass/nosqli-bypass.yaml +166 -0
- package/templates/nuclei/http/waf-bypass/rce-bypass.yaml +171 -0
- package/templates/nuclei/http/waf-bypass/sqli-basic.yaml +142 -0
- package/templates/nuclei/http/waf-bypass/sqli-evasion.yaml +192 -0
- package/templates/nuclei/http/waf-bypass/ssrf-bypass.yaml +130 -0
- package/templates/nuclei/http/waf-bypass/ssti-bypass.yaml +147 -0
- package/templates/nuclei/http/waf-bypass/xss-basic.yaml +163 -0
- package/templates/nuclei/http/waf-bypass/xss-evasion.yaml +217 -0
- package/templates/nuclei/http/waf-bypass/xxe-bypass.yaml +204 -0
- package/templates/nuclei/http/waf-detection/akamai-detect.yaml +105 -0
- package/templates/nuclei/http/waf-detection/aws-waf-detect.yaml +115 -0
- package/templates/nuclei/http/waf-detection/azure-waf-detect.yaml +114 -0
- package/templates/nuclei/http/waf-detection/cloudflare-detect.yaml +121 -0
- package/templates/nuclei/http/waf-detection/modsecurity-detect.yaml +129 -0
- package/templates/nuclei/workflows/waf-assessment-workflow.yaml +71 -0
- package/templates/output/asff.tmpl +61 -0
- package/templates/output/csv.tmpl +4 -0
- package/templates/output/junit.tmpl +34 -0
- package/templates/output/markdown-report.tmpl +92 -0
- package/templates/output/slack-notification.tmpl +95 -0
- package/templates/output/text-summary.tmpl +56 -0
- package/templates/overrides/api-only.yaml +130 -0
- package/templates/overrides/crs-tuning.yaml +204 -0
- package/templates/overrides/false-positive-suppression.yaml +159 -0
- package/templates/policies/owasp-top10.yaml +152 -0
- package/templates/policies/pci-dss.yaml +124 -0
- package/templates/policies/permissive.yaml +40 -0
- package/templates/policies/standard.yaml +57 -0
- package/templates/policies/strict.yaml +72 -0
- package/templates/report-configs/compliance.yaml +173 -0
- package/templates/report-configs/dark.yaml +136 -0
- package/templates/report-configs/enterprise.yaml +175 -0
- package/templates/report-configs/minimal.yaml +84 -0
- package/templates/report-configs/print.yaml +139 -0
- package/templates/workflows/api-scan.yaml +132 -0
- package/templates/workflows/ci-gate.yaml +129 -0
- package/templates/workflows/full-scan.yaml +133 -0
- package/templates/workflows/quick-probe.yaml +80 -0
- package/templates/workflows/waf-detection.yaml +89 -0
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
# WAFtester Print-Optimized Report Configuration
|
|
2
|
+
# Designed for physical printing and PDF export
|
|
3
|
+
# Clean black-and-white with high readability
|
|
4
|
+
|
|
5
|
+
name: print
|
|
6
|
+
description: "Print-optimized report with clean layout for PDF export and physical printing"
|
|
7
|
+
version: "2.0.0"
|
|
8
|
+
|
|
9
|
+
branding:
|
|
10
|
+
title: "WAF Security Assessment Report"
|
|
11
|
+
subtitle: ""
|
|
12
|
+
logo: ""
|
|
13
|
+
company: ""
|
|
14
|
+
footer: "Generated by WAFtester"
|
|
15
|
+
|
|
16
|
+
layout:
|
|
17
|
+
max_width: 900
|
|
18
|
+
orientation: portrait
|
|
19
|
+
page_size: A4
|
|
20
|
+
compact: false
|
|
21
|
+
table_of_contents: true
|
|
22
|
+
page_numbers: true
|
|
23
|
+
page_breaks_between_sections: true
|
|
24
|
+
|
|
25
|
+
sections:
|
|
26
|
+
- id: cover_page
|
|
27
|
+
title: "Cover"
|
|
28
|
+
enabled: true
|
|
29
|
+
fields:
|
|
30
|
+
- title
|
|
31
|
+
- target
|
|
32
|
+
- timestamp
|
|
33
|
+
- company
|
|
34
|
+
|
|
35
|
+
- id: executive_summary
|
|
36
|
+
title: "Executive Summary"
|
|
37
|
+
enabled: true
|
|
38
|
+
fields:
|
|
39
|
+
- target
|
|
40
|
+
- timestamp
|
|
41
|
+
- duration
|
|
42
|
+
- total_tests
|
|
43
|
+
- blocked
|
|
44
|
+
- bypassed
|
|
45
|
+
- errors
|
|
46
|
+
- effectiveness
|
|
47
|
+
- grade
|
|
48
|
+
- highest_severity
|
|
49
|
+
|
|
50
|
+
- id: severity_chart
|
|
51
|
+
title: "Severity Distribution"
|
|
52
|
+
enabled: true
|
|
53
|
+
chart_type: "bar"
|
|
54
|
+
|
|
55
|
+
- id: category_breakdown
|
|
56
|
+
title: "Category Results"
|
|
57
|
+
enabled: true
|
|
58
|
+
chart_type: "table"
|
|
59
|
+
|
|
60
|
+
- id: bypasses
|
|
61
|
+
title: "WAF Bypass Findings"
|
|
62
|
+
enabled: true
|
|
63
|
+
max_items: 50
|
|
64
|
+
sort_by: "severity"
|
|
65
|
+
sort_order: "desc"
|
|
66
|
+
fields:
|
|
67
|
+
- id
|
|
68
|
+
- category
|
|
69
|
+
- severity
|
|
70
|
+
- name
|
|
71
|
+
- url
|
|
72
|
+
- method
|
|
73
|
+
- status_code
|
|
74
|
+
- outcome
|
|
75
|
+
- payload
|
|
76
|
+
- owasp_link
|
|
77
|
+
- cwe_link
|
|
78
|
+
|
|
79
|
+
- id: recommendations
|
|
80
|
+
title: "Remediation Recommendations"
|
|
81
|
+
enabled: true
|
|
82
|
+
priority_order: true
|
|
83
|
+
|
|
84
|
+
- id: detailed_results
|
|
85
|
+
title: "Complete Test Results"
|
|
86
|
+
enabled: true
|
|
87
|
+
paginate: true
|
|
88
|
+
page_size: 40
|
|
89
|
+
|
|
90
|
+
- id: appendix
|
|
91
|
+
title: "Appendix"
|
|
92
|
+
enabled: true
|
|
93
|
+
include_raw_payloads: false
|
|
94
|
+
include_methodology: true
|
|
95
|
+
|
|
96
|
+
styling:
|
|
97
|
+
theme: "print"
|
|
98
|
+
font_family: "'Georgia', 'Times New Roman', serif"
|
|
99
|
+
font_size: "11pt"
|
|
100
|
+
heading_font: "'Arial', 'Helvetica', sans-serif"
|
|
101
|
+
code_font: "'Courier New', 'Courier', monospace"
|
|
102
|
+
line_height: "1.6"
|
|
103
|
+
colors:
|
|
104
|
+
primary: "#000000"
|
|
105
|
+
secondary: "#333333"
|
|
106
|
+
success: "#000000"
|
|
107
|
+
warning: "#000000"
|
|
108
|
+
danger: "#000000"
|
|
109
|
+
background: "#ffffff"
|
|
110
|
+
text: "#000000"
|
|
111
|
+
border: "#666666"
|
|
112
|
+
header_bg: "#f0f0f0"
|
|
113
|
+
alt_row: "#f9f9f9"
|
|
114
|
+
severity_markers:
|
|
115
|
+
critical: "[!!!]"
|
|
116
|
+
high: "[!!]"
|
|
117
|
+
medium: "[!]"
|
|
118
|
+
low: "[.]"
|
|
119
|
+
info: "[-]"
|
|
120
|
+
|
|
121
|
+
charts:
|
|
122
|
+
enabled: true
|
|
123
|
+
renderer: "svg"
|
|
124
|
+
width: 450
|
|
125
|
+
height: 300
|
|
126
|
+
grayscale: true
|
|
127
|
+
types:
|
|
128
|
+
- severity_bar
|
|
129
|
+
- category_table
|
|
130
|
+
|
|
131
|
+
export:
|
|
132
|
+
formats:
|
|
133
|
+
- pdf
|
|
134
|
+
- html
|
|
135
|
+
include_raw_data: false
|
|
136
|
+
compress: false
|
|
137
|
+
embed_images: true
|
|
138
|
+
grayscale_images: true
|
|
139
|
+
max_file_size_mb: 20
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
# WAFtester API Security Scan Workflow
|
|
2
|
+
# Comprehensive API security testing with OpenAPI/Swagger support
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# waf-tester workflow run templates/workflows/api-scan.yaml \
|
|
6
|
+
# --input target=https://api.example.com \
|
|
7
|
+
# --input openapi_spec=./openapi.yaml \
|
|
8
|
+
# --input auth_header="Bearer eyJ..."
|
|
9
|
+
|
|
10
|
+
name: api-scan
|
|
11
|
+
description: "API-focused security assessment with OpenAPI schema discovery and auth-aware scanning"
|
|
12
|
+
version: "2.0.0"
|
|
13
|
+
tags:
|
|
14
|
+
- api
|
|
15
|
+
- openapi
|
|
16
|
+
- swagger
|
|
17
|
+
- rest
|
|
18
|
+
- security
|
|
19
|
+
|
|
20
|
+
inputs:
|
|
21
|
+
- name: target
|
|
22
|
+
description: API base URL
|
|
23
|
+
required: true
|
|
24
|
+
- name: openapi_spec
|
|
25
|
+
description: Path to OpenAPI/Swagger specification
|
|
26
|
+
required: false
|
|
27
|
+
- name: auth_header
|
|
28
|
+
description: Authorization header value (e.g., Bearer token)
|
|
29
|
+
required: false
|
|
30
|
+
- name: output_dir
|
|
31
|
+
description: Output directory
|
|
32
|
+
default: "./results"
|
|
33
|
+
- name: rate_limit
|
|
34
|
+
description: Requests per second limit
|
|
35
|
+
default: "20"
|
|
36
|
+
- name: concurrency
|
|
37
|
+
description: Number of concurrent workers
|
|
38
|
+
default: "10"
|
|
39
|
+
- name: scan_types
|
|
40
|
+
description: Security categories to test
|
|
41
|
+
default: "sqli,nosqli,xss,ssrf,idor,massassignment,bola,bfla"
|
|
42
|
+
|
|
43
|
+
steps:
|
|
44
|
+
- id: detect
|
|
45
|
+
name: Detect WAF on API endpoint
|
|
46
|
+
command: wafdetect
|
|
47
|
+
args:
|
|
48
|
+
- "-u"
|
|
49
|
+
- "{{.target}}"
|
|
50
|
+
- "-o"
|
|
51
|
+
- "{{.output_dir}}/api-waf-detection.json"
|
|
52
|
+
- "--json"
|
|
53
|
+
|
|
54
|
+
- id: fingerprint
|
|
55
|
+
name: Fingerprint WAF and API gateway
|
|
56
|
+
command: waffprint
|
|
57
|
+
args:
|
|
58
|
+
- "-u"
|
|
59
|
+
- "{{.target}}"
|
|
60
|
+
- "-o"
|
|
61
|
+
- "{{.output_dir}}/api-fingerprint.json"
|
|
62
|
+
- "--json"
|
|
63
|
+
|
|
64
|
+
- id: discover
|
|
65
|
+
name: Discover API endpoints
|
|
66
|
+
command: discover
|
|
67
|
+
args:
|
|
68
|
+
- "-u"
|
|
69
|
+
- "{{.target}}"
|
|
70
|
+
- "--openapi"
|
|
71
|
+
- "{{.openapi_spec}}"
|
|
72
|
+
- "-o"
|
|
73
|
+
- "{{.output_dir}}/api-endpoints.json"
|
|
74
|
+
|
|
75
|
+
- id: calibrate
|
|
76
|
+
name: Calibrate scanner to API responses
|
|
77
|
+
command: calibrate
|
|
78
|
+
args:
|
|
79
|
+
- "-u"
|
|
80
|
+
- "{{.target}}"
|
|
81
|
+
- "-o"
|
|
82
|
+
- "{{.output_dir}}/api-calibration.json"
|
|
83
|
+
condition: "steps.detect.success"
|
|
84
|
+
|
|
85
|
+
- id: scan
|
|
86
|
+
name: Run API security tests
|
|
87
|
+
command: run
|
|
88
|
+
args:
|
|
89
|
+
- "-u"
|
|
90
|
+
- "{{.target}}"
|
|
91
|
+
- "-s"
|
|
92
|
+
- "{{.scan_types}}"
|
|
93
|
+
- "-c"
|
|
94
|
+
- "{{.concurrency}}"
|
|
95
|
+
- "--rate-limit"
|
|
96
|
+
- "{{.rate_limit}}"
|
|
97
|
+
- "--header"
|
|
98
|
+
- "Authorization: {{.auth_header}}"
|
|
99
|
+
- "--header"
|
|
100
|
+
- "Content-Type: application/json"
|
|
101
|
+
- "--overrides"
|
|
102
|
+
- "templates/overrides/api-only.yaml"
|
|
103
|
+
- "-o"
|
|
104
|
+
- "json"
|
|
105
|
+
- "--output-file"
|
|
106
|
+
- "{{.output_dir}}/api-results.json"
|
|
107
|
+
condition: "steps.detect.success"
|
|
108
|
+
|
|
109
|
+
- id: report_json
|
|
110
|
+
name: Generate JSON report
|
|
111
|
+
command: report
|
|
112
|
+
args:
|
|
113
|
+
- "-i"
|
|
114
|
+
- "{{.output_dir}}/api-results.json"
|
|
115
|
+
- "-o"
|
|
116
|
+
- "{{.output_dir}}/api-report.json"
|
|
117
|
+
- "-f"
|
|
118
|
+
- "json"
|
|
119
|
+
|
|
120
|
+
- id: report_html
|
|
121
|
+
name: Generate HTML report
|
|
122
|
+
command: report
|
|
123
|
+
args:
|
|
124
|
+
- "-i"
|
|
125
|
+
- "{{.output_dir}}/api-results.json"
|
|
126
|
+
- "-o"
|
|
127
|
+
- "{{.output_dir}}/api-report.html"
|
|
128
|
+
- "-f"
|
|
129
|
+
- "html"
|
|
130
|
+
- "--template-config"
|
|
131
|
+
- "templates/report-configs/enterprise.yaml"
|
|
132
|
+
condition: "steps.scan.success"
|
|
@@ -0,0 +1,129 @@
|
|
|
1
|
+
# WAFtester CI/CD Gate Workflow
|
|
2
|
+
# Automated security gate for CI/CD pipelines with pass/fail verdict
|
|
3
|
+
# Outputs SARIF for GitHub Advanced Security and JUnit for CI integration
|
|
4
|
+
#
|
|
5
|
+
# Usage:
|
|
6
|
+
# waf-tester workflow run templates/workflows/ci-gate.yaml \
|
|
7
|
+
# --input target=https://staging.example.com \
|
|
8
|
+
# --input policy=templates/policies/strict.yaml
|
|
9
|
+
|
|
10
|
+
name: ci-gate
|
|
11
|
+
description: "CI/CD security gate with dual SARIF+JUnit output, policy enforcement, and pass/fail exit code"
|
|
12
|
+
version: "2.0.0"
|
|
13
|
+
tags:
|
|
14
|
+
- ci
|
|
15
|
+
- cd
|
|
16
|
+
- pipeline
|
|
17
|
+
- gate
|
|
18
|
+
- automation
|
|
19
|
+
- sarif
|
|
20
|
+
- junit
|
|
21
|
+
|
|
22
|
+
inputs:
|
|
23
|
+
- name: target
|
|
24
|
+
description: Target URL to test (typically a staging environment)
|
|
25
|
+
required: true
|
|
26
|
+
- name: policy
|
|
27
|
+
description: Security policy to enforce
|
|
28
|
+
default: "templates/policies/standard.yaml"
|
|
29
|
+
- name: output_dir
|
|
30
|
+
description: Output directory for reports
|
|
31
|
+
default: "./security-results"
|
|
32
|
+
- name: output_format
|
|
33
|
+
description: Primary output format (sarif, junit, json)
|
|
34
|
+
default: "sarif"
|
|
35
|
+
- name: concurrency
|
|
36
|
+
description: Number of concurrent workers
|
|
37
|
+
default: "20"
|
|
38
|
+
- name: rate_limit
|
|
39
|
+
description: Requests per second limit
|
|
40
|
+
default: "50"
|
|
41
|
+
- name: scan_types
|
|
42
|
+
description: Security scan categories
|
|
43
|
+
default: "sqli,xss,rce,ssrf,lfi,ssti"
|
|
44
|
+
- name: fail_on_bypass
|
|
45
|
+
description: Fail pipeline on any bypass found
|
|
46
|
+
default: "true"
|
|
47
|
+
- name: severity_threshold
|
|
48
|
+
description: Minimum severity to trigger failure (critical, high, medium, low)
|
|
49
|
+
default: "high"
|
|
50
|
+
|
|
51
|
+
steps:
|
|
52
|
+
- id: detect
|
|
53
|
+
name: Detect WAF presence
|
|
54
|
+
command: wafdetect
|
|
55
|
+
args:
|
|
56
|
+
- "-u"
|
|
57
|
+
- "{{.target}}"
|
|
58
|
+
- "-o"
|
|
59
|
+
- "{{.output_dir}}/waf-detection.json"
|
|
60
|
+
- "--json"
|
|
61
|
+
|
|
62
|
+
- id: calibrate
|
|
63
|
+
name: Calibrate scanner
|
|
64
|
+
command: calibrate
|
|
65
|
+
args:
|
|
66
|
+
- "-u"
|
|
67
|
+
- "{{.target}}"
|
|
68
|
+
- "-o"
|
|
69
|
+
- "{{.output_dir}}/calibration.json"
|
|
70
|
+
condition: "steps.detect.success"
|
|
71
|
+
|
|
72
|
+
- id: scan
|
|
73
|
+
name: Run security scan
|
|
74
|
+
command: run
|
|
75
|
+
args:
|
|
76
|
+
- "-u"
|
|
77
|
+
- "{{.target}}"
|
|
78
|
+
- "-s"
|
|
79
|
+
- "{{.scan_types}}"
|
|
80
|
+
- "-c"
|
|
81
|
+
- "{{.concurrency}}"
|
|
82
|
+
- "--rate-limit"
|
|
83
|
+
- "{{.rate_limit}}"
|
|
84
|
+
- "--policy"
|
|
85
|
+
- "{{.policy}}"
|
|
86
|
+
- "--severity"
|
|
87
|
+
- "{{.severity_threshold}}"
|
|
88
|
+
- "-o"
|
|
89
|
+
- "json"
|
|
90
|
+
- "--output-file"
|
|
91
|
+
- "{{.output_dir}}/scan-results.json"
|
|
92
|
+
condition: "steps.detect.success"
|
|
93
|
+
|
|
94
|
+
- id: report_sarif
|
|
95
|
+
name: Generate SARIF report for GitHub Advanced Security
|
|
96
|
+
command: report
|
|
97
|
+
args:
|
|
98
|
+
- "-i"
|
|
99
|
+
- "{{.output_dir}}/scan-results.json"
|
|
100
|
+
- "-o"
|
|
101
|
+
- "{{.output_dir}}/results.sarif"
|
|
102
|
+
- "-f"
|
|
103
|
+
- "sarif"
|
|
104
|
+
|
|
105
|
+
- id: report_junit
|
|
106
|
+
name: Generate JUnit report for CI dashboard
|
|
107
|
+
command: report
|
|
108
|
+
args:
|
|
109
|
+
- "-i"
|
|
110
|
+
- "{{.output_dir}}/scan-results.json"
|
|
111
|
+
- "-o"
|
|
112
|
+
- "{{.output_dir}}/results.xml"
|
|
113
|
+
- "-f"
|
|
114
|
+
- "junit"
|
|
115
|
+
|
|
116
|
+
- id: gate
|
|
117
|
+
name: Evaluate security policy pass/fail
|
|
118
|
+
command: evaluate
|
|
119
|
+
args:
|
|
120
|
+
- "-i"
|
|
121
|
+
- "{{.output_dir}}/scan-results.json"
|
|
122
|
+
- "--policy"
|
|
123
|
+
- "{{.policy}}"
|
|
124
|
+
- "--fail-on-bypass"
|
|
125
|
+
- "{{.fail_on_bypass}}"
|
|
126
|
+
- "--severity"
|
|
127
|
+
- "{{.severity_threshold}}"
|
|
128
|
+
- "--exit-code"
|
|
129
|
+
condition: "steps.scan.success"
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
# WAFtester Full Security Scan Workflow
|
|
2
|
+
# Complete security assessment: detect > learn > calibrate > scan > report
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# waf-tester workflow run templates/workflows/full-scan.yaml --input target=https://example.com
|
|
6
|
+
|
|
7
|
+
name: full-scan
|
|
8
|
+
description: "Complete security scan: discover > learn > calibrate > scan > report"
|
|
9
|
+
version: "2.0.0"
|
|
10
|
+
tags:
|
|
11
|
+
- security
|
|
12
|
+
- complete
|
|
13
|
+
- production
|
|
14
|
+
- enterprise
|
|
15
|
+
|
|
16
|
+
inputs:
|
|
17
|
+
- name: target
|
|
18
|
+
description: Target URL to scan
|
|
19
|
+
required: true
|
|
20
|
+
- name: output_dir
|
|
21
|
+
description: Output directory for results
|
|
22
|
+
default: "./results"
|
|
23
|
+
- name: concurrency
|
|
24
|
+
description: Number of concurrent requests
|
|
25
|
+
default: "50"
|
|
26
|
+
- name: rate_limit
|
|
27
|
+
description: Requests per second limit
|
|
28
|
+
default: "10"
|
|
29
|
+
- name: policy
|
|
30
|
+
description: Policy file for pass/fail evaluation
|
|
31
|
+
default: "templates/policies/standard.yaml"
|
|
32
|
+
- name: scan_types
|
|
33
|
+
description: "Comma-separated scan types (sqli,xss,rce,ssrf,lfi,ssti,xxe,cmdi,nosqli,crlf or all)"
|
|
34
|
+
default: "all"
|
|
35
|
+
|
|
36
|
+
steps:
|
|
37
|
+
- id: detect
|
|
38
|
+
name: Detect WAF presence and vendor
|
|
39
|
+
command: wafdetect
|
|
40
|
+
args:
|
|
41
|
+
- "-u"
|
|
42
|
+
- "{{.target}}"
|
|
43
|
+
- "-o"
|
|
44
|
+
- "{{.output_dir}}/waf-detection.json"
|
|
45
|
+
- "--json"
|
|
46
|
+
|
|
47
|
+
- id: fingerprint
|
|
48
|
+
name: Fingerprint WAF technology stack
|
|
49
|
+
command: waffprint
|
|
50
|
+
args:
|
|
51
|
+
- "-u"
|
|
52
|
+
- "{{.target}}"
|
|
53
|
+
- "-o"
|
|
54
|
+
- "{{.output_dir}}/waf-fingerprint.json"
|
|
55
|
+
- "--json"
|
|
56
|
+
|
|
57
|
+
- id: learn
|
|
58
|
+
name: Learn WAF behavior patterns
|
|
59
|
+
command: learn
|
|
60
|
+
args:
|
|
61
|
+
- "-u"
|
|
62
|
+
- "{{.target}}"
|
|
63
|
+
- "-o"
|
|
64
|
+
- "{{.output_dir}}/waf-profile.json"
|
|
65
|
+
condition: "steps.detect.success"
|
|
66
|
+
|
|
67
|
+
- id: calibrate
|
|
68
|
+
name: Calibrate scan for WAF thresholds
|
|
69
|
+
command: calibrate
|
|
70
|
+
args:
|
|
71
|
+
- "-u"
|
|
72
|
+
- "{{.target}}"
|
|
73
|
+
- "--profile"
|
|
74
|
+
- "{{.output_dir}}/waf-profile.json"
|
|
75
|
+
condition: "steps.learn.success"
|
|
76
|
+
|
|
77
|
+
- id: scan
|
|
78
|
+
name: Run full security scan
|
|
79
|
+
command: run
|
|
80
|
+
args:
|
|
81
|
+
- "-u"
|
|
82
|
+
- "{{.target}}"
|
|
83
|
+
- "-s"
|
|
84
|
+
- "{{.scan_types}}"
|
|
85
|
+
- "-c"
|
|
86
|
+
- "{{.concurrency}}"
|
|
87
|
+
- "--rate-limit"
|
|
88
|
+
- "{{.rate_limit}}"
|
|
89
|
+
- "-o"
|
|
90
|
+
- "json"
|
|
91
|
+
- "--output-file"
|
|
92
|
+
- "{{.output_dir}}/scan-results.json"
|
|
93
|
+
- "--policy"
|
|
94
|
+
- "{{.policy}}"
|
|
95
|
+
condition: "steps.detect.success"
|
|
96
|
+
|
|
97
|
+
- id: report_html
|
|
98
|
+
name: Generate HTML enterprise report
|
|
99
|
+
command: report
|
|
100
|
+
args:
|
|
101
|
+
- "-i"
|
|
102
|
+
- "{{.output_dir}}/scan-results.json"
|
|
103
|
+
- "-o"
|
|
104
|
+
- "{{.output_dir}}/report.html"
|
|
105
|
+
- "-f"
|
|
106
|
+
- "html"
|
|
107
|
+
- "--template-config"
|
|
108
|
+
- "templates/report-configs/enterprise.yaml"
|
|
109
|
+
condition: "steps.scan.success"
|
|
110
|
+
|
|
111
|
+
- id: report_sarif
|
|
112
|
+
name: Generate SARIF report for IDE integration
|
|
113
|
+
command: report
|
|
114
|
+
args:
|
|
115
|
+
- "-i"
|
|
116
|
+
- "{{.output_dir}}/scan-results.json"
|
|
117
|
+
- "-o"
|
|
118
|
+
- "{{.output_dir}}/report.sarif"
|
|
119
|
+
- "-f"
|
|
120
|
+
- "sarif"
|
|
121
|
+
condition: "steps.scan.success"
|
|
122
|
+
|
|
123
|
+
- id: report_json
|
|
124
|
+
name: Generate JSON summary report
|
|
125
|
+
command: report
|
|
126
|
+
args:
|
|
127
|
+
- "-i"
|
|
128
|
+
- "{{.output_dir}}/scan-results.json"
|
|
129
|
+
- "-o"
|
|
130
|
+
- "{{.output_dir}}/summary.json"
|
|
131
|
+
- "-f"
|
|
132
|
+
- "json"
|
|
133
|
+
condition: "steps.scan.success"
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
# WAFtester Quick Probe Workflow
|
|
2
|
+
# Fast target enumeration and WAF detection with minimal footprint
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# waf-tester workflow run templates/workflows/quick-probe.yaml --input target=https://example.com
|
|
6
|
+
|
|
7
|
+
name: quick-probe
|
|
8
|
+
description: "Quick WAF detection, fingerprinting, and critical-only vulnerability probe"
|
|
9
|
+
version: "2.0.0"
|
|
10
|
+
tags:
|
|
11
|
+
- probe
|
|
12
|
+
- quick
|
|
13
|
+
- assessment
|
|
14
|
+
- recon
|
|
15
|
+
|
|
16
|
+
inputs:
|
|
17
|
+
- name: target
|
|
18
|
+
description: Target URL to probe
|
|
19
|
+
required: true
|
|
20
|
+
- name: output_dir
|
|
21
|
+
description: Output directory
|
|
22
|
+
default: "./results"
|
|
23
|
+
- name: rate_limit
|
|
24
|
+
description: Requests per second limit (low for stealth)
|
|
25
|
+
default: "5"
|
|
26
|
+
|
|
27
|
+
steps:
|
|
28
|
+
- id: detect
|
|
29
|
+
name: Detect WAF presence
|
|
30
|
+
command: wafdetect
|
|
31
|
+
args:
|
|
32
|
+
- "-u"
|
|
33
|
+
- "{{.target}}"
|
|
34
|
+
- "-o"
|
|
35
|
+
- "{{.output_dir}}/waf-detection.json"
|
|
36
|
+
- "--json"
|
|
37
|
+
|
|
38
|
+
- id: fingerprint
|
|
39
|
+
name: Fingerprint WAF technology
|
|
40
|
+
command: waffprint
|
|
41
|
+
args:
|
|
42
|
+
- "-u"
|
|
43
|
+
- "{{.target}}"
|
|
44
|
+
- "-o"
|
|
45
|
+
- "{{.output_dir}}/waf-fingerprint.json"
|
|
46
|
+
- "--json"
|
|
47
|
+
|
|
48
|
+
- id: quick_scan
|
|
49
|
+
name: Run quick scan (critical + high only)
|
|
50
|
+
command: run
|
|
51
|
+
args:
|
|
52
|
+
- "-u"
|
|
53
|
+
- "{{.target}}"
|
|
54
|
+
- "-s"
|
|
55
|
+
- "sqli,xss,rce,ssrf"
|
|
56
|
+
- "-c"
|
|
57
|
+
- "10"
|
|
58
|
+
- "--rate-limit"
|
|
59
|
+
- "{{.rate_limit}}"
|
|
60
|
+
- "--severity"
|
|
61
|
+
- "critical,high"
|
|
62
|
+
- "-o"
|
|
63
|
+
- "json"
|
|
64
|
+
- "--output-file"
|
|
65
|
+
- "{{.output_dir}}/quick-results.json"
|
|
66
|
+
condition: "steps.detect.success"
|
|
67
|
+
|
|
68
|
+
- id: report
|
|
69
|
+
name: Generate quick summary
|
|
70
|
+
command: report
|
|
71
|
+
args:
|
|
72
|
+
- "-i"
|
|
73
|
+
- "{{.output_dir}}/quick-results.json"
|
|
74
|
+
- "-o"
|
|
75
|
+
- "{{.output_dir}}/quick-report.html"
|
|
76
|
+
- "-f"
|
|
77
|
+
- "html"
|
|
78
|
+
- "--template-config"
|
|
79
|
+
- "templates/report-configs/minimal.yaml"
|
|
80
|
+
condition: "steps.quick_scan.success"
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
# WAFtester WAF Detection Workflow
|
|
2
|
+
# Comprehensive WAF identification, fingerprinting, and behavior profiling
|
|
3
|
+
#
|
|
4
|
+
# Usage:
|
|
5
|
+
# waf-tester workflow run templates/workflows/waf-detection.yaml --input target=https://example.com
|
|
6
|
+
|
|
7
|
+
name: waf-detection
|
|
8
|
+
description: "Detect, fingerprint, and profile WAF technology stack"
|
|
9
|
+
version: "2.0.0"
|
|
10
|
+
tags:
|
|
11
|
+
- waf
|
|
12
|
+
- detection
|
|
13
|
+
- fingerprint
|
|
14
|
+
- recon
|
|
15
|
+
- profiling
|
|
16
|
+
|
|
17
|
+
inputs:
|
|
18
|
+
- name: target
|
|
19
|
+
description: Target URL
|
|
20
|
+
required: true
|
|
21
|
+
- name: output_dir
|
|
22
|
+
description: Output directory
|
|
23
|
+
default: "./results"
|
|
24
|
+
- name: rate_limit
|
|
25
|
+
description: Requests per second limit
|
|
26
|
+
default: "3"
|
|
27
|
+
|
|
28
|
+
steps:
|
|
29
|
+
- id: detect
|
|
30
|
+
name: Detect WAF presence
|
|
31
|
+
command: wafdetect
|
|
32
|
+
args:
|
|
33
|
+
- "-u"
|
|
34
|
+
- "{{.target}}"
|
|
35
|
+
- "-o"
|
|
36
|
+
- "{{.output_dir}}/waf-detection.json"
|
|
37
|
+
- "--json"
|
|
38
|
+
|
|
39
|
+
- id: fingerprint
|
|
40
|
+
name: Fingerprint WAF vendor and version
|
|
41
|
+
command: waffprint
|
|
42
|
+
args:
|
|
43
|
+
- "-u"
|
|
44
|
+
- "{{.target}}"
|
|
45
|
+
- "-o"
|
|
46
|
+
- "{{.output_dir}}/waf-fingerprint.json"
|
|
47
|
+
- "--json"
|
|
48
|
+
|
|
49
|
+
- id: probe_behavior
|
|
50
|
+
name: Probe WAF blocking behavior with common attacks
|
|
51
|
+
command: run
|
|
52
|
+
args:
|
|
53
|
+
- "-u"
|
|
54
|
+
- "{{.target}}"
|
|
55
|
+
- "-s"
|
|
56
|
+
- "sqli,xss,rce,lfi"
|
|
57
|
+
- "-c"
|
|
58
|
+
- "5"
|
|
59
|
+
- "--rate-limit"
|
|
60
|
+
- "{{.rate_limit}}"
|
|
61
|
+
- "-o"
|
|
62
|
+
- "json"
|
|
63
|
+
- "--output-file"
|
|
64
|
+
- "{{.output_dir}}/probe-results.json"
|
|
65
|
+
condition: "steps.detect.success"
|
|
66
|
+
|
|
67
|
+
- id: learn
|
|
68
|
+
name: Learn WAF response patterns
|
|
69
|
+
command: learn
|
|
70
|
+
args:
|
|
71
|
+
- "-u"
|
|
72
|
+
- "{{.target}}"
|
|
73
|
+
- "-o"
|
|
74
|
+
- "{{.output_dir}}/waf-profile.json"
|
|
75
|
+
condition: "steps.detect.success"
|
|
76
|
+
|
|
77
|
+
- id: report
|
|
78
|
+
name: Generate WAF detection report
|
|
79
|
+
command: report
|
|
80
|
+
args:
|
|
81
|
+
- "-i"
|
|
82
|
+
- "{{.output_dir}}/probe-results.json"
|
|
83
|
+
- "-o"
|
|
84
|
+
- "{{.output_dir}}/waf-report.html"
|
|
85
|
+
- "-f"
|
|
86
|
+
- "html"
|
|
87
|
+
- "--template-config"
|
|
88
|
+
- "templates/report-configs/minimal.yaml"
|
|
89
|
+
condition: "steps.probe_behavior.success"
|