NSE Scripts وحفظ النتايج
إزاي تستخدم Nmap Scripting Engine (-sC و --script)، وتحفظ النتايج بـ -oN و -oG و -oX و -oA، وتقرا ملف XML بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
Nmap مش بس Port Scanner. جُوّاه محرك scripts اسمه NSE، فيه مئات الـ scripts بتعمل Enumeration، وساعات بتكشف ثَغَرات كمان.
dash s capital C بيشغّل الـ scripts الأساسية الآمنة، اللي اسمها default. dash dash script وبعدها اسم script أو category، زي vuln أو smb. والـ scripts كلها موجودة في folder اسمه scripts جُوّه Nmap.
وخد بالك: category زي vuln أو brute أو dos ممكن تبقى عنيفة على الهدف. ماتشغّلهاش غير لو الـ scope بيسمح.
دايماً احفظ النتايج، علشان التقرير. dash o capital N، ملف نصي عادي. dash o capital G، سطر لكل جهاز، سهل في grep. dash o capital X، ملف XML للأدوات والـ scripts. و dash o capital A، التلاتة مرة واحدة، وده اللي تستخدمه دايماً. ملف الـ XML أسهل حاجة تقراها بالـ code. مكتبة ElementTree بتحوّله لشجرة، ونلِف على كل host، وجُوّاه كل port، ونطلّع الحالة والمنتج والإصدار. نشغّل… كل port في سطر، بالمنتج والإصدار.
import xml.etree.ElementTree as ET
# A short "nmap -sV -oX scan.xml" result
xml = """<nmaprun><host><address addr="10.10.10.5" addrtype="ipv4"/>
<ports>
<port protocol="tcp" portid="22"><state state="open"/><service name="ssh" product="OpenSSH" version="7.2p2"/></port>
<port protocol="tcp" portid="80"><state state="open"/><service name="http" product="Apache httpd" version="2.4.18"/></port>
<port protocol="tcp" portid="443"><state state="closed"/><service name="https"/></port>
</ports></host></nmaprun>"""
root = ET.fromstring(xml)
for host in root.iter("host"):
ip = host.find("address").get("addr")
for port in host.iter("port"):
state = port.find("state").get("state")
svc = port.find("service")
print(ip, port.get("portid"), state, svc.get("product", "-"), svc.get("version", ""))المخرجات
10.10.10.5 22 open OpenSSH 7.2p2 10.10.10.5 80 open Apache httpd 2.4.18 10.10.10.5 443 closed -
دورك: تجاهل أي port حالته مش open، باستخدام continue.
بعد سطر state: if state != "open": continue
الحل: نشغّل… four forty three اختفى.
import xml.etree.ElementTree as ET
# A short "nmap -sV -oX scan.xml" result
xml = """<nmaprun><host><address addr="10.10.10.5" addrtype="ipv4"/>
<ports>
<port protocol="tcp" portid="22"><state state="open"/><service name="ssh" product="OpenSSH" version="7.2p2"/></port>
<port protocol="tcp" portid="80"><state state="open"/><service name="http" product="Apache httpd" version="2.4.18"/></port>
<port protocol="tcp" portid="443"><state state="closed"/><service name="https"/></port>
</ports></host></nmaprun>"""
root = ET.fromstring(xml)
for host in root.iter("host"):
ip = host.find("address").get("addr")
for port in host.iter("port"):
state = port.find("state").get("state")
if state != "open":
continue
svc = port.find("service")
print(ip, port.get("portid"), state, svc.get("product", "-"), svc.get("version", ""))المخرجات
10.10.10.5 22 open OpenSSH 7.2p2 10.10.10.5 80 open Apache httpd 2.4.18
كده خلّصنا Nmap. الدرس الجاي: نبدأ نعمل Enumeration لكل خدمة لوحدها، ونبدأ بالويب. يلا بينا.
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