
زاحف متصفح قوي لأدوات فحص الثغرات الأمنية على الويب
زاحف متصفح قوي لأدوات فحص الثغرات الأمنية على الويب
الوثيقة الإنجليزية | 中文文档
crawlergo هو زاحف متصفح يستخدم وضع chrome headless لجمع عناوين URL. يقوم بربط النقاط الرئيسية لصفحة الويب بأكملها مع مرحلة عرض DOM، ويملأ النماذج ويقدمها تلقائياً، مع تشغيل ذكي لأحداث JavaScript، ويجمع أكبر عدد ممكن من الإدخالات التي يعرضها الموقع. وحدة إزالة التكرار المدمجة في عناوين URL تقوم بتصفية عدد كبير من عناوين URL شبه الثابتة، مع الحفاظ على سرعة تحليل وزحف سريعة حتى للمواقع الكبيرة، وتنتج في النهاية مجموعة عالية الجودة من نتائج الطلبات.
يدعم crawlergo حالياً الميزات التالية:

يرجى قراءة وتأكيد إخلاء المسؤولية بعناية قبل التثبيت والاستخدام.
البناء
make build
make build_all
إذا كنت تستخدم نظام Linux وأظهر Chrome نقصاً في التبعيات، يرجى الاطلاع على قسم استكشاف الأخطاء أدناه
افترض أن دليل تثبيت Chromium الخاص بك هو /tmp/chromium/، قم بتعيين 10 علامات تبويب مفتوحة في نفس الوقت وزحف إلى testphp.vulnweb.com:
bin/crawlergo -c /tmp/chromium/chrome -t 10 http://testphp.vulnweb.com/
يمكنك أيضاً استخدام هذا مع Docker بدون متاعب:
git clone https://github.com/Qianlitp/crawlergo
docker build . -t crawlergo
docker run crawlergo http://testphp.vulnweb.com/
bin/crawlergo -c /tmp/chromium/chrome -t 10 --request-proxy socks5://127.0.0.1:7891 http://testphp.vulnweb.com/
بشكل افتراضي، يطبع crawlergo النتائج مباشرة على الشاشة. سنقوم بعد ذلك بتعيين وضع الإخراج إلى json، وعينة الكود لاستدعائه باستخدام Python تكون كالتالي:
#!/usr/bin/python3
# coding: utf-8
import simplejson
import subprocess
def main():
target = "http://testphp.vulnweb.com/"
cmd = ["bin/crawlergo", "-c", "/tmp/chromium/chrome", "-o", "json", target]
rsp = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output, error = rsp.communicate()
# "--[Mission Complete]--" هو السلسلة الفاصلة لنهاية المهمة
result = simplejson.loads(output.decode().split("--[Mission Complete]--")[1])
req_list = result["req_list"]
print(req_list[0])
if __name__ == '__main__':
main()
عند تعيين وضع الإخراج إلى json، تحتوي النتيجة المرتجعة، بعد إزالة تسلسل JSON، على أربعة أجزاء:
all_req_list: جميع الطلبات التي تم العثور عليها خلال مهمة الزحف هذه، والتي تحتوي على أي نوع من الموارد من نطاقات أخرى.req_list: يعيد نتائج النطاق الحالي لمهمة الزحف هذه، مع إزالة التكرار شبه الثابت، بدون روابط الموارد الثابتة. إنها مجموعة فرعية من all_req_list.all_domain_list: قائمة بجميع النطاقات التي تم العثور عليها.sub_domain_list: قائمة بالنطاقات الفرعية التي تم العثور عليها.crawlergo يعيد الطلبات وعناوين URL الكاملة، والتي يمكن استخدامها بعدة طرق:
الاستخدام مع أدوات فحص الثغرات السلبية الأخرى
أولاً، قم بتشغيل ماسح ضوئي سلبي واضبط عنوان الاستماع على: http://127.0.0.1:1234/
بعد ذلك، افترض أن crawlergo موجود على نفس جهاز الماسح الضوئي، قم بتشغيل crawlergo واضبط المعاملات:
--push-to-proxy http://127.0.0.1:1234/
ربط المضيف (غير متاح لإصدارات Chrome العالية) (مثال)
ملفات تعريف الارتباط المخصصة (مثال)
تنظيف العمليات الزومبي الناتجة عن crawlergo بانتظام (مثال) ، تمت المساهمة من قبل @ring04h
يمكن لـ crawlergo تجاوز كشف وضع headless بشكل افتراضي.
https://intoli.com/blog/not-possible-to-block-chrome-headless/chrome-headless-test.html

لم يتم العثور على 'Fetch.enable'
Fetch هي ميزة مدعومة من قبل الإصدار الجديد من Chrome، إذا حدث هذا الخطأ، فهذا يعني أن إصدارك منخفض جداً، يرجى ترقية إصدار Chrome.
يعمل Chrome مع تبعيات مفقودة مثل xxx.so
// Ubuntu
apt-get install -yq --no-install-recommends \
libasound2 libatk1.0-0 libc6 libcairo2 libcups2 libdbus-1-3 \
libexpat1 libfontconfig1 libgcc1 libgconf-2-4 libgdk-pixbuf2.0-0 libglib2.0-0 libgtk-3-0 libnspr4 \
libpango-1.0-0 libpangocairo-1.0-0 libstdc++6 libx11-6 libx11-xcb1 libxcb1 libgbm1 \
libxcursor1 libxdamage1 libxext6 libxfixes3 libxi6 libxrandr2 libxrender1 libxss1 libxtst6 libnss3
// CentOS 7
sudo yum install pango.x86_64 libXcomposite.x86_64 libXcursor.x86_64 libXdamage.x86_64 libXext.x86_64 libXi.x86_64 \
libXtst.x86_64 cups-libs.x86_64 libXScrnSaver.x86_64 libXrandr.x86_64 GConf2.x86_64 alsa-lib.x86_64 atk.x86_64 gtk3.x86_64 \
ipa-gothic-fonts xorg-x11-fonts-100dpi xorg-x11-fonts-75dpi xorg-x11-utils xorg-x11-fonts-cyrillic xorg-x11-fonts-Type1 xorg-x11-fonts-misc -y
sudo yum update nss -y
يتم تشغيل ظهور انتهاء مهلة التنقل / عدم العثور على المتصفح / عدم معرفة مسار الملف التنفيذي الصحيح للمتصفح
تأكد من تكوين مسار الملف التنفيذي للمتصفح بشكل صحيح، اكتب: chrome://version في شريط العنوان، وابحث عن مسار الملف التنفيذي:

--chromium-path Path, -c Path المسار إلى الملف التنفيذي لـ Chrome. (إلزامي)--custom-headers Headers تخصيص رأس HTTP. يرجى تمرير البيانات بعد تسلسل JSON، وهذا معرف عالمياً وسيستخدم لجميع الطلبات. (الافتراضي: null)--post-data PostData, -d PostData بيانات POST. (الافتراضي: null)--max-crawled-count Number, -m Number الحد الأقصى لعدد مهام الزاحف لتجنب وقت الزحف الطويل بسبب الشبه ثابت. (الافتراضي: 200)--filter-mode Mode, -f Mode وضع التصفية، simple: يتم تصفية الموارد الثابتة والطلبات المكررة فقط. smart: مع القدرة على تصفية الشبه ثابت. strict: قواعد تصفية شبه ثابت أكثر صرامة. (الافتراضي: smart)--output-mode value, -o value وضع إخراج النتيجة، console: طباعة النتائج المحسنة مباشرة على الشاشة. json: طباعة سلسلة JSON المسلسلة لجميع النتائج. none: عدم طباعة الإخراج. (الافتراضي: console)--output-json filepath كتابة النتيجة إلى الملف المحدد بعد تسلسلها كـ JSON. (الافتراضي: null)--fuzz-path استخدام القاموس المدمج لـ Fuzz المسار. (الافتراضي: false)--fuzz-path-dict تخصيص مسار Fuzz عن طريق تمرير مسار ملف قاموس، مثال /home/user/fuzz_dir.txt، كل سطر من الملف يمثل مساراً للمعالجة بالـ Fuzz. (الافتراضي: null)--robots-path حل المسار من ملف /robots.txt. (الافتراضي: false)--ignore-url-keywords, -iuk كلمة مفتاحية لعنوان URL لا ترغب في زيارتها، تستخدم عادة لاستبعاد روابط الخروج عند تخصيص ملفات تعريف الارتباط. الاستخدام: -iuk logout -iuk exit. (الافتراضي: "logout", "quit", "exit")--form-values, -fv تخصيص قيمة تعبئة النموذج، يتم ضبطها حسب نوع النص. الأنواع المدعومة: default, mail, code, phone, username, password, qq, id_card, url, date و number. يتم التعرف على أنواع النص من خلال الكلمات المفتاحية لقيمة السمة الأربع id، name، class، type لعلامة مربع الإدخال. مثال، تعريف مربع الإدخال للبريد الإلكتروني ليتم تعبئته تلقائياً بـ A ومربع إدخال كلمة المرور ليتم تعبئته تلقائياً بـ B، -fv mail=A -fv password=B. حيث default تمثل قيمة التعبئة عندما لا يتم التعرف على نوع النص، كـ "Cralwergo". (الافتراضي: Cralwergo)--form-keyword-values, -fkv تخصيص قيمة تعبئة النموذج، يتم ضبطها بواسطة المطابقة التقريبية للكلمة المفتاحية. الكلمة المفتاحية تطابق قيم السمات الأربع id، name، class، لعلامة مربع الإدخال. مثال، المطابقة التقريبية للكلمة المفتاحية pass لتعبئة 123456 والكلمة المفتاحية user لتعبئة admin، . (الافتراضي: Cralwergo)--max-tab-count Number, -t Number الحد الأقصى لعدد علامات التبويب التي يمكن للزاحف فتحها في نفس الوقت. (الافتراضي: 8)--tab-run-timeout Timeout أقصى وقت تشغيل لصفحة علامة تبويب واحدة. (الافتراضي: 20s)--wait-dom-content-loaded-timeout Timeout أقصى مهلة لانتظار تحميل الصفحة بالكامل. (الافتراضي: 5s)--event-trigger-interval Interval الفاصل الزمني عند تشغيل الحدث تلقائياً، يستخدم عادة في حالة بطء الشبكة المستهدفة وتضارب تحديث DOM مما يؤدي إلى فقدان التقاط عنوان URL. (الافتراضي: 100ms)--event-trigger-mode Value وضع التشغيل التلقائي لأحداث DOM، مع async و sync، لفقدان التقاط عنوان URL الناتج عن تضارب تحديث DOM. (الافتراضي: async)--before-exit-delay تأخير الخروج لإغلاق Chrome في نهاية مهمة علامة تبويب واحدة. يستخدم لانتظار التقاط بعض تحديثات DOM وطلبات XHR. (الافتراضي: 1s)--push-to-proxy عنوان الاستماع لاستقبال نتيجة الزاحف، عادة عنوان الاستماع للماسح الضوئي السلبي. (الافتراضي: null)--push-pool-max الحد الأقصى لعدد التزامن عند إرسال نتائج الزاحف إلى عنوان الاستماع. (الافتراضي: 10)--log-level مستويات تسجيل الدخول، debug، info، warn، error و fatal. (الافتراضي: info)--no-headless إيقاف تشغيل وضع headless في Chrome لتصور عملية الزحف. (الافتراضي: false)Weibo:@9ian1i Twitter: @9ian1i
مقالات ذات صلة:ممارسة زاحف متصفح لفحص الثغرات على الويب
--request-proxy proxyAddress عنوان وكيل socks5، يتم إرسال جميع طلبات الشبكة من crawlergo ومتصفح Chrome عبر الوكيل. (الافتراضي: null)type-fkv user=admin -fkv pass=123456