أتمتة الـ Recon بـ Python

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

01 / ملخص الدرس

أتمتة الـ Recon بـ Python

إزاي تربط خطوات الـ recon في pipeline واحد: discover ثم scan ثم identify، وإمتى الأتمتة مفيدة وإمتى خطر، وتبنيه بـ Python.

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

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

عملنا نفس الخطوات كذا مرة: نلاقي الأجهزة، ونعمل Scan، ونعرف الخدمات. وأي حاجة بتتكرر، ينفع نعمل لها أتمتة.

الفكرة اسمها Pipeline: كل خطوة function لوحدها. الـ output بتاع خطوة، هو الـ input للي بعدها. discover بتطلّع الأجهزة، و scan بتطلّع الـ ports، و identify بتطلّع الخدمة.

وفيه أدوات جاهزة بتعمل كده، زي AutoRecon و nmapAutomator. بس خد بالك: الأتمتة بتوفّر وقت، بس ما بتفكّرش بدالك. ولازم تفهم كل خطوة بتعملها. وفي امتحان OSCP، أدوات زي دي مسموحة للـ recon، بس اقرا القواعد الأول. هنا pipeline على بيانات الـ lab: تلات functions، وكل واحدة بتعمل خطوة. وفي الآخر loop بتربطهم ببعض، وتحط النتيجة في dictionary. نشغّل… جهازين، وكل جهاز بالـ ports والخدمات بتاعته.

main.py
import ipaddress

# Lab data: what each step would find on the real network
ALIVE = {"10.10.10.5", "10.10.10.20"}
PORTS = {"10.10.10.5": [22, 80], "10.10.10.20": [445, 3306]}
SERVICES = {22: "ssh", 80: "http", 445: "smb", 3306: "mysql"}


def discover(network):
    return [str(ip) for ip in ipaddress.ip_network(network).hosts() if str(ip) in ALIVE]


def scan(ip):
    return PORTS.get(ip, [])


def identify(port):
    return SERVICES.get(port, "unknown")


results = {}
for ip in discover("10.10.10.0/27"):
    results[ip] = {port: identify(port) for port in scan(ip)}

for ip, ports in results.items():
    print(ip, ports)

المخرجات

10.10.10.5 {22: 'ssh', 80: 'http'}
10.10.10.20 {445: 'smb', 3306: 'mysql'}

دورك: ضيف خطوة رابعة للـ pipeline: dictionary اسمه NEXT، بيقول لكل خدمة إيه أول خطوة Enumeration، واطبع todo لكل port.

تمرين

NEXT = {"http": "gobuster dir", "smb": "smbmap -H", ...} واطبع لكل port.

الحل: نشغّل… بقى عندك todo list جاهزة تبدأ بيها شغلك.

main.py
import ipaddress

# Lab data: what each step would find on the real network
ALIVE = {"10.10.10.5", "10.10.10.20"}
PORTS = {"10.10.10.5": [22, 80], "10.10.10.20": [445, 3306]}
SERVICES = {22: "ssh", 80: "http", 445: "smb", 3306: "mysql"}


def discover(network):
    return [str(ip) for ip in ipaddress.ip_network(network).hosts() if str(ip) in ALIVE]


def scan(ip):
    return PORTS.get(ip, [])


def identify(port):
    return SERVICES.get(port, "unknown")


results = {}
for ip in discover("10.10.10.0/27"):
    results[ip] = {port: identify(port) for port in scan(ip)}

for ip, ports in results.items():
    print(ip, ports)

NEXT = {"http": "gobuster dir", "smb": "smbmap -H", "ssh": "check version", "mysql": "try root login"}
for ip, ports in results.items():
    for port, name in ports.items():
        print(f"[todo] {ip}:{port} -> {NEXT.get(name, 'banner grab')}")

المخرجات

10.10.10.5 {22: 'ssh', 80: 'http'}
10.10.10.20 {445: 'smb', 3306: 'mysql'}
[todo] 10.10.10.5:22 -> check version
[todo] 10.10.10.5:80 -> gobuster dir
[todo] 10.10.10.20:445 -> smbmap -H
[todo] 10.10.10.20:3306 -> try root login

الدرس الجاي: آخر درس، مراجعة شاملة لكل اللي اتعلمناه، وخطة Recon كاملة. يلا بينا.

03 / دروس المسار (22)
  1. 01يعني إيه جمع معلومات (Recon)؟
  2. 02سلبي ولا نشط؟ والنطاق القانوني
  3. 03WHOIS: مين صاحب الـ Domain؟
  4. 04سجلات DNS: كنز المعلومات
  5. 05اكتشاف الـ Subdomains
  6. 06Certificate Transparency: الشهادات بتتكلم
  7. 07Google Dorking
  8. 08OSINT: الموظفين والإيميلات
  9. 09الـ Metadata: أسرار جُوّه الملفات
  10. 10اكتشاف الأجهزة الشغّالة (Host Discovery)
  11. 11الـ Port Scanning بيشتغل إزاي؟
  12. 12Nmap: البداية
  13. 13أنواع الـ Scan والسرعة في Nmap
  14. 14كشف الخدمات والإصدارات ونظام التشغيل
  15. 15NSE Scripts وحفظ النتايج
  16. 16تعداد الويب: الـ Headers والتكنولوجيا
  17. 17الـ Directory Brute Force
  18. 18تعداد SMB
  19. 19تعداد خدمات تانية: FTP و DNS و SNMP وغيرهم
  20. 20تنظيم نتايج الـ Recon
  21. 21أتمتة الـ Recon بـ Pythonانت هنا
  22. 22مراجعة شاملة وخطة Recon