سوء استفاده بر پایه ارور با استفاده از متغیر های نوع BIGINT در SQL Injection

اگر این ویدئو رو دیده باشید با ۲ روش برای سوء استفاده از آسیب پذیری SQL Injection بر پایه ارور آشنا شدید. اما روش های سوء استفاده میتواند گوناگون باشد و طی مدت روش های مربوطه منسوخ خواهند شد. امروز میخواهیم روش دیگری رو برای Error Based SQL Injection معرفی کنیم.

این روش توسط Osanda Malith Jayathissa معرفی شده است.

بررسی خطای مربوطه

توی سایت MySQLاقسام اعداد صحیح چنین تعریف شده اند :

integer_types

همانطور که مشاهده میکنید ، طبق ستون های جدول مربوطه ما یک حداقل مقدار و یک حداکثر مقدار برای هر نوع عدد صحیح داریم. حالا فرض کنید ، اگر نتیجه ای با همان مقدار با یک عدد صحیح دیگر جمع شود چه اتفاقی میافتد؟ بله درست حدس زدید با ارور مواجه میشویم !

bigint_error_based_1

نکته : در صورتی که در مبانی دسیمال بخواهیم حداکثر مقدار BIGINT را در بیاوریم میتوانیم از ‍‍~۰ استفاده کنیم که عدد بعد از ‍~ باعث میشود از حداکثر مقدار ما کاسته شود برای مثال به تصویر زیر دقت کنید :

bigint_error_based_2

بنابراین جای نوشتن اون عدد طولانی میتوانیم به شکل ~۰ نیز همان کار را انجام دهیم !‌ البته در مبنای های دیگر نیز بمیتوان ارور گرفت :

استفاده از این خطا در تزریق دیتابیس

توی مقالات مختلفی که توی سایت قرار داده شده شما با سبک Error Based SQL Injection آشنایی دارید و مخصوصا ویدئویی که در ابتدای این مطلب لینک داده شد توضیحات خوبی درباره این سبک تزریق داده شده است. بنابراین میرویم سراغ اصل مطلب و مراحل تزریق و گرفتن اطلاعات مختلف را مجددا بررسی نمیکنیم !

حتما تا حالا با مقدار های Boolean آشنایی دارید . توی شرط ها خیلی کاربرد دارند و همچنین توی روش Blind SQL Injection هم وقتی if رو معرفی کردیم در مورد True و False ها آشنا شدید. همانطور که دید برای گرفتن ارور فقط کافیه که ما مقداری رو به اون عدد اضافه کنیم ! و ما دستور خودمون رو توی اضافات اون مقدار تحت عنوان یک True یا False عرضه میکنیم ! به خروجی مثال های زیر توجه کنید :

bigint_error_based_3

میبینید که این سبک دستورات به ما خروجی ها ۱ و ۰ یا همان True و False را بر میگردانند ! پس کافی هست عبارتی که بعد از ~۰ میاوریم برابر با ۱ باشد تا بتوانیم در قالب ارور از اون استفاده کنیم ! به مثال زیر توجه کنید :

bigint_error_based_4

بیرون کشیدن در یک نگاه !

ما میتوانیم با استفاده از همین روش نیز در یک نگاه کلیه دیتابیس ها ، جداول و ستون ها را نیز بیرون بکشیم که در آینده درباره این نوع روش ها توضیحات بیشتری ارائه خواهیم داد. برای مثال من میخوام لیستی از تمامی جداول و ستون های اون ها از دیتابیس در حال حاضر ( Current Database ) به دست بیاورم:

bigint_error_based_5

دستوری که در بالا زده شده است :

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

 

 

ارسال نظر

ایمیل شما منتشر نخواهد شد. پر کردن ورودی ها الزامی است. *

*

نوزده − شانزده =