Scanning بدون ما الـ SOC يشوفك
nmap و nuclei و ffuf — وإزاي تطلع الخدمة وراها إيه
ليه إنت بتعمل nmap -A على /16 ومستغرب الـ SOC شافك؟
- طب يعني الـ SOC هيشوفني بمجرد ما أبعت أول SYN؟؟
يا نجم الجيل.. السؤال مش "هيشوفني ولا لأ". ده سؤال مستجد. السؤال الصح: "هيشوفني إمتى، وعارف يحدد إنت مين، وعنده logs لـ كام يوم وراك؟". لو الهدف عنده SOC نص نايم نص صاحي، إنت هتظهر له على شاشة. أنت ونصيبك في الـ tier-1 اللي قاعد قدامها.
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 نفسها:
- إنت بتبعت SYN.
- السيرفر يرد SYN/ACK لو الـ port مفتوح، أو RST لو مقفول.
- إنت تبعت 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.
تعمل إيه؟
اللي ما تعملوش
# الفلاحة المعتادة:
nmap -A -T4 -p- app.target.gov
# اللي بيحصل:
# - الـ WAF بيـ block IP بتاعك بعد 30 ثانية
# - الـ SOC ticket مفتوحة وفيها اسمك (لو الـ engagement مش authorized بالشكل ده)
# - الـ engagement اتحرق قبل ما يبدأاللي بيتعمل فعلياً
قبل ما تبعت SYN واحد، اعمل passive: crt.sh، shodan، censys، archive.org. خد الصورة من بره.
الـ /16 على كل البورتات = 65k port × آلاف IPs. إنت بتفصّل وقت السيرفر علشان إيه؟
ابدأ بـ top-100 من nmap (--top-ports 100). البورتات النادرة بعدها لو في سبب.
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؟ آه برضو.
لو عندك authorization، اطلع من 5-10 jump hosts مختلفة. كل واحد ياخد جزء من الـ scope. الـ rate limit per-IP، يبقى الحل manual: distribute the source.
المفروض إنت تخلّص scan في ساعتين. الواقع: scan محترم على هدف عنده detection بياخد يوم أو اتنين. لو الـ PM عايزها في ساعة، يبقى إنت إما هتحرق نفسك، أو هتكدب في التقرير.
Port Scanning بـ Nmap — الأوامر العملية
الـ port هو "الباب" بتاع الخدمة. nmap هي أم الأدوات. اللي مش متقنها مش هيوصل لحاجة.
المراحل بالترتيب
# سكربتات الكشف عن الثغرات
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 — قبل ما تخترق، اعرف
- http-enum — بيدور على paths معروفة (
/admin،/.git،/phpmyadmin).bashnmap -p80,443 --script http-enum --script-args http-enum.basepath=/ target.gov - http-title — Title bتاع كل web service. سريع وبيكشف admin panels.
- http-headers — بيطلع كل الـ headers. الـ
Server,X-Powered-By,Set-Cookieبيقولوا قصص. - dns-brute — subdomain enumeration من غير ما تخرج من nmap.
- smb-os-discovery + smb-enum-shares + smb-enum-users — Windows targets، نص شغل الـ AD recon هنا.
safe — مش هيكسرحاجة
- 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 - banner — أبسط script. بياخد أول 1KB من كل service. بيكشف version في ثواني.
vuln — استخدمه بحذر
- smb-vuln-ms17-010 — EternalBlue. لسة بنلاقيه في 2026 على هدف "غريب". المرة الأخيرة لقيته في وزارة، السيرفر اللي شغّال من 2018 ومحدش لمسه.
- http-shellshock — CVE-2014-6271. القديم بيرجع.
- vulners — بياخد الـ banner اللي طلع من -sV ويربطه بـ CVE database. أسرع طريقة لـ "إيه CVEs المعروفة على الإصدار ده".bash
nmap -sV --script vulners --script-args mincvss=7.0 target.gov
--script safe = scripts ما بتعملش حاجة destructive.
--script vuln = ممكن يبعت payloads فعلية. على إنتاج بدون authorization مكتوبة، ده ممكن يخرّب.
على engagement حقيقي، اقرا الـ script الأول: nmap --script-help <name>. لو الـ description فيها "may crash" — قف.
Evasion — والحقيقة الناشفة
الـ 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 حقيقية ضايعة في الزحمة.
الإجابة المهنية — اخلط
- Nuclei الأول على كل الـ web services. سريع (دقايق مش ساعات)، false positive قليل، الـ templates مكتوبة بصيغة موضّحة فبتعرف ليه finding ظهر.bash
nuclei -l targets.txt -severity critical,high \ -tags cve,exposure,oast -rl 50 -c 25 - Nessus / OpenVAS على الـ infrastructure (SSH، SMB، DB، RDP). قوته الحقيقية في الـ network protocols مش في الـ web. خليه يشتغل overnight.
- Nmap NSE vulners كـ second opinion. بيلاقي حاجات الـ commercial scanners بتفوّتها لأنها بتعتمد على banner مباشر مش على signature.
- يدوي — كل ما الـ scanners تطلعه، إنت اللي بتأكد. Nessus يقولك "outdated OpenSSL"، إنت بتجيب exploit حقيقي وتجرب.
Nessus vs OpenVAS vs Nuclei — الفرق العملي
OSS، YAML templates، سريع، الـ community بيكتب template للـ CVE في يوم اللي تطلع فيه.
قوته: web layer، misconfig، exposure.
ضعفه: ما بيعملش deep auth scanning ولا compliance checks.
Tenable، تجاري، بـ ~$3500 في السنة.
قوته: credentialed scanning، compliance (PCI، HIPAA)، تغطية واسعة.
ضعفه: false positives كتير، التقرير لازم تنضّفه قبل ما تدّيه للعميل.
OSS، الجد التجاري لـ Nessus قبل ما تتقفل.
قوته: مجاني، بيغطي كتير من اللي Nessus بيغطّيه.
ضعفه: الـ feed بيتأخّر أيام-أسابيع وراء Nessus، الـ UI بطيئة.
قديم بس لسة شغّال. سريع لـ web server misconfig.
قوته: 6000+ checks، صفر setup.
ضعفه: صوته عالي جداً. الـ User-Agent بيقول "Nikto" بصراحة. WAF بيقفله في ثواني.
متشغّلش كل templates Nuclei. عندك آلاف، وكتير منهم على tech ما عندكش. حدّد -tags أو -templates حسب الـ stack اللي شفته في الـ recon.
وقبل ما تبعت التقرير: راجع كل critical يدوياً. لو nuclei قال "critical" وإنت ما تأكدتش، التقرير بتاعك = صدفة.
Directory Bruteforcing — اللي مش لينك في الموقع
كتير من الـ endpoints الحساسة مش بتبقى ظاهرة في الـ UI. الـ bruteforcing هو اللي بيفضحها — و هنا بتلاقي الذهب.
تعداد الخدمات الشائعة — اللي بيفضح الشبكة
SMB (Windows)
enum4linux-ng -A target
crackmapexec smb target -u '' -p '' --shares
nxc smb target --users --groupsSNMP
snmpwalk -v2c -c public target
onesixtyone -c community.txt targetLDAP / Active Directory
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
الـ ET-OPEN ruleset فيها قواعد جاهزة لـ nmap، nuclei، ffuf، gobuster. شغّلهم.
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 واحد ضاع.