بررسی حملات HTTP Response Splitting

HTTP Response Splitting زمانی رخ میدهد که جواب اطلاعاتی که ارسال شده به کاربر بدون اعتبار سنجی بازگردانده شود.


از بین چندین کاراکتر های اسکی غیر قابل چاپ دو کاراکترCR یا Carriage Return (\r) با کد اسکی ۱۳یا LF ، Line Feed (\n) با کد اسکی ۱۰ وجود دارند که در اثر کنار هم قرار گرفتن این ۲ کاراکتر در ورودی میتوانند مشکل ساز شوند. که به حملاتی که با این ۲ کاراکتر رخ میدهد حملات CRLF Injection میگویند.

در واقع دو کاراکتر CRLF در سیستم عامل ویندوز و داس نقش فشرده شدن کلید Enter را دارند و این اسیب پذیری در بعضی از مکان ها میتواند یک اسیب پذیری بی ارزش و در بعضی از مکان ها آسیب پذیری مهمی به شمار رود.
یکی از کاربرد های این آسیب پذیری که در حملات File Download Injection یا Http Response Splitting نیز مشخص هست دستکاری Header ها میباشد. فرض کنید ما بتوانیم با استفاده از این حملات اسم فایل ، تعداد کاراکتر های درون آن را به مقدار دلخواه خود تغییر دهیم !

HTTP Header چیست؟

HTTP Header ها درخواستی را به سرور می فرستند و سپس پروتکل HTTP Response و در واقع پاسخی را بر میگرداند. زمانی که ما یک وب سایت را بارگذاری میکنیم مرورگر یک درخواست به سرور میفرستد ( درخواست سمت – کاربر) و اطلاعاتی را که برگردانده میشود را میخواند ( پاسخ سمت – سرور ) و بر روی صفحه وب نمایش میدهد.
برای مثال زمانی که ما یک سایت را باز میکنیم این اتفاقات میافتد:
مرورگر ما در خواست های زیر را ارسال میکند:

و سرور پاسخ را میدهد:

خب ، حالا یک برنامه ای رو مثال بزنیم که از HTTP Header ها درون خودش استفاده کند ! برای مثال ما برنامه ای داریم که زمانی که وارد آدرس زیر میشویم ما را به سایت Google.com ارجاع میدهد:

تگ متایی که استفاده کردیم ما را به صورت مستقیم به سایت google.com ارجاع میدهد و ورودی url از برنامه آدرسی است که کاربر برای Redirection وارد میکند.HTTP Header بدین شکل میباشند:

در نهایت سرور در واکنش به درخواست ما پیام HTTP 200 OK و اطلاعات صفحه اصلی گوگل را برمیگرداند .

دستکاری header با تزریق CRLF

همانطور که از مثال بالا بسیار روشن است ، کاربر میتواند اقدام به تغییر header های ارسالی به مرورگر به منظور تغییر مکان ارجاع بکند.

توجه داشته باشید که %۰d%0a همان ترکیب CRLF ای است که استفاده میشود.

واکنش :

در درخواست بالا ما فقط پارامتر url را تغییر دادیم و کاراکتر های CRLF را پیرامون New_Header:New_Header_Value قرار دادیم. مثال دیگه ای از این نوع حملات را میتوانیم با تزریق CRLF به منظور Redirect کاربر به جای دیگه ای عنوان کنیم.

برای مثال :

واکنش سرور:

در مثال بالا چگونگی ساخت header جدید با استفاده از CRLF Injection را نشان دادیم.

البته کاربرد این آسیب پذیری فقط به اینجا خلاصه نمیشود و در فایل های ثبت وقایع و پروتکل های دیگه غیر از HTTP میتوان از آن استفاده کرد.

ارسال نظر

ایمیل شما منتشر نخواهد شد. پر کردن ورودی ها الزامی است. *

*

چهارده − 11 =