021-71053903 [email protected] پشتیبانی از شنبه تا چهارشنبه ساعت 9 الی 16

SQL Injection چیست ؟! ساخت SQLI با پایتون !!


SQL Injection یک روش تزریق کد است که برای اجرای پرس و جو SQL از طریق داده های ورودی کاربر به برنامه آسیب پذیر وب استفاده می شود. این یکی از رایج ترین و خطرناک ترین تکنیک های هک شدن وب است.

یک سوء استفاده موفق در تزریق SQL می تواند به طور کلی آسیب مضر زیادی به بانک اطلاعاتی و برنامه وب وارد کند. به عنوان مثال ، می تواند داده های حساس مانند گذرواژه های کاربر را از دیتابیس بخواند ، درج کند ، اصلاح کند و حتی داده را حذف کند.

چگونگی عملکرد و اجرای SQL injection در وب سایت

شیوه ی کار SQL injection یا تزریق دیتابیس به این صورت است که فرد مهاجم یا هکر در فرم های تعبیه شده بر روی وب سایت و در فیلدهایی که به جمع آوری اطلاعات کاربران می پردازد اقدام به ورود کدهای مخرب SQL می کند. پس از ورود اطلاعات توسط کاربر در این فرم ها ، کدهای مخرب عمل می کنند و به جای اجرای SQL اصلی، کدهای مخربی که مهاجمین وارد کرده اند اجرا می شوند.

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

راه های مقابله با SQL injection

1 – بدون شک با توجه به تعریف و چگونگی عملکرد تزریق کد به بانک های اطلاعاتی، بهترین شیوه ی مقابله با حملات و نفوذهای SQL injection بررسی دائمی ورودی ها و سنجش دقیق این اطلاعات وارد شده قبل از ارسال آنها به پایگاه داده ی وب سایت است. این اطلاعات در قالب کدهای مختلف به پایگاه های داده در قالب یک پرس و جو یا Query ارسال می شوند. Query در بانک های اطلاعاتی زمانی مورد استفاده قرار می گیرد که قصد حذف، درج یا ویرایش برخی از اطلاعات موجود در پایگاه داده ی خود داریم. Queryها یا زبان پرس و جو به دلیل ساختار آسانی که دارند به زبان انسان ها بسیار شبیه هستند و وظیفه دارند تا خدمات مختلفی را به کاربران و برنامه نویسان بانک های اطلاعاتی ارائه دهند. بنابراین به منظور مقابله ی موثر با SQL injection می توانید در برابر ورودی فرم های موجود در وب سایت خود از شیوه هایی استفاده کنید که از ورود کاراکترها یا کدهای غیرمجاز جلوگیری کند و آنها را به طور دقیق شناسایی کند.

2 – به منظور مقابله با SQL injection می توانید دسترسی های مختلفی به کاربران پایگاه داده ی خود بدهید. با این شیوه می توانید تا محدوده ی زیادی از حملات SQL injection، تخریب ها و تزریق کدها به پایگاه داده ی خود جلوگیری کنید.

3 – افزایش امنیت پرس و جوها در هنگام ارسال به پایگاه داده با استفاده از شیوه های خلاقانه و زیادی که می توان از آنها استفاده کرد، سوء استفاده و هجوم کاربران را با اختلال مواجه می کند. بدین منظور می توانید به اصطلاح از Queryهای پارامتر شده استفاده کنید. بدین معنی که در ابتدا پیش بینی های لازم از پرس و جوهای مورد نیاز انجام شود و این کدها به پایگاه داده ارسال شوند اما بدون متغیر تا در شرایط مورد نیاز تنها اقدام به ارائه ی متغیر ورودی به آنها کرد. این مساله موجب ارسال جداگانه ی متغیرها می شود و درنتیجه امنیت، سرعت و کارایی وب سایت و پایگاه داده ی شما را نیز افزایش خواهد داد. این شیوه موجب می شود تا در صورت حملات احتمالی هکرها تنها به متغیرها دسترسی داشته باشند و کدهای موجود از دسترسی آنها خارج گردد.

4 – علامتگذاری یا به نوعی دستکاری داده های ورودی کاربر شیوه ای است که به بانک اطلاعاتی هشدار می دهد که داده های وارد شده از طریق کاربر هستند تا در صورت نیاز عکس العمل های لازم در برابر آن صورت بگیرد.

5 – مهندسی دقیق تری بر روی پیام های خطایی که تولید می کنید داشته باشید. این اطلاعات و پیام ها این کمک و هشدار را به هکر یا مهاجم می دهد که از ورود اعداد یا کاراکترهای خاص در قسمت های مختلف خودداری کنند.

6 – افزایش امنیت وب سایت و پایگاه داده همواره یکی از موضوعات مورد توجه و مهمی است که کاربران و مدیران وب سایت ها سرمایه گذاری های زیادی بر روی آنها انجام می دهند. این مساله علاوه بر اینکه موجب اعتماد، برندسازی و بهینه سازی بالاتر شما خواهد شد، در برابر عوامل مخربی نظیر SQL injection در پایگاه های داده نیز مقاومت بیشتری می کنند.

در مورد بانک های اطلاعاتی نکات زیادی وجود دارند که می توانند امنیت بیشتر آنها در برابر حملات مختلف را موجب شوند.

مقابله با SQL injection در برابر افزایش امنیت دیتابیس

– به روزرسانی نسخه های بانک اطلاعاتی می تواند روند بهتری در برابر جلوگیری از مشکلات امنیتی دیتابیس شما ایجاد کند بنابراین توصیه ی ما این است که همواره برنامه ی پایگاه داده ی خود را مطابق با آخرین نسخه آپدیت کنید.

– غیرفعال کردن نمایش خطاهای پایگاه داده به کاربر می تواند پایگاه داده و وب سایت شما در برابر هکرها یا مهاجمین احتمالی را امن تر نگه دارد. بدین ترتیب پس از اتمام نوشتن کدهایSQL این ویژگی را غیرفعال کنید.

– امنیت بیشتر پایگاه داده نیازمند ارائه ی پارامترهای قوی تر برای اطلاعات مهم تری نظیر رمزهای عبور است. بدین ترتیب استراتژی های محکم تری برای ذخیره سازی آنها در پایگاه داده اعمال کنید تا در صورت حمله های احتمالی نیز با مشکل مواجه نشوید. در این شرایط هکرها با دردسر بیشتری قادر به رمزگشایی اطلاعات مهم شما خواهند بود و در شرایطی هم ممکن است به این اطلاعات نرسند.

در این آموزش یاد می گیرید که چگونه یک اسکریپت ساده Python برای شناسایی آسیب پذیری SQL Injection در برنامه های وب مشاهده کنید.

بیایید برای این آموزش کتابخانه های لازم را نصب کنیم:

pip3 install requests bs4

بیایید ماژول های لازم را وارد کنیم:

import requests
from bs4 import BeautifulSoup as bs
from urllib.parse import urljoin
from pprint import pprint

از آنجا که SQL Injection درمورد ورودی های کاربر است ، ما ابتدا نیاز به استخراج فرم های وب داریم. خوشبختانه برای ما ، من در حال حاضر آموزش در مورد استخراج و پر کردن فرم در پایتون نوشتم ، ما به توابع زیر نیاز داریم:

( ) get_all_forms از کتابخانه BeautifulSoup برای استخراج تمام برچسب های فرم از HTML استفاده می کند و آنها را به عنوان لیست پایتون باز می گرداند ، در حالی که تابع( ) get_form_details یک موضوع برچسب یک فرم را به عنوان یک آرگومان بدست می آورد و اطلاعات مفیدی را در مورد فرم مانند عمل (URL هدف) تجزیه می کند. ) ، روش (GET ، POST ، و غیره) و تمام ویژگی های فیلد ورودی (نوع ، نام و مقدار).

بعد ، تابعی را تعریف می کنیم که به ما بگوید که آیا یک صفحه وب دارای خطاهای SQL در آن است ، این کار هنگام بررسی آسیب پذیری SQL Injection مفید خواهد بود:

بدیهی است ، من نمی توانم خطا را برای همه سرورهای پایگاه داده تعریف کنم ، برای بررسی بیشتر مطمئن تر ، برای یافتن مسابقات خطا باید از عبارات منظم استفاده کنید ، این پرونده XML را که تعداد زیادی از آنها وجود دارد (استفاده شده توسط ابزار sqlmap) بررسی کنید.

اکنون که همه ابزار را در اختیار داریم ، بیایید عملکرد اصلی را که در همه صفحات جستجو می کند در صفحه وب تعریف کنیم و سعی کنیم شخصیت های نقل قول و نقل قول را در قسمت های ورودی قرار دهیم:

قبل از استخراج فرم ها و ارسال آنها ، عملکرد فوق ابتدا آسیب پذیری موجود در URL را بررسی می کند ، زیرا ممکن است خود URL آسیب پذیر باشد ، این کار با اضافه کردن کاراکتر نقل قول در URL انجام می شود.

سپس با استفاده از کتابخانه درخواستها درخواست را انجام می دهیم و بررسی می کنیم که آیا محتوای پاسخ دارای خطاهایی است که در جستجوی آن هستیم یا خیر.

پس از آن ، ما فرم ها را تجزیه کرده و با هر نقل قول در هر فرم یافت شده ، ارسال می کنیم ، در اینجا اجرای من بعد از تست در یک صفحه وب آسیب پذیر شناخته شده است:

همانطور که مشاهده می کنید ، این در خود URL آسیب پذیر بود ، اما بعد از آزمایش این مورد در سرور آسیب پذیر محلی من (DVWA) ، این خروجی را بدست آوردم:

اگر می خواهید اسکریپت را بر روی برنامه های وب آسیب پذیر محلی مانند DVWA تست کنید ، ابتدا باید وارد سیستم شوید ، من کد ورود به سیستم را به DVWA در اسکریپت در اینجا ارائه داده ام ، در ابتدا آن را به عنوان یک کد اظهار نظر پیدا خواهید کرد.

نتیجه گیری :

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

با افزودن ویژگی بهره برداری می توانید این کد را گسترش دهید ، این برگه تقلب می تواند در استفاده از دستورات SQL مناسب به شما کمک کند. یا ممکن است بخواهید تمام لینک های وب سایت را استخراج کرده و آسیب پذیری را در تمام صفحات سایت بررسی کنید ، می توانید این کار را انجام دهید!

در نتیجه ، سعی کنید از این اخلاقی استفاده کنید ، ما مسئول هیچ سوءاستفاده ای از این کد نیستیم!

مقالات بیشتر :

باگ Bug چیست ؟!!

باگRCE چست و اکسپلویت نویسی باگ RCE با پایتون

منبع :

www.thepythoncode.com

SQL Injection چیست ؟!

» حفره امنیتی SQL Injection ، یک روش برای تست نفوذ می باشد که نفوذگر از عدم فیلترینگ مناسب سایت در قسمت فراخوانی اطلاعات از دیتابیس سوءاستفاده کرده و با وارد کردن دستورات خود که اصطلاحاً به آن Exploit گویند، اطلاعات مورد نظر خود را فراخوانی میکند !

محمد محمدپور

34 مطلب منتشر شده

محمد محمد پور علاقه مند به برنامه نویسی پایتون شاخه ی امنیت تست و نفوذ کارشناس IT دانشگاه کرج علاقه های شخصی ویدیو گیم فیلم موزیک

درباره این مطلب نظر دهید !

مطالب پرمخاطب پایتونی ها

VPN چیست ؟!

VPN چیست ؟!

6
دقیـقه مطالعه
ادامه ...
BOTNET

BOTNET بات نت چیست ؟!

10
دقیـقه مطالعه
ادامه ...

محصولات فروش پایتونی ها

%60
تخفیف

آموزش فیگما (Figma)

30,000 تومان
3
%69
تخفیف

آموزش برنامه نویسی پایتون

35,000 تومان
2