در این بخش از مجموعه آشنایی با متدولوژی Burp Suite به بخش بیست و یکم از این متدولوژی به استفاده از ابزار Burp Suite به منظور تشخیص Blind SQL Injection می پردازیم.
آسیب پذیری Blind SQL Injection
در صورتی که امکان بازیابی داده از طریق پیام های خطا به سادگی نوع Union امکان پذیر نباشد، شما با آسیب پذیری SQL Injection از نوع Blind روبرو هستید. شناسایی و بهره برداری از این آسیبپذیریها سختتر است، اما به هیچ وجه غیرممکن نخواهد بود. در این مقاله، ما برخی از راههای احتمالی را که از طریق آن میتوان آسیبپذیریهای SQL Injection از نوع Blind را شناسایی کرد، با تزریق شرایط Boolean، ایجاد تاخیر زمانی و کانالهای out-of-band بررسی خواهیم کرد.
Boolean Condition Injection
در اینجا یک نمونه وب اپلیکیشن از ابزار آموزشی WebGoat که مربوط به OWASP’s Broken Web Application Project را مورد بررسی قرار می دهیم.
این فرم برای آزمایش معتبر بودن شماره حساب ارائه شده طراحی شده است. میبینیم که شماره حساب 101 یک نتیجه صحیح ایجاد میکند، بنابراین شماره حساب معتبر است. بدین صورت شرط “True” برآورده شده است.
در ادامه ما باید به نحوی شرایط “False” را ایجاد نماییم. در این مثال از شماره حساب 666 استفاده کرده ایم. برنامه پاسخ نادرست داده است، بنابراین شماره حساب نامعتبر است. در این حال شرط “False” فراهم شده است.
مرحله بعدی تأیید این است که ورودی به عنوان یک پرس و جوی SQL ارزیابی میشود یا خیر و آیا میتوانیم با استفاده از ساختار دستوریSQL ، یک تست True/False انجام دهیم.
در اینجا 101 و 1=1 را وارد کرده ایم. ما میدانیم که هر دو بخش این شرط درست است و انتظار پاسخ صحیح “True” را داریم.
در اینجا 101 و 1=2 را وارد کرده ایم. ما میدانیم که تنها یک بخش از این شرط درست است و باید پاسخ نادرست “False” را به ما برگرداند.
با این بررسی انجام شده، اکنون میدانیم که میتوانیم با استفاده از ساختار دستوری SQL از برنامه «سوال» بپرسیم و میتوانیم SQL را تزریق کنیم تا هر اطلاعاتی را که در دسترس است، پیدا کنیم.
در این مثال ما به دنبال شماره pin هستیم که با cc_number مطابقت دارد.
برای پیدا کردن pin در این مثال، میتوانیم عدد را در دستور SQL تغییر دهیم و منتظر بمانیم تا برنامه یک پاسخ “True” ایجاد کند.
برای کاهش تعداد درخواستهای مربوطه، میتوانیم جستجوهای باینری را برای یافتن پاسخ صحیح به طور مؤثر انجام دهیم. البته Burp Intruder نیز گزینه مناسبی در این بخش خواهد بود.
Using Time Delays
در برخی موارد تزریق SQL از نوع Blind، که در آن هیچ تفاوتی درحالات صحیح و نادرست وجود ندارد و امکان شرایط Boolean وجود ندارد، یک تکنیک جایگزین که اغلب موثر است تزریق تاخیرهای زمانی است.
در این مثال از تمرینی از آزمایشگاههای آموزشی MD Sec استفاده میکنیم.
در این حالت ممکن است سعی کنم تا با ارسال درخواست های صحیح و نادرست، منتظر دریافت خطا باشیم.
همانطور که در تصاویر نیز قابل مشاهده میباشد، هیچ خطایی به ما نمایش داده نمیشود.
در این شرایط میتوانیم از Burp Suite برای تزریق SQL استفاده کنیم که باعث تأخیر زمانی شده و زمان صرف شده برای بازگشت پاسخ را بررسی کنیم.
در بخش Proxy و تب Intercept، اطمینان حاصل نمایید که Intercept is on تنظیم شده باشد. در هر نقطه از درخواست راست کلیک کرده و Send to Repeater را انتخاب نمایید.
ما میتوانیم درخواست را با استفاده از تب “Raw” یا “Params” در بخش Request از قسمت Repeater تغییر دهیم.
در این مثال ما در حال تزریق به پایگاه داده MS-SQL هستیم. ما رشته SQL مربوط به تاخیر زمانی را به پارامتر درخواست تزریق میکنیم و مدت زمانی را که پاسخ به این درخواست طول میکشد را بررسی میکنیم.
در پایین بخش Response در قسمت Repeater میتوانیم زمان دریافت پاسخ را بر حسب میلی ثانیه ببینیم.
پاسخ در این مثال 5 ثانیه طول کشیده است.
این نشان میدهد که برنامه واقعاً در برابر تزریق SQL، آسیب پذیر است.
Using Out-Of-Band Channels
در برخی موقعیتها، نمیتوان اثر قابل توجهی در پاسخ برنامه ایجاد کرد، چه در محتوای آن و چه در زمان صرف شده برای دریافت آن.
در این شرایط، شناسایی آسیبپذیریهای تزریق SQL از طریق ایجاد اتصال شبکه خارج از باند پایگاه داده به سرور تست نفوذگر امکانپذیر است.
Burp Scanner از این تکنیک از طریق ویژگی Burp Collaborator استفاده میکند.
در این مثال میبینیم که Burp Scanner از یک آسیبپذیری SQL Injection از نوع Blind برای ایجاد اتصال شبکه به سرور Burp Collaborator توسط پایگاه داده استفاده کرده است.
این حمله خاص از رویه ذخیره شده xp_dirtree مایکروسافت SQL Server استفاده میکند. تکنیکهای مشابهی در دیگر پلتفرمهای پایگاه داده وجود دارد و این تکنیکها توسط Burp Scanner استفاده میشوند.