
NoSQL injection
زمان مطالعه :5 دقیقه
Timing based injection, Preventing NoSQL injection & NoSQL databases, NoSQL database models
Timing based injection
NoSQL databases | Web Security Academy (portswigger.net)
گاهی اوقات ایجاد یک خطای پایگاه داده باعث تفاوت در پاسخ برنامه نمیشود. در این وضعیت، ممکن است هنوز بتوانید آسیبپذیری را با استفاده از جاوااسکریپت اینجکشن برای ایجاد تأخیر زمانی شرطی شناسایی و بهرهبرداری کنید.
برای انجام NoSQL injection مبتنی بر زمان:
صفحه را چندین بار بارگذاری کنید تا زمان بارگذاری پایه را تعیین کنید.
یک Payload مبتنی بر زمان را در ورودی قرار دهید. یک Payload مبتنی بر زمان باعث تأخیر عمدی در پاسخ هنگام اجرا میشود. به عنوان مثال، {"$where": "sleep(5000)"} باعث تأخیر عمدی 5000 میلیثانیهای در صورت موفقیت اینجکشن میشود.
بررسی کنید که آیا پاسخ به طور کندتر بارگذاری میشود. این نشاندهنده موفقیت اینجکشن است.
Payloadهای مبتنی بر زمان زیر در صورت شروع رمز عبور با حرف a، باعث ایجاد تأخیر زمانی میشوند:
admin'+function(x){var waitTill = new Date(new Date().getTime() + 5000);while((x.password[0]==="a") && waitTill > new Date()){};}(this)+'admin'+function(x){if(x.password[0]==="a"){sleep(5000)};}(this)+'
admin'+function(x){if(x.password[0]==="a"){sleep(5000)};}(this)+'
Preventing NoSQL injection
راه مناسب برای جلوگیری از حملات NoSQL injection به تکنولوژی خاص NoSQL مورد استفاده بستگی دارد. بنابراین، پیشنهاد میکنیم مستندات امنیتی پایگاه داده NoSQL انتخابی خود را مطالعه کنید. با این حال، راهنماییهای کلی زیر نیز کمک خواهد کرد:
ورودی کاربر را پاکسازی و اعتبارسنجی کنید، با استفاده از یک allowlist از کاراکترهای پذیرفتهشده.
ورودی کاربر را با استفاده از parameterized queries به جای الحاق مستقیم ورودی کاربر در query وارد کنید.
برای جلوگیری از اینجکشن اپراتور، یک allowlist از کلیدهای پذیرفتهشده اعمال کنید.
NoSQL databases
پایگاههای داده NoSQL دادهها را در قالبی غیر از جداول رابطهای سنتی SQL ذخیره و بازیابی میکنند. این پایگاهها برای مدیریت حجم زیادی از دادههای غیر ساختاری یا نیمهساختاری طراحی شدهاند. به همین دلیل، معمولاً محدودیتهای رابطهای و بررسیهای سازگاری کمتری نسبت به SQL دارند و مزایای قابل توجهی در زمینه مقیاسپذیری، انعطافپذیری و عملکرد ادعا میکنند.
مانند پایگاههای داده SQL، کاربران با استفاده از queryها که توسط برنامه به پایگاه داده ارسال میشود با دادهها در پایگاههای داده NoSQL تعامل میکنند. با این حال، پایگاههای داده NoSQL مختلف از طیف گستردهای از زبانهای query به جای یک استاندارد جهانی مانند SQL (Structured Query Language) استفاده میکنند. این زبان میتواند یک زبان query سفارشی یا یک زبان عمومی مانند XML یا JSON باشد.
NoSQL database models
انواع زیادی از پایگاههای داده NoSQL وجود دارد. برای شناسایی آسیبپذیریها در یک پایگاه داده NoSQL، درک چارچوب مدل و زبان آن کمک میکند.
برخی از انواع رایج پایگاههای داده NoSQL عبارتند از:
Document stores: این پایگاهها دادهها را در اسناد انعطافپذیر و نیمهساختاری ذخیره میکنند. آنها معمولاً از قالبهایی مانند JSON، BSON، و XML استفاده میکنند و به وسیله API یا زبان query پرسوجو میشوند. مثالها شامل MongoDB و Couchbase هستند.
Key-value stores: این پایگاهها دادهها را در قالب key-value ذخیره میکنند. هر فیلد داده با یک رشته کلید منحصر به فرد مرتبط است. مقادیر بر اساس کلید منحصر به فرد بازیابی میشوند. مثالها شامل Redis و Amazon DynamoDB هستند.
Wide-column stores: این پایگاهها دادههای مرتبط را در خانوادههای ستون انعطافپذیر به جای ردیفهای سنتی سازماندهی میکنند. مثالها شامل Apache Cassandra و Apache HBase هستند.
Graph databases: این پایگاهها از گرهها برای ذخیره موجودیتهای داده و از لبهها برای ذخیره روابط بین موجودیتها استفاده میکنند. مثالها شامل Neo4j و Amazon Neptune هستند.

فادیا مرادنژاد
مشاهده مقاله های بیشتر