در دنیای امنیت سایبری، باگها به دو دسته کلی تقسیم میشوند: آسیبپذیریهای فنی (Technical) که ناشی از خطاهای کدنویسی و زیرساخت هستند، و آسیبپذیریهای منطقی (Logic) که به نحوه طراحی و اجرای فرآیندهای تجاری اپلیکیشن بازمیگردند. درک این تمایز برای یک باگبانتیکار حرفهای کلیدی است. در حالی که ابزارهای اسکنر برای یافتن موارد فنی عالی هستند، آسیبپذیریهای منطقی اغلب با تحلیل هوشمندانه جریان کار (Business Workflow) و حدس زدنِ “رفتارِ خلافِ انتظارِ سیستم” کشف میشوند.
۱. SQL Injection (SQLi): تزریق دستورات دیتابیس به ورودیهای ناامن کاربر. این آسیبپذیری اجازه میدهد مهاجم کل پایگاه داده را بخواند، تغییر دهد یا حذف کند. این خطا زمانی رخ میدهد که دادههای کاربر بدون فیلتر شدن (Sanitization) به کوئریهای SQL متصل میشوند. عدم استفاده از Prepared Statements اصلیترین عامل این تهدید است.
۲. Cross-Site Scripting (XSS): تزریق کدهای مخرب جاوا اسکریپت به صفحات وب که در مرورگر قربانی اجرا میشود. این حمله منجر به سرقت کوکیهای نشست (Session Hijacking)، تغییر محتوای صفحه یا هدایت کاربر به سایتهای فیشینگ میشود. این مشکل به دلیل عدم Encode صحیح خروجیها (Output Encoding) در هنگام نمایش دادههای کاربر رخ میدهد.
۳. Remote Code Execution (RCE): خطرناکترین نوع آسیبپذیری که به مهاجم اجازه میدهد کدهای مخرب را مستقیماً روی سرور هدف اجرا کند. این مورد معمولاً از طریق توابع ناامن سیستمعامل، deserialization دادههای آلوده یا عدم اعتبارسنجی ورودی در آپلود فایلها رخ میدهد. دسترسی کامل به سرور و مدیریت فایلها از نتایج مستقیم این حمله است.
۴. Server-Side Request Forgery (SSRF): مهاجم سرورِ قربانی را مجبور میکند درخواستهای HTTP به سمت سرورهای داخلی یا سرویسهای ابری (مانند متادیتای حساس) ارسال کند. این کار باعث دور زدن فایروالهای داخلی و دسترسی به سرویسهای غیرعمومی و داخلی میشود. این ضعف در سیستمهایی که URL را از کاربر دریافت و به سمت آن درخواست میزنند دیده میشود.
۵. Insecure Direct Object Reference (IDOR): زمانی رخ میدهد که اپلیکیشن یک شناسه (مانند ID کاربری یا فاکتور) را برای دسترسی به یک شیء حساس بدون بررسی سطح دسترسیِ درخواستکننده نمایش میدهد. با تغییر این ID، مهاجم میتواند به پروفایل یا دادههای سایر کاربران دسترسی پیدا کند. این ضعف ناشی از نقص در لایه Authorization سمت سرور است.
۱. Price Manipulation: دستکاری پارامترهای قیمت یا تعداد محصول در سبد خرید قبل از پرداخت نهایی. مهاجم با تغییر مقادیر در درخواستهای HTTP یا بستههای شبکه، سعی میکند کالا را با قیمت کمتر یا رایگان بخرد. این ضعف ناشی از اعتمادِ بیش از حد سرور به دادههای ارسالی از سمت کلاینت برای محاسبات مالی است.
۲. Access Control Bypass: دور زدن محدودیتهای دسترسی برای مشاهده یا تغییر ویژگیهای خاص. برای مثال، دسترسی به پنل ادمین یا بخشهای پریمیوم بدون داشتن دسترسی لازم. این مشکل زمانی رخ میدهد که چکهای امنیتی در لایه سرور بهطور کامل پیادهسازی نشده یا بهراحتی با تغییر متد (مثلاً POST به GET) دور زده میشوند.
۳. Race Condition: بهرهبرداری از تداخل در پردازشهای همزمان برای انجام عملیات تکراری. برای مثال، برداشت از حساب همزمان در دو درخواست که باعث میشود موجودی منفی نشود اما مبلغ دوبرابر واریز شود. این ضعف در سیستمهای تراکنشی که قفلگذاری (Locking) مناسب روی دیتابیس ندارند رخ میدهد.
۴. Parameter Tampering: تغییر مقادیر کلیدی در پارامترها برای تغییر رفتار برنامه. برای مثال، تغییر پارامتر role=user به role=admin یا تغییر email برای بازیابی رمز عبور حساب دیگران. این باگ به دلیل عدم اعتبارسنجیِ سختگیرانه پارامترهای دریافتی در سمت سرور رخ میدهد.
۵. Broken Authentication Flow: نقص در فرآیند ورود یا بازیابی رمز. برای مثال، عدم انقضای توکنهای OTP، پذیرش پاسخهای قابل حدس (مثل 0000)، یا لاگاوت نشدن نشستها پس از تغییر رمز. این ضعفها مستقیماً باعث تصاحب حساب (Account Takeover) میشوند.
وقتی صحبت از آسیبپذیریهای ترکیبی (Hybrid Vulnerabilities) در باگبانتی میشود، منظور سناریوهایی است که در آنها شما از یک ضعف فنی (مثل یک خطای کدنویسی یا تنظیمات اشتباه) استفاده میکنید تا یک باگ منطقی (مثل دور زدن فرآیند تجاری یا دسترسی غیرمجاز) را اجرا کنید.
در واقع، آسیبپذیری فنی «ابزار یا حفره» است و آسیبپذیری منطقی «هدف یا نتیجه». این ترکیبها معمولاً بیشترین جایزه (Bounty) را دارند چون پیچیده هستند.
در اینجا ۵ نمونه از خطرناکترین ترکیبهای فنی + منطقی را برایت تحلیل میکنم:
این یکی از محبوبترین ترکیبها در باگبانتی است.
بخش فنی (IDOR): شما متوجه میشوید که سرور فقط بر اساس یک عدد (user_id=123) به دادهها دسترسی میدهد و بررسی نمیکند که آیا شما واقعاً صاحب آن ID هستید یا خیر.
بخش منطقی (Privilege Escalation): شما از این حفره فنی استفاده میکنید تا نه تنها دادههای دیگران، بلکه دادههای یک مدیر (Admin) را ببینید یا تغییر دهید.
نتیجه: شما با یک باگ فنیِ ساده (عدم چک کردن مالکیت)، به یک باگ منطقیِ عظیم (تصاحب حساب ادمین) رسیدید.
بخش فنی (SSRF): شما یک پارامتر در سایت پیدا میکنید (مثل ?url=) که سرور آن را میگیرد و به آن درخواست میزند. این یک ضعف فنی در مدیریت درخواستهای سمت سرور است.
بخش منطقی (Access Control Bypass): شما از این ابزار فنی استفاده میکنید تا به سرویسهایی دسترسی پیدا کنید که طبق منطقِ طراحیِ سیستم، نباید از بیرون قابل مشاهده باشند (مثل پنل مدیریت داخلی یا متادیتای سرویسهای ابری مثل AWS).
نتیجه: شما از یک ضعف در نحوه ارسال درخواست، برای شکستن منطقِ جداسازی شبکههای داخلی و خارجی استفاده کردید.
بخش فنی (Race Condition): شما متوجه میشوید که سرور در پردازش درخواستهای همزمان (Concurrent) کند عمل میکند و بین «بررسی موجودی» و «کسر موجودی» یک فاصله زمانی بسیار کوچک (Time Gap) وجود دارد.
بخش منطقی (Business Logic Flaw): شما با ارسال ۱۰۰ درخواست در یک میلیثانیه، از این فاصله زمانی استفاده میکنید تا قبل از اینکه سرور موجودی شما را کم کند، دوباره درخواست خرید بدهید.
نتیجه: شما از یک نقص فنی در مدیریت Threadها/Thread-safety، برای اجرای یک باگ منطقی (خرید کالا با موجودی صفر یا منفی) استفاده کردید.
بخش فنی (Unrestricted File Upload): سرور اجازه میدهد شما فایلی را آپلود کنید، اما به درستی پسوند یا محتوای فایل را چک نمیکند.
بخش منطقی (Insecure Workflow): شما از این قابلیت برای جایگزین کردن یک فایل سیستمی یا یک فایل تصویر در پروفایل دیگران استفاده میکنید تا در فرآیند بعدی (مثلاً وقتی ادمین عکس شما را میبیند)، کد مخرب شما اجرا شود.
نتیجه: شما از یک ضعف در اعتبارسنجی فایل (فنی)، برای تغییر در جریانِ عادی کارِ یک کاربر دیگر (منطقی) استفاده کردید.
بخش فنی (Mass Assignment): در فریمورکهایی مثل Rails یا Node.js، وقتی شما یک فرم (مثلاً ویرایش پروفایل) را پر میکنید، سرور تمام فیلدهای ارسالی را مستقیماً در دیتابیس ذخیره میکند.
بخش منطقی (Role Manipulation): شما در درخواست خود، یک فیلد اضافی که در فرم نیست اما در دیتابیس وجود دارد (مثل is_admin: true یا role: "admin") را اضافه میکنید.
نتیجه: شما از یک نقص فنی در نحوه نگاشت (Mapping) دادهها به دیتابیس، برای تغییر منطقِ تعیین سطح دسترسی استفاده کردید.
نوع ترکیب// ابزار (فنی)// هدف (منطقی)
حمله به داده// IDOR / SQLi //دیدن اطلاعات شخصی دیگران
حمله به پول// Race Condition //خرید رایگان یا کسر پول کمتر از واقعیت
حمله به هویت// Mass Assignment //تبدیل شدن از کاربر عادی به ادمین
حمله به شبکه// SSRF //رسیدن به بخشهای ممنوعه شبکه داخلی
نکته برای باگبانتی: اگر میخواهی باگهای با ارزش پیدا کنی، همیشه از خودت بپرس: “اگر من بتوانم از این حفرهی فنی (مثل یک پارامتر یا یک خطا) استفاده کنم، چه کاری را در این سایت میتوانم انجام دهم که در حالت عادی و طبق منطقِ برنامه، اجازه انجام دادنش را ندارم؟”
نقاط تمرکز: فرمهای ورود، درگاههای پرداخت، سیستمهای پروفایل کاربری، آپلودر فایل، فیلترهای جستوجو و APIهای مبتنی بر توکن.
پارامترهای کلیدی: id, user_id, amount, price, qty, file, page, redirect, token, role, email, callback.
اندپوینتهای حساس: /api/v1/user/update, /checkout, /add-to-cart, /upload, /profile?id=, /reset-password.
برای تست، از کاراکترهای خاص استفاده کنید تا پاسخ سرور را مشاهده کنید:
SQLi: استفاده از کاراکتر ' یا " در پارامترها برای بررسی خطاهای دیتابیس.
XSS: وارد کردن تگهای ساده مثل alert(1) در فیلدهای متنی.
Logic: تغییر اعداد در پارامترهای قیمت به منفی (مثلاً -100) یا مقادیر بسیار بزرگ.
SSRF: تلاش برای درخواست به http://127.0.0.1 یا http://localhost.
سامانههای مستعد: فروشگاههای اینترنتی (بهدلیل تراکنش مالی)، پلتفرمهای SaaS (بهدلیل پیچیدگی نقشهای کاربری)، سایتهای آموزشی (بهدلیل مدیریت دوره)، و سرویسهای API عمومی.
نکته مهم (زنجیره تأمین): همیشه کتابخانههای جانبی (Dependencies) را چک کنید (CVE). بسیاری از آسیبپذیریهای فنی در نسخههای قدیمی پلاگینها نهفته است.
نکته مهم (اطلاعات افشاشده): بررسی فایلهای پیکربندی مثل .env یا دایرکتوریهای .git که بهاشتباه روی سرور عمومی شدهاند، میتواند دسترسیهای سطح بالایی به شما بدهد.
این مقاله جهت ارتقای سطح دانش امنیت تهیه شده است. در تمام مراحل تست نفوذ، همواره به قوانین «Scope» پلتفرمهای باگبانتی پایبند باشید.
برای تست امنیت سایت به ایدی @itman30 در بله پیام بدید