
pagodo (Passive Google Dork) - أتمتة استخراج والبحث في Google Hacking Database
pagodo يقوم بأتمتة البحث في جوجل عن صفحات وتطبيقات ويب قد تكون عرضة للخطر على الإنترنت. يحل محل إجراء عمليات بحث جوجل يدويًا باستخدام واجهة متصفح ويب.
يتكون من جزأين. الجزء الأول هو ghdb_scraper.py الذي يسترجع أحدث ثغرات جوجل (dorks)، والجزء الثاني هو pagodo.py الذي يستخدم المعلومات التي جمعها ghdb_scraper.py.
مكتبة بحث جوجل الأساسية تستخدم الآن yagooglesearch الأكثر مرونة بدلاً من googlesearch. اطّلع على ملف README الخاص بـ yagooglesearch للحصول على شرح أعمق لاختلافات المكتبات وقدراتها.
هذا الإصدار من pagodo يدعم أيضًا الدعم الأصلي لبروتوكولات HTTP(S) وSOCKS5، لذا لا حاجة لتغليفه بأداة مثل proxychains4 إذا كنت بحاجة لدعم البروكسي. يمكنك تحديد عدة بروكسيات لاستخدامها بطريقة round-robin عن طريق توفير سلسلة مفصولة بفواصل من البروكسيات باستخدام المفتاح -p.
تحتفظ Offensive Security بقاعدة بيانات اختراق جوجل (GHDB) الموجودة هنا: https://www.exploit-db.com/google-hacking-database. وهي مجموعة من عمليات البحث في جوجل، تسمى dorks، يمكن استخدامها للعثور على أجهزة أو معلومات قيمة قد تكون عرضة للخطر والتي تلتقطها روبوتات بحث جوجل.
الشروط والأحكام الخاصة بـ pagodo هي نفس الشروط والأحكام الموجودة في yagooglesearch.
يتم توفير هذا الكود كما هو، وأنت المسؤول بالكامل عن كيفية استخدامه. قد يؤدي استخراج نتائج بحث جوجل إلى انتهاك شروط الخدمة. تحتوي مكتبة بحث جوجل بلغة Python أخرى على بعض المعلومات/النقاشات المثيرة للاهتمام:
الطريقة المفضلة لجوجل هي استخدام API.
النصوص البرمجية مكتوبة للـ Python 3.6+. قم باستنساخ مستودع git وتثبيت المتطلبات.
git clone https://github.com/opsdisk/pagodo.git
cd pagodo
python3 -m venv .venv # إذا كنت تستخدم بيئة افتراضية
source .venv/bin/activate # إذا كنت تستخدم بيئة افتراضية
pip install --upgrade pip setuptools
pip install -r requirements.txt
للبدء، يحتاج pagodo.py إلى قائمة بجميع ثغرات جوجل الحالية. يحتوي المستودع على مجلد dorks/ مع الثغرات الحالية وقت آخر تشغيل لـ ghdb_scraper.py. يُنصح بتشغيل ghdb_scraper.py للحصول على أحدث البيانات قبل تشغيل pagodo.py. يحتوي مجلد dorks/ على:
all_google_dorks.txt الذي يحتوي على جميع ثغرات جوجل، كل ثغرة في سطر منفصلall_google_dorks.json وهو استجابة JSON من GHDBفئات الثغرات:
categories = {
1: "Footholds",
2: "File Containing Usernames",
3: "Sensitives Directories",
4: "Web Server Detection",
5: "Vulnerable Files",
6: "Vulnerable Servers",
7: "Error Messages",
8: "File Containing Juicy Info",
9: "File Containing Passwords",
10: "Sensitive Online Shopping Info",
11: "Network or Vulnerability Data",
12: "Pages Containing Login Portals",
13: "Various Online devices",
14: "Advisories and Vulnerabilities",
}
اكتب جميع الثغرات إلى all_google_dorks.txt وall_google_dorks.json والفئات الفردية إذا كنت تريد المزيد من البيانات السياقية حول كل ثغرة.
python ghdb_scraper.py -s -j -i
ترجع الدالة ghdb_scraper.retrieve_google_dorks() قاموسًا بهيكل البيانات التالي:
ghdb_dict = {
"total_dorks": total_dorks,
"extracted_dorks": extracted_dorks,
"category_dict": category_dict,
}
استخدام شل Python (مثل python أو ipython) لاستكشاف البيانات:
import ghdb_scraper
dorks = ghdb_scraper.retrieve_google_dorks(save_all_dorks_to_file=True)
dorks.keys()
dorks["total_dorks"]
dorks["extracted_dorks"]
dorks["category_dict"].keys()
dorks["category_dict"][1]["category_name"]
python pagodo.py -d example.com -g dorks.txt
ترجع الدالة pagodo.Pagodo.go() قاموسًا بهيكل البيانات أدناه (الثغرات المستخدمة هي أمثلة وهمية):
{
"dorks": {
"inurl:admin": {
"urls_size": 3,
"urls": [
"https://github.com/marmelab/ng-admin",
"https://github.com/settings/admin",
"https://github.com/akveo/ngx-admin",
],
},
"inurl:gist": {
"urls_size": 3,
"urls": [
"https://gist.github.com/",
"https://gist.github.com/index",
"https://github.com/defunkt/gist",
],
},
},
"initiation_timestamp": "2021-08-27T11:35:30.638705",
"completion_timestamp": "2021-08-27T11:36:42.349035",
}
استخدام شل Python (مثل python أو ipython) لاستكشاف البيانات:
import pagodo
pg = pagodo.Pagodo(
google_dorks_file="dorks.txt",
domain="github.com",
max_search_result_urls_to_return_per_dork=3,
save_pagodo_results_to_json_file=None, # None = إنشاء اسم الملف تلقائيًا، وإلا مرر سلسلة للمسار واسم الملف
save_urls_to_file=None, # None = إنشاء اسم الملف تلقائيًا، وإلا مرر سلسلة للمسار واسم الملف
verbosity=5,
)
pagodo_results_dict = pg.go()
pagodo_results_dict.keys()
pagodo_results_dict["initiation_timestamp"]
pagodo_results_dict["completion_timestamp"]
for key,value in pagodo_results_dict["dorks"].items():
print(f"dork: {key}")
for url in value["urls"]:
print(url)
يمكن استخدام المفتاح -d لتحديد نطاق النتائج لنطاق معين ويعمل كعامل بحث جوجل:
site:github.com
-i - حدد الحد الأدنى للتأخير بين عمليات بحث الثغرات، بالثواني. لا تجعلها صغيرة جدًا، وإلا سيتم حظر عنوان IP الخاص بك (HTTP 429) بسرعة.-x - حدد الحد الأقصى للتأخير بين عمليات بحث الثغرات، بالثواني. لا تجعلها كبيرة جدًا وإلا ستستغرق عمليات البحث وقتًا طويلاً.يتم استخدام القيم المقدمة من -i و -x لإنشاء قائمة من 20 وقت انتظار عشوائي، يتم اختيارها بشكل عشوائي بين كل عملية بحث ثغرة مختلفة في جوجل.
-m - الحد الأقصى الإجمالي لنتائج البحث المراد إرجاعها لكل ثغرة جوجل. يمكن لكل طلب بحث جوجل سحب 100 نتيجة كحد أقصى في المرة الواحدة، لذا إذا اخترت -m 500، فسيتم إجراء 5 استعلامات بحث منفصلة لكل ثغرة جوجل، مما سيزيد من الوقت اللازم للإكمال.
-o [المسار الاختياري/للملف.json] - حفظ المخرجات إلى ملف JSON. إذا لم تحدد اسم ملف، فسيتم إنشاء ملف بختم زمني.
-s [المسار الاختياري/للملف.txt] - حفظ عناوين URL إلى ملف نصي. إذا لم تحدد اسم ملف، فسيتم إنشاء ملف بختم زمني.
--log [المسار الاختياري/للملف.log] - حفظ السجلات إلى الملف المحدد. إذا لم تحدد اسم ملف، فسيتم استخدام الملف الافتراضي pagodo.py.log في جذر دليل pagodo.
إن إجراء أكثر من 7300 طلب بحث إلى جوجل بأسرع ما يمكن لن ينجح ببساطة. ستقوم جوجل بحقك باكتشافه كـ bot وحظر عنوان IP الخاص بك لفترة زمنية. أحد الحلول هو استخدام مجموعة من بروكسيات HTTP(S)/SOCKS وتمريرها إلى pagodo.
مرر سلسلة مفصولة بفواصل من البروكسيات إلى pagodo باستخدام المفتاح -p.
python pagodo.py -g dorks.txt -p http://myproxy:8080,socks5h://127.0.0.1:9050,socks5h://127.0.0.1:9051
يمكنك حتى تقليل قيم -i و -x لأنك ستستخدم عناوين IP مختلفة للبروكسيات. يتم اختيار البروكسيات التي تم تمريرها إلى pagodo بطريقة round robin.
حل آخر هو استخدام proxychains4 لتوزيع الاستعلامات بطريقة round robin.
تثبيت proxychains4
apt install proxychains4 -y
قم بتحرير ملف التكوين /etc/proxychains4.conf لتوزيع الاستعلامات عبر خوادم بروكسي مختلفة. في المثال أدناه، تم إعداد بروكسي socks ديناميكي مختلفين بمنافذ استماع محلية مختلفة (9050 و 9051).
vim /etc/proxychains4.conf
round_robin
chain_len = 1
proxy_dns
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
[ProxyList]
socks4 127.0.0.1 9050
socks4 127.0.0.1 9051
ضع proxychains4 أمام سكريبت pagodo.py وسيتم توجيه كل استعلام request عبر بروكسي مختلف (وبالتالي من عنوان IP مختلف).
proxychains4 python pagodo.py -g dorks/all_google_dorks.txt -o [المسار الاختياري/للملف.json] -s [المسار الاختياري/للملف.txt]
لاحظ أن هذا قد لا يبدو طبيعيًا لجوجل إذا قمت بـ:
google.com من IP #1لهذا السبب، يفضل استخدام دعم البروكسي المدمج -p لأنه، كما هو موضح في توثيق yagooglesearch، "يتم استخدام البروكسي المقدم طوال دورة حياة البحث بالكامل لجعله يبدو أكثر بشرية، بدلاً من التنقل بين بروكسيات مختلفة لأجزاء مختلفة من البحث."
موزع بموجب رخصة GNU العامة الإصدار 3.0. راجع LICENSE لمزيد من المعلومات.
رابط المشروع: https://github.com/opsdisk/pagodo