حمله Path Traversal Attack یک حمله HTTP برای دسترسی و دستیابی به فایلها و پوشههایی است که خارج از پوشه روت یا ریشه وب ذخیره شدهاند. وبسایتها توسط دو دسته فایلها ساخته میشوند، آنهایی که توسط مرورگر قابل دسترسی هستند مانند فایلهای css و جاوااسکریپت و دیگری آنهایی که توسط مرورگر و بدون احراز هویت قابل دسترسی نیستند :
- ACLs : برای دسترسی نیز به احراز هویت دارند
- پوشه ریشه – root : برای دسترسی نیاز به احراز هویت ندارند
برای مثال پوشه روت پیش فرض وب سرور IIS ویندوز مسیر C:\Inetpub\wwwroot است. بنابراین کاربر نمیتواند به مسیر C:\Windows دسترسی داشته باشد اما میتواند به مسیر C:\Inetpub\wwwroot\news و تمام مسیرهای زیر پوشه root دسترسی داشته باشد.
پوشه Root از دسترسی کاربران به فایلهای مهم و حساس مانند C:\WINDOWS/system32/win.ini در ویندوز و یا /etc/passwd در لینوکس جلوگیری میکند.
آسیبپذیری Traversal Attack میتواند هم به نرمافزار وبسرور و هم به کدهای اپلیکیشن وب مربوط باشد. خرابکار برای این حمله به یک مرورگر و دانشی در مورد محل فایلهای پیشفرض روی سرور نیاز دارد.
اگه حمله Directory Traversal موفقیت آمیز باشد، خرابکار میتواند به فایلهای مهم و حساس خارج از مسیر ریشه دسترسی داشته باشد و بسته به تنظیمات وبسرور فعالیتهای مخرب دیگری روی آن پیاده کند.
چگونه حمله Directory Traversal انجام میشود :
فرض کنید یک فروشگاه آنلاینی است که عکسهای محصولاتش را برای فروش نشان میدهد. عکسها از طریق کد html مانند <img src=”/loadImage?filename=218.png”> نمایش داده میشوند.
همانطور که میبینید آدرس loadImage پارامتر filename را میگیرد و یک فایل مشخصی را برمیگرداند. عکسها هم در پوشه /var/www/images/ ذخیره میشوند. بنابراین آدرس عکس ۲۱۸ در واقع /var/www/images/218.png است.
این اپلیکیشن در برابر حمله پیمایش فهرست هیچ محافظتی ندارد. بنابراین خرابکار میتواند با استفاده از این URL به فایلهای مهم و حساس سیستمی دست پیدا کند:
۱ |
https://insecure-website.com/loadImage?filename=../../../etc/passwd |
در واقع اپلیکیشن از مسیر /var/www/images/../../../etc/passwd شروع به خواندن اطلاعات میکند.
دنباله /.. در مسیر فایل معتبر است و به معنی سطح در ساختار پوشهها است. در مثال بالا سه دنباله /.. از مسیر /var/www/images/ سه سطح به سمت بالا میرود و فایل /etc/passwd خوانده میشود.
در سیستمهای برپایه Unix مسیر /etc/passwd به فایلی میرسد که شامل کاربران ثبتنام شده روی سرور است.
در سیستمهای ویندوزی دنبالههای /.. و \.. هر دو معتبر هستند. در مورد مثال بالا اگر سیستم ویندوز باشد آدرس زیر بکار گرفته میشود :
۱ |
https://insecure-website.com/loadImage?filename=..\..\..\windows\win.ini |
چگونه از حمله Path Traversal Attack جلوگیری کنیم؟
بعد از اینکه روی وبسایت خود و یا دوستانتان -با کسب اجازه از آنها- این حمله را تست کردید، اگر این ضعف وجود دارد پس باید جلوی آن را بگیرید. یکی از راهها استفاده از سرویسهایی اینترنتی مانند acunetix است. اما اگر خودتان میخواهید این مشکل را برطرف کنید :
یکی از بهترین راهها کنترل ورودیهای کاربر است. ورودی کاربر باید با لیستی از مقادیر و عبارتهای مجاز مقایسه تا اجازه پروسس به آن داده شود. بعد از اعتبارسنجی ورودی کاربر، برنامه باید این ورودی را به فهرست دایرکتوری اصلی اضافه کند تا با استفاده از API سیستم فایلبندی مسیر را canonicalize کند. بدین معنی که باید تائید کند مسیر از پوشه مورد انتظار شروع میشود.
3 Comments
تجهیزات و قطعات یدکی ماشین آلات سنگ شکن
بسیار آموزنده بود
Amin
سلام
میشه لطفا بهم یادش بدین؟
سعید
سلام،
تقریبا مشخص نوشته شده، اگر سوالی دارید میتوانید بپرسید.