
ماسح XSS مكتوب بلغة Rust مع اختيار الحمولات المدرك للسياق، وكشف WAF وتجاوزه، والزحف، واستدعاءات XSS العمياء، وتحليل أحواض DOM الثابتة.
أداة متقدمة للكشف عن XSS مكتوبة بلغة Rust، تجمع بين ذكاء الحمولات المدرك للسياق واتساع نطاق الحقن.
استُلهمت هذه الأداة من XSStrike و XSSER. تم جمع الحمولات من مصادر مختلفة:
شكرًا لكم يا رفاق، أنتم رائعون ❤️
تحذير: استخدمها فقط ضد الأنظمة التي تملكها أو لديك تفويض كتابي صريح لاختبارها.
<title>، <textarea>، إلخ) ويختار الحمولات الأنسب لذلك السياق بدلاً من إطلاق كل شيء بشكل أعمىReferer، User-Agent، X-Forwarded-For، X-Real-IP، وترويسات أخرى، بالإضافة إلى قيم الكوكيزinnerHTML، eval، document.write، location.href، jQuery .html()، وأحواض خطيرة أخرى مع كشف المصدرgit clone https://github.com/fabian-affolter/xssearch
cd xssearch
nix-shell --run "cargo build --release"
# binary: target/release/xssearch
بناء الإصدار مع LTO وإزالة الرموز:
nix-shell --argstr release true --run "$BUILD"
يتطلب Rust 1.75+.
cargo build --release
تتوفر حزمة لمستخدمي Nix أو NixOS. ضع في اعتبارك أن أحدث الإصدارات قد تكون موجودة فقط في قناة unstable.
nix-env -iA nixos.xssearch
xssearch [OPTIONS] <--url <URL> | --file <URLS_FILE>>
| العلم | الوصف |
|---|---|
-u, --url <URL> | عنوان URL الهدف. استخدم FUZZ لتحديد نقطة حقن مخصصة |
-f, --file <FILE> | ملف يحتوي على عنوان URL واحد في كل سطر |
-d, --data <DATA> | جسم POST. استخدم FUZZ لتحديد نقطة الحقن |
-H, --header <H> | ترويسة طلب إضافية، قابلة للتكرار |
--cookie <COOKIE> | سلسلة الكوكيز |
--proxy <URL> | وكيل HTTP/HTTPS |
--timeout <N> | مهلة الطلب بالثواني (افتراضي: 10) |
--user-agent <UA> | User-Agent مخصص |
--follow-redirects | اتباع إعادة توجيهات HTTP |
--threads <N> | الطلبات المتزامنة (افتراضي: 2) |
--delay <MS> | التأخير بين الطلبات بالمللي ثانية |
--crawl | الزحف عبر الهدف بحثًا عن الروابط والنماذج |
--crawl-depth <N> | عمق الزحف (افتراضي: 3) |
--headers-inject | اختبار ترويسات HTTP الشائعة كنقاط حقن |
--cookie-inject | اختبار قيم الكوكيز كنقاط حقن |
--blind <URL> | عنوان URL لاستدعاء Blind XSS |
--dom | تحليل ثابت لأحواض DOM XSS |
--fuzz | إطلاق جميع الحمولات بغض النظر عن سياق الانعكاس |
--payload-set <SET> | all | html | js | attr | poly | dom | mxss | waf (افتراضي: all) |
--payloads-file <FILE> | ملف حمولات مخصص، واحدة في كل سطر |
--encode <LIST> | ترميزات مفصولة بفواصل: url,html,unicode,double,base64 |
--prefix <STR> | إضافة سلسلة في بداية كل حمولة |
--suffix <STR> | إضافة سلسلة في نهاية كل حمولة |
--waf-detect | التعرف على WAF قبل الفحص |
--waf-bypass | تطبيق تحويلات تجاوز WAF على الحمولات |
--output-json <FILE> | كتابة النتائج إلى ملف JSON |
--output-md <FILE> | كتابة النتائج إلى ملف Markdown |
-v, --verbose | إخراج مطوّل (إظهار السياق، جميع الفحوصات) |
-V, --version | طباعة الإصدار والخروج |
xssearch -u "https://example.com/search?q=test"
xssearch -u "https://example.com/login" -d "user=admin&pass=FUZZ"
xssearch -u "https://example.com/" --crawl --waf-detect --headers-inject -v
xssearch -u "https://example.com/?q=FUZZ" --waf-detect --waf-bypass --encode url,html
xssearch -u "https://example.com/contact" -d "msg=FUZZ" \
--blind "https://abc123.oast.fun/xssearch"
xssearch -u "https://example.com/app" --dom --no-banner
xssearch -u "https://example.com/?q=test" --output-json results.json
xssearch -u "https://example.com/?q=test" --output-md report.md
xssearch -f targets.txt --crawl --waf-detect --output-json results.json --output-md report.md
xssearch -u "https://example.com/?q=test" --proxy http://127.0.0.1:8080 -v
أسرع طريقة للتحقق من الأداة هي تشغيل خادم Python معرّض للثغرات عن قصد محليًا:
python3 - <<'EOF'
import http.server, urllib.parse
class H(http.server.BaseHTTPRequestHandler):
def log_message(self, *a): pass
def do_GET(self):
p = urllib.parse.urlparse(self.path)
q = urllib.parse.parse_qs(p.query)
val = q.get('q', [''])[0]
body = f'<html><body><p>Search: {val}</p></body></html>'.encode()
self.send_response(200)
self.send_header('Content-Type', 'text/html')
self.end_headers()
self.wfile.write(body)
http.server.HTTPServer(('127.0.0.1', 9999), H).serve_forever()
EOF
ثم افحصه:
xssearch -u "http://127.0.0.1:9999/?q=test" -v
الإخراج المتوقع: [Vuln] XSS in 'q' مع حمولة سياق HTML.
هذه الصور مصممة خصيصًا لاختبار أدوات الأمان ولا تحتوي على بيانات مستخدمين حقيقية.
docker run -d -p 8080:80 vulnerables/web-dvwa
# Set security level to Low in the UI first
xssearch -u "http://localhost:8080/vulnerabilities/xss_r/?name=test" \
--cookie "PHPSESSID=<your-session>; security=low"
docker run -d -p 8081:8080 webgoat/goat-and-wolf
xssearch -u "http://localhost:8081/WebGoat/" --crawl --crawl-depth 2 -v
docker run -d -p 3000:3000 bkimminich/juice-shop
xssearch -u "http://localhost:3000/" --crawl --dom -v
docker run -d -p 8082:80 raesene/bwapp
# Activate bWAPP at http://localhost:8082/install.php first
xssearch -u "http://localhost:8082/xss_get.php?firstname=test&lastname=test" \
--cookie "PHPSESSID=<your-session>; security_level=0"
هذه المواقع مقدمة خصيصًا لاختبار أدوات الأمان. لا حاجة للمصادقة أو الإعداد.
| الهدف | URL | نقاط دخول XSS |
|---|---|---|
| موقع اختبار Acunetix | http://testphp.vulnweb.com/ | search.php?test=، تعليقات الفنانين، نماذج البحث |
| IBM Altoro Mutual | http://demo.testfire.net/ | معامل البحث، نموذج الملاحظات |
| عرض HP WebInspect التوضيحي | http://zero.webappsecurity.com/ | نموذج تسجيل الدخول، البحث، حقول الحساب |
| Google Gruyere | https://google-gruyere.appspot.com/ | المقتطفات، حقول الملف الشخصي (يتطلب عنوان URL للنسخة) |
معامل البحث (XSS منعكس):
xssearch -u "http://testphp.vulnweb.com/search.php?test=query" \
--waf-detect -v