OSINT — عرض توضيحي موجَّه
هدف واحد. حقيقي. لن نرسل له شيئاً. وفي النهاية، سنعرف: نطاقاته الفرعية، تقنياته، موظفيه الرئيسيين، تسريباته، ونقاط ضعفه الخمس المحتملة.
ما ستُتقنه بعد هذا الدرس
- الانتقال من مجرد اسم نطاق إلى خريطة بنية تحتية خلال 90 دقيقة.
- استخدام
crt.sh،subfinder،amass -passive،dnsx(الوضع السلبي)،theHarvester،whatweb. - التمييز بين النطاقات الفرعية الحية والميتة دون لمسها.
- تقاطع ثلاثة مصادر مستقلة قبل الاستنتاج.
- إنتاج بطاقة هدف من صفحتين قابلة للاستغلال ابتداءً من الوحدة 4.
الخطوة 0 — نقطة الانطلاق
سطر بسيط:
الهدف : demo-corp.com
البرنامج : bug bounty عمومي، النطاق المشمول = *.demo-corp.com
هذا كل شيء. ننطلق من هنا.
أنشئ مجلد العمل:
mkdir -p ~/osint/demo-corp/{dns,subs,tech,people,leaks,archive}
cd ~/osint/demo-corp
كل عائلة مصادر سيكون لها مجلدها الفرعي. الانضباط منذ البداية.
الخطوة 1 — DNS الأساسي (دقيقتان)
السجلات الأساسية، واحداً تلو الآخر:
for t in A AAAA MX NS TXT SOA CAA; do
echo "=== $t ==="
dig +short demo-corp.com $t
done | tee dns/racine.txt
مخرجات نموذجية:
=== A ===
104.21.44.15
172.67.187.219
=== AAAA ===
=== MX ===
1 aspmx.l.google.com.
5 alt1.aspmx.l.google.com.
=== NS ===
ada.ns.cloudflare.com.
kirk.ns.cloudflare.com.
=== TXT ===
"v=spf1 include:_spf.google.com include:mailgun.org -all"
"google-site-verification=abc123def456..."
"MS=ms84726311"
"stripe-verification=xyz789..."
=== SOA ===
ada.ns.cloudflare.com. dns.cloudflare.com. 2354...
=== CAA ===
0 issue "letsencrypt.org"
0 issue "digicert.com"
القراءة:
- A: عنوانا IP في مجموعة Cloudflare (104.21.x و172.67.x). الموقع خلف Cloudflare — لن نرى عنوان IP الحقيقي دون جهد.
- MX: Google Workspace. لا خادم بريد خاص بهم مباشرة.
- NS:
ada.ns.cloudflare.com— Cloudflare يدير DNS أيضاً. متّسق. - TXT:
- SPF يُصرِّح لـ Google وMailgun. خدمتا SaaS تم تحديدهما.
- google-site-verification: يستخدمون Google Search Console.
- MS=: يستخدمون Microsoft (Bing Webmaster، غالباً).
- stripe-verification: يعالجون مدفوعات عبر Stripe. هذا يعني PCI-DSS في مكان ما.
- CAA: فقط Let's Encrypt وDigiCert يمكنهما الإصدار. إشارة جيدة من ناحية النظافة.
في دقيقتين، نعرف بالفعل: Cloudflare، Google Workspace، Mailgun، Stripe. لم نرسل أي حزمة إلى demo-corp.com.
الخطوة 2 — DMARC وموقف البريد الإلكتروني (دقيقة واحدة)
dig +short _dmarc.demo-corp.com TXT
المخرج:
"v=DMARC1; p=none; rua=mailto:dmarc-reports@demo-corp.com"
القراءة: p=none. سياسة DMARC موجودة لكنها لا تفعل شيئاً. النتيجة الملموسة: يمكن لمهاجم انتحال رسائل بريد يُفترض أنها مرسلة من demo-corp.com، وستمر هذه الرسائل عند المستلم حتى لو فشلت في DMARC. هذا متجه تصيد يجب تدوينه للوحدة 6.
سجّل هذا في dns/dmarc.txt.
الخطوة 3 — النطاقات الفرعية عبر crt.sh (3 دقائق)
شفافية الشهادات، أفضل مصدر للدفعة الأولى من النطاقات الفرعية. نستجوب بصيغة JSON، وننظّف بـ jq:
curl -s 'https://crt.sh/?q=%25.demo-corp.com&output=json' \
| jq -r '.[].name_value' \
| tr '[:upper:]' '[:lower:]' \
| sed 's/^\*\.//' \
| sort -u \
> subs/from-crt.txt
wc -l subs/from-crt.txt
مخرجات نموذجية:
127 subs/from-crt.txt
مقتطف:
admin.demo-corp.com
api.demo-corp.com
api-dev.demo-corp.com
api-staging.demo-corp.com
beta.demo-corp.com
blog.demo-corp.com
cdn.demo-corp.com
customer.demo-corp.com
demo-corp.com
dev.demo-corp.com
docs.demo-corp.com
help.demo-corp.com
internal.demo-corp.com
jenkins.demo-corp.com
jira.demo-corp.com
mail.demo-corp.com
monitoring.demo-corp.com
old-admin.demo-corp.com
partners.demo-corp.com
prod.demo-corp.com
sso.demo-corp.com
staging.demo-corp.com
status.demo-corp.com
support.demo-corp.com
vpn.demo-corp.com
web.demo-corp.com
www.demo-corp.com
ثلاثة أسطر تُضحك المهاجم:
internal.demo-corp.com— نطاق فرعي لم يكن يجب أن يظهر للعلن.jenkins.demo-corp.com— خادم CI/CD، تاريخياً منجم ثغرات.old-admin.demo-corp.com— لوحة الإدارة القديمة. هذا يفوح منه النسيان.
في 3 دقائق، انتقلنا من اسم واحد إلى 127.
الخطوة 4 — التقاطع مع subfinder وamass -passive
subfinder يستجوب حوالي عشرين واجهة API خارجية (Shodan، VirusTotal، SecurityTrails، DNSDumpster…) ويُرجع قائمة. سلبي بنسبة 100%.
subfinder -d demo-corp.com -silent -all -o subs/from-subfinder.txt
wc -l subs/from-subfinder.txt
143 subs/from-subfinder.txt
كذلك، amass في الوضع السلبي:
amass enum -passive -d demo-corp.com -o subs/from-amass.txt
ثم ندمج:
cat subs/from-*.txt | sort -u > subs/all-passive.txt
wc -l subs/all-passive.txt
178 subs/all-passive.txt
من 127 إلى 178. كل مصدر جلب بعض الاكتشافات. لهذا نتقاطع.
الخطوة 5 — التحليل السلبي مع dnsx
انتباه: dnsx يُحلِّل الأسماء. كل تحليل يمر عبر محلّل DNS عمومي (Google 8.8.8.8 افتراضياً). هذا لا يزال سلبياً بالنسبة للهدف إذا استخدمت محلّلاً لا يملكه الهدف. تحقق من أن خوادم أسماء demo-corp.com ليست محلّلاتك (هذا هو الحال هنا: Cloudflare يدير DNS الخاص بهم، لكن dnsx لديك سيستجوب 1.1.1.1 الخاص بـ Cloudflare Public — وهي خدمة مختلفة).
dnsx -l subs/all-passive.txt -a -resp -silent -r 1.1.1.1,8.8.8.8 \
-o subs/all-resolved.txt
head subs/all-resolved.txt
المخرج:
admin.demo-corp.com [104.21.44.15]
api.demo-corp.com [104.21.44.15]
api-dev.demo-corp.com [3.98.14.202]
api-staging.demo-corp.com [104.21.44.15]
internal.demo-corp.com [192.168.10.5]
jenkins.demo-corp.com [3.98.14.209]
old-admin.demo-corp.com [66.42.11.198]
ثلاثة أسطر معبِّرة:
internal.demo-corp.comيُحلَّل إلى 192.168.10.5 — عنوان IP خاص منشور في DNS عمومي. النطاق الفرعي مُخصَّص للوصول عبر VPN، لكن وجوده في DNS يؤكد أن هذه الخدمة موجودة. يجب الإبلاغ عنه.api-dev.demo-corp.comعلى3.98.x.x— كتلة AWS ca-central-1، ليست خلف Cloudflare. هذا الخادم الحقيقي المكشوف. هدف ذو أولوية للمرحلة الفعّالة.old-admin.demo-corp.comعلى66.42.x.x— Vultr. خادم منسي، خارج CDN الرئيسي. هدف ذو أولوية أيضاً.
دوّن هذه الأسطر الثلاثة. ستوجّه كل الوحدة 4.
الخطوة 6 — بصمة تقنية سلبية
انتباه: whatweb وwappalyzer يحمّلان الصفحة — وهذا فعّال. للبقاء في سلبية صارمة، نستخدم:
- BuiltWith (عبر واجهة الويب من متصفحك — لكن متصفحك سيحمّل BuiltWith، لا الهدف).
- Shodan:
shodan host <IP>يُرجع ما جمعه Shodan مسبقاً.
shodan host 3.98.14.202 > tech/shodan-api-dev.txt
cat tech/shodan-api-dev.txt
نوع المخرج:
3.98.14.202
Hostnames: ec2-3-98-14-202.ca-central-1.compute.amazonaws.com
Country: Canada
City: Montréal
Organization: Amazon.com, Inc.
Open Ports: 22, 80, 443, 8080
22/tcp SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.5
80/tcp nginx/1.18.0
443/tcp nginx/1.18.0 — TLSv1.3 — CN=api-dev.demo-corp.com
8080/tcp Django DEBUG page found
السطر الذهبي: Django DEBUG page found. Shodan رأى مسبقاً وضع تصحيح Django مكشوفاً على المنفذ :8080. وضع تصحيح Django المكشوف يفضح:
- الستاك الكامل عند حدوث خطأ.
- متغيرات البيئة (وبالتالي غالباً مفاتيح سرّية).
- أحياناً
SECRET_KEYكاملاً.
للتو، وجدنا دون إرسال حزمة واحدة إلى demo-corp.com، ثغرة يُرجَّح أنها حرجة. سنؤكدها في الأسبوع 4.
دوّن الاكتشاف في tech/decouvertes.md:
- [حرج] api-dev.demo-corp.com:8080 — Django في وضع DEBUG (المصدر: Shodan)
- [معلومة] api-dev.demo-corp.com: Nginx 1.18، OpenSSH 8.2 على Ubuntu 20
الخطوة 7 — الأشخاص الرئيسيون (theHarvester + LinkedIn)
theHarvester -d demo-corp.com -b linkedin,bing,duckduckgo -l 500 \
-f people/harvester.html
theHarvester يستجوب واجهات API خارجية وLinkedIn (عبر Bing عموماً). نوع المخرج:
[*] Emails found: 34
admin@demo-corp.com
contact@demo-corp.com
j.dupuis@demo-corp.com
m.tremblay@demo-corp.com
...
[*] Hosts found:
(نفس ما وجدناه سابقاً، مكرر)
[*] LinkedIn profiles (via Bing):
Marie Tremblay - CTO at Demo Corp
Jean Dupuis - Senior DevOps at Demo Corp
Étienne Roy - Support Lead at Demo Corp
...
نمط البريد الإلكتروني يظهر فوراً: initiale.nom@demo-corp.com. انطلاقاً من LinkedIn، يمكنك تخمين بريد أغلب موظفي العميل، دون أن تسألهم أبداً.
جمّع في people/personnes.csv:
prenom,nom,titre,email,linkedin
Marie,Tremblay,CTO,m.tremblay@demo-corp.com,https://www.linkedin.com/in/marietremblay
Jean,Dupuis,Senior DevOps,j.dupuis@demo-corp.com,...
Étienne,Roy,Support Lead,e.roy@demo-corp.com,...
هذا الملف يخدم الوحدة 6 (الهندسة الاجتماعية).
الخطوة 8 — التسريبات العمومية
# HaveIBeenPwned حسب النطاق — يتطلب مفتاح API (مدفوع لكن رخيص).
curl -s -H "hibp-api-key: $HIBP_KEY" \
"https://haveibeenpwned.com/api/v3/breacheddomain/demo-corp.com" \
| jq . > leaks/hibp.json
# لمحة عامة:
jq -r 'keys[] as $k | "\($k) → \(.[$k] | join(", "))"' leaks/hibp.json | head
المخرج:
j.dupuis → Adobe, Collection#1, MyFitnessPal
support → Collection#1
etienne.roy → LinkedIn, Dropbox
حسابان تقنيان (j.dupuis، etienne.roy) قد سُرِّبا بالفعل في تفريغات عمومية. إذا كان العميل يعيد استخدام كلمات المرور — وإحصائياً، يمكن لمختبر الاختراق أن يراهن على ذلك — سيكون بالإمكان محاولة password spraying في الأسبوع 5.
أكمل ببحث GitHub:
- انتقل إلى github.com/search?type=commits&q=%22demo-corp.com%22.
- انتقل إلى
github.com/<employe>?tab=repositoriesلكل موظف مُدرَج.
ابحث عن مستودعات باسم demo-corp-*، scripts، backups، dotfiles. نجد فيها بانتظام:
- ملف
.envيحتوي على أسرار. - سكربتات بكلمات مرور مضمّنة.
- روابط داخلية.
في عرضنا، مستودع dotfiles عمومي لموظف سابق يحتوي على ملف deploy.sh بـ:
ssh deploy@old-admin.demo-corp.com -i ~/.ssh/deploy-key
هدف مؤكَّد: old-admin.demo-corp.com، حساب deploy. سيُستغَل في الأسبوع 4.
الخطوة 9 — الأرشيفات (Wayback Machine)
curl -s "https://web.archive.org/cdx/search/cdx?url=demo-corp.com/*&output=json&limit=200" \
| jq -r '.[1:] | .[] | .[2]' \
| sort -u > archive/urls-historiques.txt
wc -l archive/urls-historiques.txt
المخرج:
612 archive/urls-historiques.txt
عملية grep على كلمات مفتاحية مُنبِّهة:
grep -iE 'admin|backup|test|debug|swagger|api-doc|internal' archive/urls-historiques.txt
https://demo-corp.com/admin-old/
https://demo-corp.com/api/v1/debug
https://demo-corp.com/backup.sql (2019)
https://demo-corp.com/swagger.json
backup.sql في 2019 — رُبَّما حُذِف منذ ذلك الحين، لكن سنتحقق في الوحدة 4: Wayback Machine لا يضمن الحذف من جانب الخادم.
الخطوة 10 — توحيد البطاقة
افتح ~/osint/demo-corp/fiche-cible.md واملأه بما سبق. الأهداف ذات الأولوية تُبرَز بخط عريض.
# بطاقة الهدف — demo-corp.com (2026-04-15)
## 1. الأصول المؤكَّدة
- النطاق الجذري: demo-corp.com (Cloudflare DNS + بروكسي)
- النطاقات الفرعية: 178 تم جمعها، منها:
- **api-dev.demo-corp.com → AWS ca-central-1 (3.98.14.202)، Django DEBUG على :8080**
- **old-admin.demo-corp.com → Vultr (66.42.11.198)، حساب deploy مفترَض**
- internal.demo-corp.com → 192.168.10.5 (خاص)، منشور خطأً
- jenkins.demo-corp.com → AWS
- jira.demo-corp.com → Atlassian Cloud (خارج المحيط، يجب توضيحه)
## 2. المحيط الذي يجب التفاوض عليه مع العميل
- internal.demo-corp.com (عنوان IP خاص منشور): يُضاف إلى RoE؟
- النطاقات الفرعية Atlassian وGoogle: خارج المحيط.
## 3. التقنيات
- الواجهة (www): Next.js خلف Cloudflare
- API الإنتاج: غير معروف، مُصفّى عبر Cloudflare
- API التطوير: Django، Nginx 1.18، Ubuntu 20 (المصدر: Shodan)
- المراسلة: Google Workspace
- خدمات SaaS المرتبطة: Stripe، Mailgun، Atlassian، Sentry
## 4. الثغرات المحتملة (يجب تأكيدها في الأسبوع 4)
- حرج: Django DEBUG مكشوف على api-dev:8080
- عالٍ : old-admin.demo-corp.com — لوحة إدارة موروثة
- متوسط : DMARC p=none ← تصيد منتحل ممكن
- متوسط : backup.sql (2019) — موجود على الخادم الحالي؟
## 5. الأشخاص الرئيسيون (المصدر: LinkedIn + theHarvester)
- Marie Tremblay, CTO — m.tremblay@demo-corp.com
- Jean Dupuis, Sr DevOps — j.dupuis@demo-corp.com [تسريب HIBP × 3]
- Étienne Roy, Support Lead — e.roy@demo-corp.com [تسريب HIBP × 2]
+ 21 آخرين في people/personnes.csv
## 6. التسريبات العمومية
- HIBP: حسابان بقيمة عالية مع احتمال إعادة استخدام كلمات المرور
- GitHub: dotfiles لموظف سابق تذكر old-admin.demo-corp.com وحساب deploy
## 7. الخطوة التالية (الوحدة 4)
1. تأكيد Django DEBUG على api-dev:8080 — 30 دقيقة.
2. رسم خريطة old-admin.demo-corp.com: المنافذ، الإصدارات — 45 دقيقة.
3. التحقق من /backup.sql على www — 5 دقائق.
4. رشّ كلمات مرور حذر على الحسابين المُسرَّبين في HIBP — 30 دقيقة.
الحصيلة
في 90 دقيقة، دون إرسال أي حزمة إلى demo-corp.com:
- حصلنا على 178 نطاقاً فرعياً.
- حصلنا على ثغرة حرجة شبه مؤكدة (Django DEBUG مكشوف).
- حصلنا على هدفين ثانويين بقيمة عالية (
old-admin،internal). - حصلنا على خطة هجوم للأسبوع 4.
- حصلنا على حسابات مُسرَّبة قابلة للاستغلال لاحقاً.
- الهدف لا يعرف شيئاً.
هذه هي قوة OSINT عند إجرائه بإتقان. إنها الوحدة التي تُدرّ أكثر في كل دقيقة مستثمَرة.
الدرس القادم: دورك أنت. تختار برنامج bug bounty وتعيد الشيء نفسه، بشكل مستقل.