داستان از این قراره که توی پرورگرم پابلیکی که سه ماه توش مشغول به کار بودم یه باگ خیلی خطرناک پیدا کردم. چجوری این باگو پیدا کردم ؟
پرورگرم هر اشکال امنیتی از سابدامین های خودش رو به عنوان یه باگ لجیت قبول میکرد .
به عنوان یه مهاجم همیشه دوس دارم برم و نقاط کور رو تست کنم و جایی مشغول به کار شم که هانتر کم تری به اونجا سر زده
پس من به عنوان اولین قدم خودم یه واید ریکان سنگین انجام دادم و یه سری سابدامین در اختیارم اومد , بعده دونه به دونه چک کردن همه سابدامین ها من به سابدامین سرویس ای پی آی رسیدم .!
برای مثال : api-prod.target.com
وقتی صفحه رو باز کردم چیزی به چشمم نخورد و با صفحه خالی مواجه شدم . چیزی که هر هانتری برای تست میره سراغش این مورداست :
1 - فاز معمولی و فاز با اکستشن های مختلف
2- وی بک
3 - گوگل دورکینگ با انجین های مختلف
4- سرچ توی گیتهاب یا بیت باکت و ..
همه اینکارارو انجام دادم و در اخر هیچ چیزی دست گیرم نشد و یه سری مسیر چرت رسیدم که بدرد من نمیخورد .
خب من میدونستم که قبل از من کلی هانتر اینکارو هزارن بار انجام دادن و شاید نتیجه ای نگرفتن و گفتن شاید این سابدامین باگی نداره و رهاش کردن
ولی من به شاید ها کاری ندارم , من باید به عنوان یه هانتر برم و باگو پیداش کنم و گزارشش بدم .
Time based SQL injection :
پکت رو توی برپ سوییت باز کردم و فقط به پکت نگاه کردم .
گوشه ذهنم میدونستم که وبسایت ها میتونن یه سری داده و اطلاعات رو از کاربر ذخیره کنن و یدونه از اون اطلاعات User-agent هستش و این User-agent ممکنه بشینه توی دیتابیس و یا نوعی insert بشه .
پس ترت مدل من این بود که برم یه time-base-sqli توی user-agent تست کنم و با خواب رفتن سرور متوجه این بشم که اسیپ پذیری وجود داره .
خب بیایم یه شبیه سازی تو ذهنمون داشته باشیم فرض بگیریم یه همچین چیزی(insert) توی دیتابیس وجود داره :
insert into table ('user-agent') VALUE ('$INPUT')اگه همچین چیزی اون پشت داشته باشیم پس من باید با ' بریک کنم و کوعری sleep رو اجرا کنم . پیلودی که به ذهنم رسید رو تست کردم :
' + sleep(15) + '
اتفاقی که واسه پشت صحنه میوفته :
insert into table ('user-agent') VALUE ('$INPUT' + sleep(15) + '')این دقیقا چیزی بود که من تستش کردم و کاملا منطقی بود, ما از پلاس توی sql استفاده میکنیم تا رشته ها رو به هم کانکت و به نوعی عملیات جمع انجام بدیم . تست کردم ولی هیچ اتفاقی نیوفتاد ✖️
سریع از لابراتور انلاین sql استفاده کردم و همین کد با همین فرضیه رو تست کنم و به یه خطای مهم رسیدم :
پارسر sql میگفت من گیج شدم و نمیتونم اینو اجرا کنم. چرا ؟ چون تو میخوای یه استرینگ خالی رو با استرینگ پر و یه اسلیپ رو با هم کانکت کنی ! همچین کاری رو نمیتونی انجام بدی !
اهاا. یه تریک ریز به ذهنم رسید. چی میشه اگه من مقدار User-agent رو پاک کنم و پیلود خودمو بزارم ؟
User-agent: ' + sleep(15) + '
insert into table ('user-agent') VALUE ('' + sleep(15) + '')15 ثانیه رفت به کما و تمام. باگ تایید شد ☺️
تمام نکته این بود که باید رشته پاک میشد تا جواب بگیری . فقط کپی پیست پیلود کافی نیست باید تحلیل کنی .🫡
امیدوارم از این سناریوی باگ ریل ورد دید خوبی گرفته باشید انرژی فراموش نشه ⚡️
@Dagen_security