المراجعة قبل التسليم والـ Retest
Checklist مراجعة الجودة قبل ما تبعت التقرير: اسم العميل، والبيانات اللي ما اتخفتش، والـ TODO، وتسليم التقرير بأمان، وبعدين الـ Retest بعد الإصلاح.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
أهلاً بيك. أسوأ غلطة ممكن تحصل: تبعت لعميل تقرير فيه اسم عميل تاني. وده بيحصل فعلاً، لما تنسخ من تقرير قديم. علشان كده فيه حاجة اسمها QA، يعني مراجعة الجودة.
الـ QA Checklist: اسم العميل والتواريخ صح في كل حتة. مفيش باسوردات أو بيانات حساسة باينة. مفيش TODO أو أماكن فاضية. كل Finding ليه دليل وتوصية. والأفضل، حد تاني يقرا التقرير قبلك. وزي ما قلنا، افتكر الـ Executive Summary، المدير مش هيقرا غيره. نعمل QA أوتوماتيك بسيط بـ Python: بيدوّر على TODO، وعلى باسوردات ما اتخفتش. نشغّل… مشكلتين. التقرير مش جاهز.
import re
report = """Penetration Test Report for ACME Corp
F-01 SQL Injection - evidence: F-01.png
F-02 Default password admin:Admin123 - evidence: TODO
Prepared for Globex Inc."""
problems = []
if "TODO" in report:
problems.append("unfinished TODO left")
if re.search(r"\w+:\w*\d\w*", report):
problems.append("password not redacted")
for p in problems:
print("QA:", p)
print("ready to send" if not problems else "NOT ready")المخرجات
QA: unfinished TODO left QA: password not redacted NOT ready
والتسليم نفسه: ما تبعتش التقرير attachment عادي في إيميل. ابعته متشفّر، زي PDF بباسورد أو 7z، والباسورد في قناة تانية زي التليفون. أو على portal آمن متفق عليه.
وبعد ما العميل يصلّح، بييجي الـ Retest: تجرّب نفس الخطوات تاني. ولكل Finding تكتب حالته: Fixed، أو Partially Fixed، أو Not Fixed. وتطلّع نسخة جديدة من التقرير، أو Retest Letter. دورك: التقرير فيه اسم عميل غلط في آخره. ضيف check بيدوّر على أسماء الشركات، ويقارنها باسم العميل الصح.
ضيف client = "ACME Corp" و check بـ re.findall على أي اسم تاني.
الحل: نشغّل… لقينا Globex. الـ check ده لوحده ممكن يحمي سمعتك.
import re
report = """Penetration Test Report for ACME Corp
F-01 SQL Injection - evidence: F-01.png
F-02 Default password admin:Admin123 - evidence: TODO
Prepared for Globex Inc."""
problems = []
if "TODO" in report:
problems.append("unfinished TODO left")
if re.search(r"\w+:\w*\d\w*", report):
problems.append("password not redacted")
client = "ACME Corp"
for name in re.findall(r"for ([A-Z]\w+ (?:Corp|Inc)\.?)", report):
if name.rstrip(".") != client:
problems.append("wrong client name: " + name)
for p in problems:
print("QA:", p)
print("ready to send" if not problems else "NOT ready")المخرجات
QA: unfinished TODO left QA: password not redacted QA: wrong client name: Globex Inc. NOT ready
الدرس الجاي: تقرير مخصوص… تقرير امتحان OSCP، وقواعده اللي لو ما مشيتش عليها، ممكن ما تنجحش. يلا بينا.
03 / دروس المسار (21)
- 01ليه التقرير أهم حاجة في الـ Pentest
- 02مين بيقرا التقرير؟
- 03نظام Notes من أول دقيقة
- 04Activity Log: كل حاجة بالوقت
- 05خلّي الـ Terminal يسجّل لوحده
- 06الأدلة: إيه اللي يعتبر دليل؟
- 07سلامة الأدلة: Hash و Chain of Custody
- 08إخفاء البيانات الحساسة (Redaction)
- 09خطوات إعادة التنفيد (Steps to Reproduce)
- 10الـ Impact: الخطر الحقيقي على البيزنس
- 11CVSS: الخطورة برقم
- 12الـ Risk Matrix: الاحتمال في الـ Impact
- 13ترتيب الأولويات والـ Quick Wins
- 14هيكل تقرير اختبار الاختراق
- 15الـ Executive Summary: صفحة للإدارة
- 16كتابة الـ Finding التقني
- 17توصيات الإصلاح اللي تتنفّد فعلاً
- 18خلّي Python يكتب التقرير
- 19المراجعة قبل التسليم والـ Retestانت هنا
- 20تقرير امتحان OSCP
- 21المراجعة النهائية: من الـ Note للتقرير