NSE Scripts وحفظ النتايج

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

01 / ملخص الدرس

NSE Scripts وحفظ النتايج

إزاي تستخدم Nmap Scripting Engine (‎-sC و ‎--script)، وتحفظ النتايج بـ ‎-oN و ‎-oG و ‎-oX و ‎-oA، وتقرا ملف XML بـ Python.

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

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

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 في سطر، بالمنتج والإصدار.

main.py
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 اختفى.

main.py
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)
  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