أتمتة الفحص بـ Python

جارٍ التحميل…

01 / ملخص الدرس

أتمتة الفحص بـ Python

إزاي تجمع كل اللي اتعلمناه في pipeline صغير بـ Python: تشغّل الأدوات وتطلّع النتايج JSON، وتوحّد شكلها، وتشيل التكرار، وترتّبها بالأولوية، علشان توفّر وقت في كل فحص.

02 / شرح الدرس مكتوبًا

نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.

في كل فحص بتعمل نفس الخطوات: تشغّل الأدوات، تجمّع، تشيل التكرار، ترتّب. بدل ما تعملها بإيدك كل مرة، نكتبها مرة واحدة بـ Python. وده الـ automation.

الـ pipeline بيمشي في خطوات: تشغيل: Python بيشغّل الأدوات بـ subprocess. تجميع: كل أداة تطلّع JSON، وإنت تقراه. توحيد: كل finding في نفس الشكل. تنظيف: شيل التكرار. ترتيب: بالأولوية. كل خطوة function لوحدها.

أغلب الأدوات بتطلّع JSON لو طلبت منها، وده بيسهّل القراية من Python. Nuclei: dash jsonl. Nmap: dash oX بيطلّع XML. ومن Python بتشغّلها بـ subprocess dot run.

تحذير مهم: الأتمتة بتسرّع الشغل، بس ما بتلغيش عقلك. لسه لازم تأكّد الثغرات بإيدك. لسه لازم إذن مكتوب قبل أي فحص. والـ script ما يفحصش أي IP بره الـ scope. حط الـ scope في أول الـ script وتأكّد منه. هنا pipeline صغير. نتايج الأدوات في list اسمها raw، وفيه function اسمها dedupe بتشيل التكرار، زي اللي كتبناها قبل كده. بنطبع النتيجة النضيفة. نشغّل… تلات findings، من غير تكرار، بس مش مترتّبين.

main.py
# A tiny pipeline: raw findings from the tools -> normalize -> dedupe -> prioritize.
raw = [
    {"tool": "nuclei",  "host": "10.10.10.5", "name": "Apache 2.4.49 Path Traversal", "cvss": 7.5, "kev": True},
    {"tool": "openvas", "host": "10.10.10.5", "name": "Apache 2.4.49 Path Traversal", "cvss": 7.5, "kev": True},
    {"tool": "nmap",    "host": "10.10.10.5", "name": "Samba 3.0.20 Command Injection", "cvss": 10.0, "kev": False},
    {"tool": "nikto",   "host": "10.10.10.7", "name": "Missing X-Frame-Options Header", "cvss": 2.6, "kev": False},
]


def dedupe(findings):
    seen, out = set(), []
    for f in findings:
        key = (f["host"], f["name"])
        if key in seen:
            continue
        seen.add(key)
        out.append(f)
    return out


clean = dedupe(raw)
for f in clean:
    print(f"{f['cvss']:4}  {f['host']:11} {f['name']}")
print("total:", len(clean))

المخرجات

7.5  10.10.10.5  Apache 2.4.49 Path Traversal
10.0  10.10.10.5  Samba 3.0.20 Command Injection
 2.6  10.10.10.7  Missing X-Frame-Options Header
total: 3

دورك: ضيف خطوة الترتيب. اكتب function اسمها score بترجّع الـ KEV والـ CVSS كـ tuple، ورتّب بيها القايمة من الأكبر للأصغر، علشان اللي في KEV والأعلى CVSS يطلعوا الأول.

تمرين

def score(f): return (f["kev"], f["cvss"]) وبعدين clean.sort(key=score, reverse=True)

الحل: نشغّل… دلوقتي مترتّبين: اللي في KEV الأول، وبعدين بالـ CVSS.

main.py
# A tiny pipeline: raw findings from the tools -> normalize -> dedupe -> prioritize.
raw = [
    {"tool": "nuclei",  "host": "10.10.10.5", "name": "Apache 2.4.49 Path Traversal", "cvss": 7.5, "kev": True},
    {"tool": "openvas", "host": "10.10.10.5", "name": "Apache 2.4.49 Path Traversal", "cvss": 7.5, "kev": True},
    {"tool": "nmap",    "host": "10.10.10.5", "name": "Samba 3.0.20 Command Injection", "cvss": 10.0, "kev": False},
    {"tool": "nikto",   "host": "10.10.10.7", "name": "Missing X-Frame-Options Header", "cvss": 2.6, "kev": False},
]


def dedupe(findings):
    seen, out = set(), []
    for f in findings:
        key = (f["host"], f["name"])
        if key in seen:
            continue
        seen.add(key)
        out.append(f)
    return out


def score(f):
    return (f["kev"], f["cvss"])


clean = dedupe(raw)
clean.sort(key=score, reverse=True)
for f in clean:
    flag = "KEV" if f["kev"] else "   "
    print(f"{f['cvss']:4}  {flag}  {f['host']:11} {f['name']}")
print("total:", len(clean))

المخرجات

7.5  KEV  10.10.10.5  Apache 2.4.49 Path Traversal
10.0       10.10.10.5  Samba 3.0.20 Command Injection
 2.6       10.10.10.7  Missing X-Frame-Options Header
total: 3

كده عندك هيكل script تقدر تبني عليه في أي فحص. الدرس الأخير: مراجعة شاملة للكورس كله من أوله لآخره. يلا بينا.

03 / دروس المسار (16)
  1. 01يعني إيه ثغرة؟ ومن الـ Recon للـ Vulnerabilities
  2. 02CVE و CWE: أسماء الثغرات
  3. 03الخطورة: CVSS و EPSS و KEV
  4. 04البحث في NVD
  5. 05Exploit-DB و searchsploit
  6. 06GitHub و Metasploit
  7. 07الفحص بـ Nmap NSE
  8. 08الفحص بـ Nuclei
  9. 09الفحص بـ Nikto
  10. 10الفحص بـ OpenVAS
  11. 11فحص بصلاحيات ومن غيرها
  12. 12تجميع وتنظيم النتايج
  13. 13False Positives والتأكد اليدوي
  14. 14ترتيب الأولويات
  15. 15أتمتة الفحص بـ Pythonانت هنا
  16. 16مراجعة شاملة