Pentest Reporting — التقرير اللي بيخليك تتدفع
Executive summary و CVSS و proof-of-exploit وخطة معالجة تتنفذ
ليه التقرير أهم من الاختراق نفسه؟
اخترقت الشركة في 4 ساعات. حلو قوي.
طب مين هيقرا اللي عملته؟
- الـ CIO طبعاً!
كنت مستنيك تقول كده. متوقّع كالعادة يا مستجد.
الـ CIO هيقعد معاك على Burp؟ هيقرا 80 صفحة Markdown؟ أبداً. هو هيقرا صفحة واحدة. واحدة بس.
حكاية حقيقية: تقرير اتسلّم.. ومحدش قراه
الـ CIO اللي طلب الـ engagement اتنقل، الـ findings اتدفنت في SharePoint، وبعد سنة الـ APT دخل من نفس الخرم بالظبط.
الدرس: التقرير اللي محدش فاهمه = إنت ما عملتش حاجة. خالص.
هيكل التقرير الفيدرالي
كتابة Finding واحد بشكل صحيح
### F-007 | SQL Injection in /api/v2/search?q
**Severity**: Critical
**CVSS 3.1**: 9.8 (AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H)
**CWE**: CWE-89 — SQL Injection
**Affected**: api.target.gov/v2/search (production)
**Discovered**: 2026-04-12 14:22 UTC
**Tester**: J. Doe
#### Summary
The /api/v2/search endpoint passes the 'q' parameter unsanitized into a
SQL query, allowing arbitrary database access without authentication.
#### Technical Detail
Reproduction (single curl):
```
curl 'https://api.target.gov/v2/search?q=test%27%20UNION%20SELECT%20NULL,version(),NULL--'
```
Response leaks PostgreSQL 14.8 banner. Stacked queries confirmed via
out-of-band DNS lookups (proof captured at burpcollab.example).
#### Proof of Impact
Within 12 minutes the tester:
1. Enumerated 47 tables including `users_pii` and `audit_log`
2. Read 1.2M user records (full name, SSN-last-4, address, DOB)
3. Modified one test record (reverted post-confirmation)
Screenshots: see Appendix B, F-007-01..03.
#### Business Impact
- 1.2M PII records exposed → CCPA/GLBA notification scope
- Audit log tampering → compliance violation under FISMA
- Estimated breach disclosure cost: $4.5M (Ponemon 2024 average)
#### Recommendation
Short-term (this week):
- Deploy parameterized queries on the affected query builder
- WAF rule blocking UNION/SELECT in 'q' as a stop-gap
Long-term (this quarter):
- Audit all 312 endpoints using same query helper
- Move to ORM (Prisma/SQLAlchemy) with mandatory bound params
- Add SAST gate (Semgrep) blocking string concatenation in DB code
#### References
- OWASP Top 10 — A03:2021 Injection
- CISA Secure-by-Design pledge — Memory-safe & SQLi
- NIST SP 800-53 SI-10 (input validation)CVSS — لا تتعجل في الرقم
CVSS 3.1 فيه حقول دقيقة. الفرق بين 7.5 و9.8 هو اللي بيحدّد إذا كان الـ CIO هيصحى في نص الليل ولا لأ. خد وقتك:
Attack Vector (AV):
Network (N) — قابل للوصول من الإنترنت → +0.85
Adjacent (A) — يحتاج شبكة محلية → +0.62
Local (L) — يحتاج تسجيل دخول → +0.55
Physical (P) — يحتاج وصول مادي → +0.20
Attack Complexity (AC):
Low (L) — كل مهاجم يقدر → +0.77
High (H) — يحتاج race condition / timing → +0.44
Privileges Required (PR):
None (N) — مجهول → +0.85
Low (L) — مستخدم عادي → +0.62
High (H) — admin → +0.27
User Interaction (UI):
None (N) — تلقائي → +0.85
Required (R) — يحتاج click / paste → +0.62
Scope (S):
Unchanged (U) — ضمن الـ component → ×1.0
Changed (C) — يخرج إلى components أخرى → ×1.5
CIA Impact: None / Low / Highأخطاء شائعة
- "Critical" لكل finding — التقرير بيفقد مصداقيته.
- Screenshots من غير redaction (PII حقيقية في التقرير).
- "اعملوا best practices" — دي مش توصية.
- ما تنسخش findings من تقارير قديمة من غير ما تتأكد تاني.
- ما تكتبش نكت ولا تستخفّ بالـ team — هما اللي هيقروا التقرير.
- راجع كل finding مرتين — غلطة تقنية واحدة = engagement محروق.
- اربط كل finding بـ ATT&CK technique و CWE.
- ضيف قسم "اختبرناه ومقدرناش نكسره" — بيبني ثقة.
- سلّم النسخة النهائية في ميتنج، مش بـ email.
- اعرض retest بعد 30 يوم من التسليم.
معايير فيدرالية
- NIST SP 800-115 — Technical Guide to Information Security Testing
- NIST SP 800-53 — Security Controls (لربط findings بـ controls)
- FISMA / FedRAMP — متطلبات تقارير
- PTES — Penetration Testing Execution Standard (community)
- OWASP WSTG — Web Security Testing Guide
- MITRE ATT&CK — للـ attack path narratives
غلطات الـ junior في كتابة التقرير
- "كل حاجة Critical" — لو كل حاجة critical، يبقى مفيش حاجة critical. التقرير فقد مصداقيته من أول 5 صفحات.
- screenshots فيها PII حقيقية — اتسلّم تقرير، اتسرّب، الجهة مرفوعة عليها قضية. شغلك انت اللي بقى المشكلة.
- "اعملوا best practices" — دي مش توصية، دي تهرّب من المسؤولية. اكتب الأمر بالظبط: "فعّل MFA على الـ 47 admin account التالية".
- نسخ findings من تقارير قديمة — في endpoint اتغيّر، في version اتعدّل، وإنت بتسلّم finding عمره سنتين على نظام جديد.
- تسليم بـ email وخلاص — مفيش meeting، مفيش walkthrough، مفيش retest. التقرير راح في inbox ومات.
الخلاصة الناشفة
التقرير مش paperwork — التقرير هو المنتج.
الـ shell اللي اخدته، الـ CVE اللي لقيته، الـ chain اللي بنيته — كل ده مادة خام. التقرير هو اللي بيحوّلهم لقرار، وميزانية، وحماية حقيقية.
اوعى تسلّم تقرير عك وتقول "هما اللي ميقروش".
اكتب لـ CIO ما يفهمش technical jargon، وفي نفس الوقت لـ engineer هيـ reproduce الخطوة بعد سنة.
لو قدرت تعمل الاتنين في تقرير واحد، يبقى انت محترف فعلاً.
مصادر
- OffSec — OSCP report template (نموذج جيد للبدء)
- SANS — Reporting Penetration Tests (SEC560 module)
- NCC Group / TrustedSec — public report samples
- Daniel Miessler — "How to Write a Penetration Test Report"
- RedTeam Pentesting GmbH — sample reports