أتمتة الـ Recon بـ Python
إزاي تربط خطوات الـ recon في pipeline واحد: discover ثم scan ثم identify، وإمتى الأتمتة مفيدة وإمتى خطر، وتبنيه بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
عملنا نفس الخطوات كذا مرة: نلاقي الأجهزة، ونعمل Scan، ونعرف الخدمات. وأي حاجة بتتكرر، ينفع نعمل لها أتمتة.
الفكرة اسمها Pipeline: كل خطوة function لوحدها. الـ output بتاع خطوة، هو الـ input للي بعدها. discover بتطلّع الأجهزة، و scan بتطلّع الـ ports، و identify بتطلّع الخدمة.
وفيه أدوات جاهزة بتعمل كده، زي AutoRecon و nmapAutomator. بس خد بالك: الأتمتة بتوفّر وقت، بس ما بتفكّرش بدالك. ولازم تفهم كل خطوة بتعملها. وفي امتحان OSCP، أدوات زي دي مسموحة للـ recon، بس اقرا القواعد الأول. هنا pipeline على بيانات الـ lab: تلات functions، وكل واحدة بتعمل خطوة. وفي الآخر loop بتربطهم ببعض، وتحط النتيجة في dictionary. نشغّل… جهازين، وكل جهاز بالـ ports والخدمات بتاعته.
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 جاهزة تبدأ بيها شغلك.
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)
- 01يعني إيه جمع معلومات (Recon)؟
- 02سلبي ولا نشط؟ والنطاق القانوني
- 03WHOIS: مين صاحب الـ Domain؟
- 04سجلات DNS: كنز المعلومات
- 05اكتشاف الـ Subdomains
- 06Certificate Transparency: الشهادات بتتكلم
- 07Google Dorking
- 08OSINT: الموظفين والإيميلات
- 09الـ Metadata: أسرار جُوّه الملفات
- 10اكتشاف الأجهزة الشغّالة (Host Discovery)
- 11الـ Port Scanning بيشتغل إزاي؟
- 12Nmap: البداية
- 13أنواع الـ Scan والسرعة في Nmap
- 14كشف الخدمات والإصدارات ونظام التشغيل
- 15NSE Scripts وحفظ النتايج
- 16تعداد الويب: الـ Headers والتكنولوجيا
- 17الـ Directory Brute Force
- 18تعداد SMB
- 19تعداد خدمات تانية: FTP و DNS و SNMP وغيرهم
- 20تنظيم نتايج الـ Recon
- 21أتمتة الـ Recon بـ Pythonانت هنا
- 22مراجعة شاملة وخطة Recon