الفرق الحمراء — الهجوممتقدم55mL08

Scanning بدون ما الـ SOC يشوفك

nmap و nuclei و ffuf — وإزاي تطلع الخدمة وراها إيه

#nmap#nuclei#ffuf#Banner Grabbing

ليه إنت بتعمل nmap -A على /16 ومستغرب الـ SOC شافك؟

تشبيه — شرح مبسط
بُص. الـ Recon = إنت قاعد على القهوة قصاد البنك بتتفرّج. محدش حاسس بيك. الـ Scanning = إنت قمت من على القهوة، عدّيت الشارع، دخلت اللوبي، وبتلكز كل باب. من اللحظة دي إنت بتلمس الهدف.

- طب يعني الـ SOC هيشوفني بمجرد ما أبعت أول SYN؟؟

يا نجم الجيل.. السؤال مش "هيشوفني ولا لأ". ده سؤال مستجد. السؤال الصح: "هيشوفني إمتى، وعارف يحدد إنت مين، وعنده logs لـ كام يوم وراك؟". لو الهدف عنده SOC نص نايم نص صاحي، إنت هتظهر له على شاشة. أنت ونصيبك في الـ tier-1 اللي قاعد قدامها.
قبل ما تكتب nmap -A

nmap -A على /16 من IP واحد بتاعك = إنت بتقول للـ SOC "أنا هنا، اتفضلوا".

الـ -A بيشغّل OS detection + version + scripts + traceroute في طلقة واحدة. صوتها عالي.

قبل أي scan، اسأل نفسك:

  • الـ engagement عليه rules of engagement مكتوبة؟
  • الـ scope محدد بـ subnets ولا بـ hostnames؟
  • عندك source IP متفق عليه (jump host) ولا بتطلع من لابتوبك؟
  • الـ blue team عارفة إنك شغّال ولا الـ engagement مفروض يبان كأنه حقيقي؟

لو الإجابة "مش متأكد" على أي واحدة فيهم — قفل الـ terminal، ارجع للـ PM، اتكلم. الـ scan مش هيهرب.

نظرية الـ TCP Scanning — ليه فيه scan أنواع أصلاً؟

قبل ما تحفظ flags، افهم آلية الـ TCP handshake نفسها:

  1. إنت بتبعت SYN.
  2. السيرفر يرد SYN/ACK لو الـ port مفتوح، أو RST لو مقفول.
  3. إنت تبعت ACK يكمّل الـ handshake.

SYN scan (-sS) — half-open

إنت بتبعت SYN، السيرفر يرد SYN/ACK، إنت تبعت RST بدل ACK.

الـ connection ما اكتملش، فالـ application layer ما شافش حاجة. الـ web server logs فاضية.

المشكلة: محتاج root/raw sockets. والـ IDS بتعرف توقيع SYN-without-ACK من بعيد.

Connect scan (-sT) — full handshake

بتكمّل الـ handshake عادي زي أي client. ما يحتاجش root.

الـ ميزة: شكله طبيعي — connection عادي بدأ وقفل.

الـ عيب: السيرفر بيسجّله في الـ logs. الـ web server بيشوف connection اتقفل من غير request — ده بصمته الواضحة.

إمتى تستخدم إيه؟

  • عندك root وعايز تبعد عن الـ application logs؟ -sS.
  • شغّال من جوه الشبكة بـ user عادي (post-exploitation)؟ -sT، ما عندكش خيار.
  • الهدف خلف load balancer بيعمل log للـ half-open كـ anomaly؟ -sT بيبان أعدل.

المعلمين اللي بيقولوا "-sS دايماً أحسن" مش شايفين الصورة كاملة. الـ choice مرتبط بـ context.

سيناريو حقيقي — هدف عليه WAF و IDS و rate limiting

إنت ع engagement. الـ scope: app.target.gov. عند العميل WAF (Cloudflare أو F5)، Suricata في الـ DMZ، و rate limit على الـ edge: 100 طلب في الدقيقة لكل IP.

تعمل إيه؟

اللي ما تعملوش

bash
# الفلاحة المعتادة:
nmap -A -T4 -p- app.target.gov

# اللي بيحصل:
# - الـ WAF بيـ block IP بتاعك بعد 30 ثانية
# - الـ SOC ticket مفتوحة وفيها اسمك (لو الـ engagement مش authorized بالشكل ده)
# - الـ engagement اتحرق قبل ما يبدأ

اللي بيتعمل فعلياً

01
passive recon الأول — مفيش packet للهدف

قبل ما تبعت SYN واحد، اعمل passive: crt.sh، shodan، censys، archive.org. خد الصورة من بره.

02
حدد الـ ports اللي تهمك — مش -p-

الـ /16 على كل البورتات = 65k port × آلاف IPs. إنت بتفصّل وقت السيرفر علشان إيه؟

ابدأ بـ top-100 من nmap (--top-ports 100). البورتات النادرة بعدها لو في سبب.

03
استخدم -T2 على الأقل — الـ -T4 صرخة
bash
nmap -sS -T2 --max-rate 50 --top-ports 100 \
  --scan-delay 1s -Pn -n \
  -oA recon-slow target.gov

الـ --scan-delay 1s بيخلّي كل packet بعد التاني بثانية. بطيء جداً؟ آه. بيعدّي من تحت rate limit؟ آه برضو.

04
وزّع المصدر لو ممكن

لو عندك authorization، اطلع من 5-10 jump hosts مختلفة. كل واحد ياخد جزء من الـ scope. الـ rate limit per-IP، يبقى الحل manual: distribute the source.

الواقع vs المفروض

المفروض إنت تخلّص scan في ساعتين. الواقع: scan محترم على هدف عنده detection بياخد يوم أو اتنين. لو الـ PM عايزها في ساعة، يبقى إنت إما هتحرق نفسك، أو هتكدب في التقرير.

Port Scanning بـ Nmap — الأوامر العملية

الـ port هو "الباب" بتاع الخدمة. nmap هي أم الأدوات. اللي مش متقنها مش هيوصل لحاجة.

المراحل بالترتيب

01
مسح سريع — اللي مفتوح فين
$ nmap -sS -p- --min-rate=2000 -T4 target.gov -oA quick
PORT STATE SERVICE 22/tcp open ssh 80/tcp open http 443/tcp open https 3306/tcp open mysql 8080/tcp open http-proxy
02
مسح عميق — على البورتات المفتوحة بس
$ nmap -sV -sC -p22,80,443,3306,8080 -oA deep target.gov
22/tcp ssh OpenSSH 7.4 (CVE-2018-15473 user enum) 80/tcp http Apache 2.4.29 3306/tcp mysql MySQL 5.7.20 — auth-bypass possible
03
NSE scripts — خلي nmap يفحص لك
bash
# سكربتات الكشف عن الثغرات
nmap --script vuln target.gov

# سكربتات HTTP المفيدة
nmap -p80,443 --script "http-enum,http-title,http-headers" target.gov

# اختبار SSL/TLS
nmap -p443 --script ssl-enum-ciphers,ssl-cert target.gov

أعلى 10 NSE scripts فعلاً بتنفع — مش حشو الـ docs

الـ NSE فيه آلاف scripts. 95% منهم نادراً ما تستخدمهم. دي اللي بتشتغل في كل engagement تقريباً:

discovery — قبل ما تخترق، اعرف

  1. http-enum — بيدور على paths معروفة (/admin، /.git، /phpmyadmin).
    bash
    nmap -p80,443 --script http-enum --script-args http-enum.basepath=/ target.gov
  2. http-title — Title bتاع كل web service. سريع وبيكشف admin panels.
  3. http-headers — بيطلع كل الـ headers. الـ Server, X-Powered-By, Set-Cookie بيقولوا قصص.
  4. dns-brute — subdomain enumeration من غير ما تخرج من nmap.
  5. smb-os-discovery + smb-enum-shares + smb-enum-users — Windows targets، نص شغل الـ AD recon هنا.

safe — مش هيكسرحاجة

  1. ssl-enum-ciphers — كشف TLS misconfig، expired certs، weak ciphers. بيدّيك grade زي SSL Labs بس offline.
    bash
    nmap -p443 --script ssl-enum-ciphers,ssl-cert,ssl-heartbleed target.gov
  2. banner — أبسط script. بياخد أول 1KB من كل service. بيكشف version في ثواني.

vuln — استخدمه بحذر

  1. smb-vuln-ms17-010 — EternalBlue. لسة بنلاقيه في 2026 على هدف "غريب". المرة الأخيرة لقيته في وزارة، السيرفر اللي شغّال من 2018 ومحدش لمسه.
  2. http-shellshock — CVE-2014-6271. القديم بيرجع.
  3. vulners — بياخد الـ banner اللي طلع من -sV ويربطه بـ CVE database. أسرع طريقة لـ "إيه CVEs المعروفة على الإصدار ده".
    bash
    nmap -sV --script vulners --script-args mincvss=7.0 target.gov
الفرق بين safe و vuln

--script safe = scripts ما بتعملش حاجة destructive.

--script vuln = ممكن يبعت payloads فعلية. على إنتاج بدون authorization مكتوبة، ده ممكن يخرّب.

على engagement حقيقي، اقرا الـ script الأول: nmap --script-help <name>. لو الـ description فيها "may crash" — قف.

Evasion — والحقيقة الناشفة

evasion ضد الـ detection الحديث

الـ flags اللي كل ما حد يكتب blog عن evasion يحطها:

  • -f — fragmentation. بيقسم الـ packets على fragments صغيرة. الـ stateful firewalls من 2010 ممكن تتبهدل. الـ NGFW الحديث بيـ reassemble قبل الـ inspection.
  • --source-port 53 — بيخلّيك تطلع من port 53 كأنك DNS. بيعدّي من firewalls عبيطة. الـ EDR الحديث بيبص على الـ payload مش الـ port.
  • -D RND:10 — decoys. بيبعت الـ scan من 10 IPs ملفّقين معاك. الـ IDS بيشوف 11 scanner. بس لو الـ blue team عندها NetFlow على الـ edge، هتعرف اللي رد فعل الـ TCP الكامل عليه (إنت)، والباقي noise.
  • -T0/-T1 — sneaky/paranoid. الـ T0 = packet كل 5 دقايق. على /24 = أسبوع.

الحقيقة: ضد EDR محترم (CrowdStrike، SentinelOne، Defender for Endpoint) و NDR شغّال (Darktrace، Vectra، ExtraHop) — الـ fragmentation و decoys دلوقتي بصمة لذاتها. الـ ML بيشوف الـ pattern: "ده nmap بيحاول يـ evade".

الـ evasion الوحيد اللي لسة شغّال: الوقت.

بطّء الـ scan لدرجة إنه يبان كـ noise طبيعي. واحد scan في الساعة من IPs مختلفة على ports مختلفة. الـ SIEM لازم يربطهم. ولو الـ rules ضعيفة، هيدخلوا تحت threshold الـ alert.

سلو هو الـ stealth الحقيقي. الباقي تمثيل stealth.

Vulnerability Scanning — أنت ع engagement، الزبون عنده 50 سيرفر، تشغّل إيه؟

تخيل السيناريو ده: PM دخل عليك، قالك "العميل عنده 50 سيرفر، عاوزين تقرير ثغرات الأسبوع الجاي". تشغّل إيه؟

الإجابة الكسولة

"Nessus على الكل". الـ Nessus هياخد يوم، يطلع 800 finding، 600 منهم false positive، و 5 critical حقيقية ضايعة في الزحمة.

الإجابة المهنية — اخلط

  1. Nuclei الأول على كل الـ web services. سريع (دقايق مش ساعات)، false positive قليل، الـ templates مكتوبة بصيغة موضّحة فبتعرف ليه finding ظهر.
    bash
    nuclei -l targets.txt -severity critical,high \
      -tags cve,exposure,oast -rl 50 -c 25
  2. Nessus / OpenVAS على الـ infrastructure (SSH، SMB، DB، RDP). قوته الحقيقية في الـ network protocols مش في الـ web. خليه يشتغل overnight.
  3. Nmap NSE vulners كـ second opinion. بيلاقي حاجات الـ commercial scanners بتفوّتها لأنها بتعتمد على banner مباشر مش على signature.
  4. يدوي — كل ما الـ scanners تطلعه، إنت اللي بتأكد. Nessus يقولك "outdated OpenSSL"، إنت بتجيب exploit حقيقي وتجرب.

Nessus vs OpenVAS vs Nuclei — الفرق العملي

Nuclei

OSS، YAML templates، سريع، الـ community بيكتب template للـ CVE في يوم اللي تطلع فيه.

قوته: web layer، misconfig، exposure.

ضعفه: ما بيعملش deep auth scanning ولا compliance checks.

Nessus

Tenable، تجاري، بـ ~$3500 في السنة.

قوته: credentialed scanning، compliance (PCI، HIPAA)، تغطية واسعة.

ضعفه: false positives كتير، التقرير لازم تنضّفه قبل ما تدّيه للعميل.

OpenVAS / Greenbone

OSS، الجد التجاري لـ Nessus قبل ما تتقفل.

قوته: مجاني، بيغطي كتير من اللي Nessus بيغطّيه.

ضعفه: الـ feed بيتأخّر أيام-أسابيع وراء Nessus، الـ UI بطيئة.

Nikto

قديم بس لسة شغّال. سريع لـ web server misconfig.

قوته: 6000+ checks، صفر setup.

ضعفه: صوته عالي جداً. الـ User-Agent بيقول "Nikto" بصراحة. WAF بيقفله في ثواني.

$ nuclei -u https://target.gov -severity critical,high -tags cve,exposure,oast
[critical] CVE-2024-3094 — XZ backdoor in OpenSSH [high] CVE-2023-23397 — Outlook NTLM leak [high] exposed .env file at /backup/.env
نصيحة من شغل حقيقي

متشغّلش كل templates Nuclei. عندك آلاف، وكتير منهم على tech ما عندكش. حدّد -tags أو -templates حسب الـ stack اللي شفته في الـ recon.

وقبل ما تبعت التقرير: راجع كل critical يدوياً. لو nuclei قال "critical" وإنت ما تأكدتش، التقرير بتاعك = صدفة.

Directory Bruteforcing — اللي مش لينك في الموقع

كتير من الـ endpoints الحساسة مش بتبقى ظاهرة في الـ UI. الـ bruteforcing هو اللي بيفضحها — و هنا بتلاقي الذهب.

$ ffuf -u https://target.gov/FUZZ -w /usr/share/seclists/Discovery/Web-Content/raft-large-words.txt -mc 200,301,403 -fs 0
/admin [301] /.git/config [200] /api/v1/users [200] /backup.zip [200] /phpinfo.php [200]
نصيحة
استخدم SecLists — أكبر مجموعة wordlists في المجال. اللي مش عنده SecLists بيشتغل بنص أدواته.

تعداد الخدمات الشائعة — اللي بيفضح الشبكة

SMB (Windows)

bash
enum4linux-ng -A target
crackmapexec smb target -u '' -p '' --shares
nxc smb target --users --groups

SNMP

bash
snmpwalk -v2c -c public target
onesixtyone -c community.txt target

LDAP / Active Directory

bash
ldapsearch -x -H ldap://target -b "DC=corp,DC=local"
bloodhound-python -d corp.local -u user -p pass -c All -ns target

الحماية — إزاي EDR/SIEM بيكشف scan فعلاً

لو إنت في blue team، الـ scan مش "لحظة ظهور". هو سلسلة من الـ events لازم تربطها.

على مستوى الـ network

Suricata signatures عملية

الـ ET-OPEN ruleset فيها قواعد جاهزة لـ nmap، nuclei، ffuf، gobuster. شغّلهم.

Suricata rule
alert tcp $EXTERNAL_NET any -> $HOME_NET any \
  (msg:"NMAP NSE Script Scan"; flow:to_server; \
  content:"|55 73 65 72 2d 41 67 65 6e 74 3a 20 4e 6d 61 70|"; \
  sid:9000001; rev:1;)

alert http any any -> $HOME_NET any \
  (msg:"Nuclei scanner User-Agent"; flow:to_server; \
  http.user_agent; content:"Nuclei"; nocase; \
  sid:9000002; rev:1;)

بس الـ signatures دي بتعمل match على defaults. اللي بيغيّر User-Agent بيعدّي. فالـ signatures مش الحل الكامل.

على مستوى الـ behavior

  • scan-rate threshold: أكتر من X SYN لـ Y destinations في Z ثواني = scan. الـ القيم بتعتمد على شبكتك. ابدأ بـ 100 dest في 60s، عدّل من الـ baseline.
  • connections without payload: SYN + RST من غير ما يتبعت data. الـ web server ما بيشوفش request، بس الـ flow logs شايفة.
  • distributed scan detection: هنا اللعبة الحقيقية. لو 50 IP مختلفة بتبعت SYN على 5 ports مختلفة لكل سيرفر — كل واحد لوحده تحت threshold، بس الـ aggregate scan كامل. الـ SIEM لازم يـ correlate على destination مش على source.
  • rare-port to known asset: سيرفر ما حدش بيكلّمه على port 8443 من سنة، فجأة 3 IPs بتجرّب. ده مش normal.

على مستوى الـ host (EDR)

  • الـ EDR بيشوف الـ TCP SYN/RST من kernel level. CrowdStrike وSentinelOne عندهم detection للـ "incoming scan" كـ behavior.
  • الـ honeypots على ports زي 4444، 31337 — الـ EDR لو شاف connection attempt عليهم، alert فوراً.

الـ controls اللي بتقفل السكة

  • Deny-by-default في الـ firewall. متفتحش غير اللي محتاجه فعلاً.
  • Rate limiting + SYN cookies في وش الـ SYN scan.
  • Honeypots — بورتات مفتوحة بنية بتسجل كل واحد بيقرّب.
  • Banner masking — لخبط بصمة الإصدار. مش حل بذاته بس بيضيع وقت المهاجم.
  • Geofencing على الـ admin endpoints. لو الـ engineering team كلها في القاهرة، ليه الـ SSH مفتوح من Ohio؟

الخلاصة الناشفة

Scanning مش زر "علشان نشوف ايه فيه".

هو قرار.

قرار بيحدد:

  • الـ engagement هيتم ولا الـ blue team هتقفلك في أول 5 دقايق.
  • الـ تقرير هيبقى فيه findings حقيقية ولا حشو من scanner ما حدش راجعه.
  • إنت محترم في شغلك ولا "بيـ run nmap -A وبيستنى".

اكتبها على ظهر إيدك قبل ما تفتح الـ terminal: scope، authorization، timing، source IP، هدف من الـ scan ده.

اوعى تشغّل scan وإنت مش عارف الإجابات الخمسة دي.

اللي بيعمل كده مش بيعمل engagement — بيعمل عك. والعك ده بيظهر في التقرير، وبيظهر قدام العميل، وبيظهر في الـ reputation.

الـ scan الناجح هو اللي العميل ما حسّش بيه — ولا فيه finding واحد ضاع.