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

مطلب کامل و بسیار مفید آشنایی با اصطلاحات هک و امنیت

نفوذ به پایگاه داده نتایج زیر را به همراه خواهد داشت:

  • امکان واکشی اطلاعات حیاتی
  • امکان ویرایش اطلاعات
  • امکان بدست آوردن رمزهای عبور به منظور انجام عملیات بایپس

اگر با مفهوم پایگاه داده آشنا نیستید این مطلب را از دست ندهید

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

چگونه یک سایت آسیب پذیر بیابیم؟

یافتن سایت‌های آسیب پذیر ساده است ولی باید زمان لازم را برای این کار صرف کنیم. یکی از راه‌های موثر در یافتن سایت‌های آسیب پذیر استفاده از Google Hacking است. Google Hacking به معنای استفاده از ابزارهای موجود در گوگل برای یافتن سایت‌های نفوذ پذیر می‌باشد.

آموزش کامل Google Hacking

طبیعتا SQL Injection ناشی از اشتباهات برنامه نویسی است که گاهی می‌تواند منجر به دریافت دسترسی‌های مهم شود.

در گوگل عبارت inurl:news_more.php?id= را جستجو کنید. با استفاده از این دورک می‌توانید به سایت‌هایی دسترسی پیدا کنید که در آدرس آن‌ها از عبارت news_more.php?id= استفاده شده باشد.

در نتایج یکی از سایت‌ها را باز کنید و بعد از عدد موجود به عنوان ID یک ' (کوتیشن) اضافه کنید.

دو حالت ممکن است رخ دهد، حالت اول این است که سایت بدون هیچ تفاوتی اجرا می‌شود که نشان دهنده این است که سایت باگ ندارد، حالت دوم این است که سایت با تغییری لود می‌شود که یکی از موارد زیر است:

  • صفحه سفید ظاهر می‌شود.
  • متن‌های صفحه یا نمایش داده نمی‌شوند یا ناقص هستند.
  • به صفحه نوشته‌هایی اضافه می‌شود که سابقا نبوده اند.
  • بعضی از عکس‌های صفحه لود نمی‌شوند.
  • و هر تغییر کوچکی در صفحه

که کلیه موارد فوق به این معناست که آن صفحه به احتمال زیاد دارای باگ SQL Injection است.

صفحه زیر یک تارگت برای تست است:

sql injection

همانطور که در عکس مشخص است به انتهای آدرس کوتیشن اضافه می‌کنیم:

صفحه با باگ اس کیو ال اینجکشن

در تصویر فوق می‌بینید نوشته‌های صفحه لود نشده اند که به معنای وجود داشتن یک باگ SQL Injection در صفحه جاری است.

نکته: اگر تاکید دارید که عملیات تست نفوذ را روی سایت خاصی انجام دهید و نمی‌خواهید سایت خود را از گوگل بیابید باید سایت مورد نظر را به صورت کامل پیمایش کنید و تمام صفحات آن را بررسی کنید، چون ممکن است تنها بعضی از صفحات دارای باگ باشند. البته باز نیز می‌توانید از گوگل کمک بگیرید و دورکی مانند: site:site.com .php?id= را جستجو کنید (همانطور که در مطلب گوگل هکینگ ذکر شد به جای site.com نام سایت مورد نظر را وارد کنید) تا تمام صفحات مناسب را بیابید.

تعداد ستون‌های یک جدول در SQL Injection

از آن جا که هدف در تست نفوذ SQL Injection بدست آوردن اطلاعات از پایگاه داده‌ رابطه‌ای است، بنابراین یافتن تعداد ستون‌های جدول برای تکمیل عملیات نفوذ ضروری است.

در این مرحله برای دریافت تعداد ستون‌های یک جدول از دستور order by استفاده می‌کنیم. دستور order by برای مرتب کردن اطلاعات دریافتی از بانک اطلاعاتی مورد استفاده برنامه نویسان قرار می‌گیرد، وقتی عددی بالاتر از تعداد ستون‌های پایگاه داده با دستور order by درخواست بدهیم، صفحه جاری با مشکل اجرا می‌گردد.

وقتی یک صفحه آسیب پذیر در سایتی یافتیم به انتهای آن دستور order by اضافه می‌کنیم تا بتوانیم تعداد ستون‌های جدول مورد نظر را بیابیم. روش استفاده از این دستور مانند زیر است:

site.com/news.php?id=10+order+by+20--

در دستورات فوق از + به جای فاصله و از -- برای اعلام پایان دستورات استفاده می‌شود، عددی که در انتهای دستورات وجود دارد تعداد ستون‌های جدول است که باید آن قدر آن را امتحان کنیم که به تعداد ستون درست جدول دست پیدا کنیم.

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

در مثال زیر با وارد کردن عدد 10 صفحه با باگ باز می‌شود ولی با عدد 9 هیچ مشکلی ندارد:

آموزش SQL Injection

آموزش SQL Injection

نکته: گاهی صفحه ما باگ دارد ولی هر چه عدد بالایی برای یافتن تعداد ستون تست کنیم باز صفحه با مشکل اجرا می‌شود، این به این معناست که این سایت در حال فیلتر کردن مقادیر است و باید از یک بایپس استفاده کرد. (همانطور که در مقاله اصطلاحات هک و امنیت گفته شد بایپس به تلاش برای دور زدن تمهیدات امنیتی گفته می‌شود)

بایپس اول SQL Injection برای Order By

یکی از بایپس‌های استفاده شده در حملات SQL Injection استفاده از + آخر دستورات و ' پس از ID است که به صورت زیر می‌باشد:

site.com/news.php?id=5'+order+by+13--+

بایپس دوم برای Order By

به جای order by از group by به شکل زیر استفاده کنید:

site.com/news.php?id=5'+group+by+13--+

گاهی هر چقدر عددها را برای دستیابی به تعداد ستون بالا و پایین می‌کنیم باز به نتیجه مطلوب نمی‌رسیم که در این موارد می‌توانیم از بایپس گفته شده استفاده کرد.

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

اگر سوال و یا پیشنهادی دارید در قسمت نظرات با ما در ارتباط باشید.