GLOS · واژه‌نامه سرنام

Payload — بارِ مخرب

Payload

Payload بخشی از ورودی یا حمله است که اثر مورد نظر را حمل می‌کند؛ فهم تفاوت آن با بردار حمله و اکسپلویت، تفاوت بین جمع‌آوری فهرست payload و انجام آزمون امنیتی واقعی است.

تیم فنی پی‌هانتر

Payload چیست؟

در امنیت، payload آن بخشی از داده یا حمله است که اثر مورد نظر را حمل می‌کند. بقیه‌ی اجزا وسیله‌ی رساندن آن هستند. این واژه در دو زمینه‌ی مرتبط اما متفاوت به کار می‌رود و مخلوط کردنشان منبع بسیاری از سردرگمی‌هاست:

  • در آزمون برنامه‌ی وب: ورودی ساخته‌شده‌ای که در یک پارامتر، هدر، کوکی یا بدنه‌ی درخواست قرار می‌گیرد تا نشان دهد برنامه ورودی را از دستور جدا نمی‌کند. مثال کلاسیک و کم‌اثر: ' OR '1'='1 در فیلدی که مستقیماً به کوئری می‌رود.
  • در چارچوب‌های بهره‌برداری: کدی که پس از موفقیت اکسپلویت روی هدف اجرا می‌شود — معنای payload در Metasploit، نزدیک به مفهوم reverse shell.

در هر دو معنا، payload به‌خودی‌خود «حمله» نیست؛ یک رشته تا وقتی به سینک آسیب‌پذیری نرسد، فقط یک رشته است.

تفاوت payload، بردار حمله، اکسپلویت و PoC

مفهومیعنی چهمثال در وب
بردار (Vector)مسیر یا کانالی که ورودی از آن به کد آسیب‌پذیر می‌رسدپارامتر URL، هدر HTTP، کوکی، فیلد فرم، بدنه‌ی JSON، فایل آپلودی، فریم WebSocket
Payloadمحتوایی که در آن بردار قرار می‌گیرد و اثر را ایجاد می‌کند' OR '1'='1 برای تزریق SQL، {{7*7}} برای تشخیص SSTI
اکسپلویت (Exploit)سازوکار کاملی که بردار، payload و پیش‌شرط‌ها را کنار هم می‌گذارد تا به نتیجه‌ی مشخصی برسدزنجیره‌ای که از آپلود فایل به اجرای کد می‌رسد
PoCکمینه‌ترین نمایش قابل تکرار که وجود آسیب‌پذیری و اثرش را اثبات می‌کندیک درخواست و پاسخ که نشان می‌دهد کاربر B رکورد کاربر A را دیده است

تفکیک این مفاهیم پیامد عملی دارد: یک payload که در یک بردار جواب می‌دهد ممکن است در بردار دیگری بی‌اثر باشد، چون زمینه‌ی خروجی (HTML، ویژگی، جاوااسکریپت، URL) متفاوت است. به همین دلیل در XSS «زمینه» از «payload» مهم‌تر است.

دسته‌های payload بر پایه‌ی نوع آسیب‌پذیری

هر دسته آسیب‌پذیری شکل مشخصی از payload دارد. نمونه‌های زیر نشانگرهای تشخیصی کم‌اثر هستند: هدفشان نشان دادن تفسیر ورودی به‌عنوان دستور است، نه ایجاد آسیب:

آسیب‌پذیریشکل نشانگرچه چیزی را ثابت می‌کند
تزریق SQL' OR '1'='1ورودی به ساختار کوئری راه دارد
SSTI{{7*7}} یا ${7*7}ورودی به‌جای داده، درون قالب ارزیابی می‌شود
پیمایش مسیر../../etc/passwdمسیر فایل از ورودی ساخته می‌شود
SSRFhttp://127.0.0.1/سرور به‌جای کاربر درخواست بیرونی می‌فرستد
تزریق دستوریک تأخیر زمانی قابل اندازه‌گیریورودی به مفسر سیستم‌عامل می‌رسد

دو نکته که تشخیص را از حدس جدا می‌کند: دیدن «۴۹» در پاسخ برای {{7*7}} معنادار است اما بازتاب عین رشته معنایی ندارد؛ و برای آسیب‌پذیری‌های کور که پاسخی برنمی‌گردانند، تشخیص به سرویس خارج‌ازباند (OAST) نیاز دارد، نه payload بهتر.

کدگذاری و مبهم‌سازی: چرا WAF راه‌حل نیست

کدگذاری (Encoding) و مبهم‌سازی (Obfuscation) تغییر شکل payload است بدون تغییر معنای آن برای مفسر مقصد. اهمیت دفاعی این مفهوم روشن است: نشان می‌دهد چرا نمی‌توان به فیلترینگ تکیه کرد. کلاس‌های شناخته‌شده‌ی دور زدن WAF:

  • کدگذاری و کدگذاری چندلایه — URL، کدگذاری مضاعف، موجودیت‌های HTML، یونیکد. فیلتر یک لایه را می‌بیند، مفسر لایه‌ی دیگر را.
  • تغییر حروف و درج کامنت — امضاهایی که به رشته‌ی دقیق حساس‌اند با تغییر کوچک از کار می‌افتند.
  • آلایش پارامتر HTTP و تغییر نوع محتوا — فرستادن همان داده به شکل JSON یا multipart، وقتی فیلتر فقط فرم‌کدشده را بازرسی می‌کند.
  • بدنه‌ی بزرگ — عبور از سقف بازرسی WAF.
  • یافتن IP مبدأ سرور — در عمل قابل‌اتکاترین «دور زدن»: اتصال مستقیم به سرور پشتی و حذف کامل WAF از مسیر.

نتیجه‌ی مدیریتی این فهرست روشن است: WAF یک کنترل جبرانی و خریدار زمان است، نه رفع. در گزارش تست نفوذ حرفه‌ای، «WAF نصب کنید» هرگز به‌عنوان راهکار رفع یک آسیب‌پذیری سطح کد نوشته نمی‌شود؛ راهکار، تغییر کد است و قاعده‌ی WAF حداکثر یک کاهش‌دهنده‌ی موقت.

Payload چندریختی (Polyglot)

payload چندریختی رشته‌ای است که در چند زمینه یا چند موتور به‌طور هم‌زمان معنادار باشد. نمونه‌ی متعارف در آزمون تزریق قالب، رشته‌ای است که نشانگرهای چند موتور را کنار هم می‌گذارد:

${{<%[%'"}}%\

منطقش ساده است: در آزمونی با صدها نقطه‌ی ورودی، رشته‌ای که در بیشترین حالت واکنش ایجاد کند تعداد درخواست‌ها را کم می‌کند و زمینه‌های غیرمنتظره را آشکار می‌سازد.

هزینه‌اش هم واقعی است: پرسروصدا هستند، احتمال خطای پارس را بالا می‌برند و نتیجه‌شان مبهم است — می‌فهمید چیزی شکسته، اما نمی‌دانید کدام موتور و کدام زمینه. پس چندریختی ابزار مرحله‌ی غربالگری است و باید با نشانگر اختصاصی تأیید شود. فازینگ همین منطق را با حجم بیشتر اجرا می‌کند.

باور غلط رایج

«داشتن فهرست بزرگی از payload یعنی توانایی تست نفوذ.» نه. payload بخش کم‌ارزش زنجیره است. آنچه یافته می‌سازد، فهم زمینه و سینک است: کدام ورودی به کدام مفسر می‌رسد و چه چیزی در مسیر آن را پاک‌سازی می‌کند. دو نتیجه‌گیری غلط هم شایع است: مسدود شدن یک payload به‌معنای امن بودن برنامه نیست (فقط فیلتر آن الگو را گرفته)، و عبور یک payload از فیلتر هم به‌معنای وجود آسیب‌پذیری نیست تا وقتی اثر واقعی اثبات نشود.

مرزهای اخلاقی و قراردادی

انتخاب payload یک تصمیم اخلاقی و قراردادی است، نه فقط فنی. اصولی که یک تیم حرفه‌ای رعایت می‌کند:

  • کم‌اثرترین payload که اثبات را انجام دهد. اگر یک تأخیر زمانی کافی است، دلیلی برای اجرای دستور مخرب وجود ندارد.
  • هیچ payload تخریبی: حذف یا تغییر داده، از کار انداختن سرویس، و ایجاد پایداری، همه خارج از دامنه‌اند مگر با توافق صریح.
  • عدم ماندگاری: payload ذخیره‌شده — مثل XSS ذخیره‌شده در فیلد عمومی — به کاربران واقعی می‌رسد؛ چنین آزمونی باید با شناسه‌ی قابل‌ردیابی، در حساب آزمایشی و با پاک‌سازی مستند انجام شود.
  • ثبت کامل: هر payload با زمان و هدف، تا تیم مشتری لاگ خود را تفکیک کند.

این مرزها در قرارداد و قواعد اجرای آزمون نوشته می‌شوند و همان چیزی هستند که آزمون مجاز را از حمله جدا می‌کنند. اگر آسیب‌پذیری در محصول یک تأمین‌کننده باشد، مسیر درست افشای مسئولانه است.

پرسش‌های متداول

تفاوت payload و اکسپلویت چیست؟

payload محتوایی است که اثر را حمل می‌کند؛ اکسپلویت سازوکار کاملی است که بردار، payload و پیش‌شرط‌ها را کنار هم می‌گذارد تا نتیجه‌ی مشخصی بگیرد. یک payload بدون بردار مناسب و بدون رسیدن به سینک آسیب‌پذیر، فقط یک رشته‌ی متنی است.

آیا payload چندریختی بهتر از payload اختصاصی است؟

برای غربالگری سریع بله، برای تأیید نه. چندریختی تعداد درخواست‌ها را کم می‌کند و زمینه‌های غیرمنتظره را نشان می‌دهد، اما نتیجه‌اش مبهم است و پرسروصدا هم هست. پس از واکنش مثبت باید با نشانگر اختصاصی همان موتور و همان زمینه تأیید شود.

اگر WAF ما payload را مسدود کند، برنامه امن است؟

نه. مسدود شدن یک payload فقط یعنی آن الگوی خاص شناسایی شده. کدگذاری چندلایه، تغییر حروف، آلایش پارامتر، تغییر نوع محتوا و مهم‌تر از همه یافتن IP مبدأ سرور، همگی راه‌های شناخته‌شده‌ی دور زدن هستند. آسیب‌پذیری در کد باقی می‌ماند و در گزارش هم باید بر پایه‌ی شدت خودش امتیاز بگیرد.

برای یادگیری، payloadها را از کجا تمرین کنیم؟

فقط در محیط‌های آموزشی مجاز: آزمایشگاه‌های رسمی آموزش امنیت وب و برنامه‌های آسیب‌پذیر عمدی که خودتان مستقر کرده‌اید. ارسال payload به سامانه‌ای که مجوز کتبی آزمونش را ندارید، تخلف است — حتی اگر payload بی‌اثر باشد. مسیر یادگیری ساخت‌یافته در راهنمای تست نفوذ وب آمده است.

کاربرد عملی

اگر تیم توسعه یا امنیت هستید، درست‌ترین برداشت از مفهوم payload این است:

  • هیچ‌گاه دفاع را بر فیلتر کردن payload بنا نکنید. کدگذاری چندلایه، تغییر حروف و تغییر نوع محتوا هر فهرست امضایی را دور می‌زنند.
  • دفاع درست جداسازی داده از دستور است: کوئری پارامتری، APIهای بدون شل، کدگذاری متناسب با زمینه‌ی خروجی و فهرست سفید برای شناسه‌ها.
  • WAF را کنترل جبرانی و ابزار وصله‌ی مجازی بدانید، نه راهکار رفع در گزارش.
  • سینک‌ها را فهرست کنید و همان فهرست را مبنای بازبینی کد قرار دهید.
  • در آزمون کم‌اثرترین payload را انتخاب و هر ارسال را ثبت و پاک‌سازی کنید.
  • هر یافته را با PoC کمینه، شناسه‌ی CWE و امتیاز CVSS مستند کنید.

واژه‌های مرتبط

→ بازگشت به دانشنامه
PUT IT TO THE TEST

امنیت سامانه‌ی شما را
به مهاجمان واگذار نکنید

تیم پی‌هانتر با دیدِ یک مهاجم واقعی، این آسیب‌پذیری‌ها و ده‌ها مورد دیگر را روی دارایی‌های شما می‌سنجد.