Data Extraction
Overview
Full database enumeration using time-based blind SQLi:
Enumerate database name
Enumerate table names
Enumerate column names
Extract data
Helper Functions
Dump Number (SQL-Anding)
def dumpNumber(q):
"""Extract a number (0-255) using bitwise operations"""
length = 0
for p in range(7):
if oracle(f"({q})&{2**p}>0"):
length |= 2**p
return lengthDump String
Step 1: Enumerate Database Name
Get Length
Output: 8
Get Name
Output: digcraft
Step 2: Enumerate Table Names
Get Table Count
Output: 2
Get Table Names
MSSQL Pagination (no LIMIT/OFFSET like MySQL):
Output:
Step 3: Enumerate Column Names
Get Column Count
Output: 1
Get Column Names
Output:
Step 4: Extract Data
Enumerated So Far
Item
Value
Database
digcraft
Tables
flag, userAgents
Columns (flag)
flag
Get Row Count
Output: 1
Get Data Length
Output: 37
Extract Data
Complete Extraction Script
MSSQL Pagination Reference
MySQL Style (NOT available in MSSQL)
MSSQL Style
Performance Notes
Why SQL-Anding?
With time-based injection, optimization is critical:
Algorithm
Requests/Char
Time/Char (3s delay)
Linear
~64 avg
~192 seconds
SQL-Anding
7
~21 seconds
Bisection
7
~21 seconds
For a 32-character string:
Linear: ~102 minutes
Optimized: ~11 minutes
Extraction Summary
Quick Reference
Key Queries
Last updated