Certificate Transparency: الشهادات بتتكلم
إزاي سجلات Certificate Transparency العامة بتكشف أسماء subdomains، وإزاي تستخدم crt.sh، وتطلّع الأسماء من نتيجة JSON بـ Python.
نص شرح المعلم والكود الذي كتبه ونتيجة تشغيله، بنفس ترتيب الدرس.
أي موقع بيستخدم HTTPS، لازم يبقى عنده شهادة SSL. والمفاجأة إن كل شهادة بتطلع، بتتسجّل في سجل عام، أي حد يقدر يقراه.
السجل ده اسمه Certificate Transparency. اتعمل علشان يكشف الشهادات المزيّفة. بس كل شهادة فيها أسماء الـ domains اللي بتحميها. يعني الشركة لو عملت شهادة لـ internal hr، الاسم ده بقى عام.
أشهر موقع للبحث فيه هو crt dot sh. تكتب percent dot وبعدها الـ domain، علشان يجيب كل الـ subdomains. وتقدر تطلب النتيجة JSON علشان تشتغل عليها بالـ code.
وده جمع سلبي تماماً: إنت بتسأل crt dot sh، مش الهدف. خلّي بالك من الـ wildcard، زي star dot dev، معناها إن فيه subdomains كتير تحت dev. والشهادات القديمة ممكن تكشف أسماء لسه شغّالة. هنا نتيجة JSON محفوظة من crt dot sh. كل شهادة فيها name value، وساعات فيها أكتر من اسم، مفصولين بسطر جديد. فنقسم، ونحط الأسماء في set علشان نشيل التكرار. نشغّل… لقينا internal hr، وده اسم ما كانش في الـ wordlist بتاعتنا خالص. بس فيه اسم بادئ بـ star dot، وده مش اسم حقيقي تقدر تزوره.
import json
# Saved answer of https://crt.sh/?q=%25.example-corp.com&output=json (shortened)
data = json.loads("""[
{"name_value": "example-corp.com\\nwww.example-corp.com", "not_before": "2024-01-10"},
{"name_value": "mail.example-corp.com", "not_before": "2024-02-01"},
{"name_value": "*.dev.example-corp.com", "not_before": "2024-03-15"},
{"name_value": "internal-hr.example-corp.com", "not_before": "2023-06-20"},
{"name_value": "www.example-corp.com", "not_before": "2024-06-10"}
]""")
names = set()
for cert in data:
for name in cert["name_value"].split("\n"):
names.add(name.lower())
for name in sorted(names):
print(name)
print(len(names), "unique names from", len(data), "certificates")المخرجات
*.dev.example-corp.com example-corp.com internal-hr.example-corp.com mail.example-corp.com www.example-corp.com 5 unique names from 5 certificates
دورك: شيل star dot من أول أي اسم قبل ما تضيفه، باستخدام removeprefix.
استخدم name.lower().removeprefix("*.") قبل الإضافة.
الحل: نشغّل… بقى عندنا dev dot example corp، ونقدر نعمل عليه brute force تاني لِلّي تحته.
import json
# Saved answer of https://crt.sh/?q=%25.example-corp.com&output=json (shortened)
data = json.loads("""[
{"name_value": "example-corp.com\\nwww.example-corp.com", "not_before": "2024-01-10"},
{"name_value": "mail.example-corp.com", "not_before": "2024-02-01"},
{"name_value": "*.dev.example-corp.com", "not_before": "2024-03-15"},
{"name_value": "internal-hr.example-corp.com", "not_before": "2023-06-20"},
{"name_value": "www.example-corp.com", "not_before": "2024-06-10"}
]""")
names = set()
for cert in data:
for name in cert["name_value"].split("\n"):
names.add(name.lower().removeprefix("*."))
for name in sorted(names):
print(name)
print(len(names), "unique names from", len(data), "certificates")المخرجات
dev.example-corp.com example-corp.com internal-hr.example-corp.com mail.example-corp.com www.example-corp.com 5 unique names from 5 certificates
الدرس الجاي: Google Dorking، إزاي تخلّي محرك البحث يلاقيلك ملفات وصفحات ما كانش المفروض تبقى عامة. يلا بينا.
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