بررسی آسیب پذیری Server Side Template Injection (SSTI)

آسیب پذیری Server Side Template Injection (SSTI) چیست ؟موتورهای قالب (Template engines) به طور گسترده ای توسط برنامه های کاربردی وببرای ارائه داده های پویا (داینامیک) از طریق صفحات وب و ایمیل ها استفاده می شوند. جاسازی غیر ایمن ورودی کاربر در قالب ها ، باعث آسیب پذیری Server Side Template Injection میشود که یک آسیب پذیری مهم به شمار میرود و حتی منجر به XSS نیز میشود.بر خلاف XSS تزریق الگو (Template Injection) می تواند برای حمله مستقیمبه بخش داخلی سرورهای وب و اغلب به دست آوردن کد از راه دور (RCE) استفاده شود، و هکر بدون داشتن دسترسی ادمین کدهای سروری را اجرا کند.Template Injection می تواند هم از طریق خطای توسعه دهنده و هم از طریق قرار گرفتن Template به صورت ورودی باشد.نگاهی عمقی تربرنامه های کاربردی وب اغلب از سیستم های الگو مانند Twig و FreeMarker برای جاسازیمحتوای پویا در صفحات وب و ایمیل ها استفاده می کنند. Template Injection زمانی اتفاق می افتد که ورودی کاربر به صورت ناامن در قالب جاسازی شده است (یعنی کاربر بتواند برای سرور ورودی بدون فیلتر بفرست یا فیلتر قابل دور زدن باشد). یک برنامه بازاریابی را در نظر بگیرید که ایمیل های انبوه ارسال می کند و از یک قالب Twig برای استقبال از نام گیرندگان استفاده می کند. اگر نام فقط به الگو منتقل شود، مانند مثال زیر همه چیز خوب کار می کند$output = $twig-render("Dear {first_name},", array("first_name" = $user.first_name) )با این حال، اگر به کاربران اجازه داده شود این ایمیل ها را سفارشی کنند، مشکلات زیر رخ می دهد :$output = $twig-render($_GET['custom_email'], array("first_name" $user.first_name) );به عنوان مثال :در این مثال اگر کاربر محتوای قالب را از طریق پارامتر custom_email GET به جای مقدار اصلیو صحیح تغییر دهد، یکی از آسیب پذیری هایی که میتوان در این مرحله رخ دهد آسیب پذیری XSS است. این کد در واقع سطح حمله گسترده اما به راحتی نادیده گرفته می شود. خروجی از دو پیام تبریک زیر به آسیب پذیری سمت سرور اشاره می کند :خیال کنید ما بجای ایمیل عبارت {{7*7}} را به عنوان ورودی ارسال کنیم :custom_email={{7*7}}result : 49در ادامه..آنچه در اینجا داریم اساساً اجرای کد سمت سرور در یک سندباکس است.بسته به موتور قالب مورد استفاده ، ممکن است بتوان از سندباکس فرار کرد و کد دلخواه را اجرا کرد.این آسیب پذیری معمولاً از طریق توسعه دهندگان ایجاد می شود که عمدا به کاربران اجازه می دهندقالب ها را ارسال یا ویرایش کنند .هر ویژگی که کاربر بتوانند کدهایی سمت وب اپلیکیشن ارسال کند، ممکن است آسیب پذیر باشد، از جمله صفحات ویکی و نظرات.Template injection همچنین می تواند به طور تصادفی ایجاد شود، هنگامی که ورودی کاربر به سادگی مستقیماً به یک الگو متصل می شود. این ممکن است کمی خلاف شهود به نظر برسد، اما معادل آسیب پذیری های SQL Injection استکه یک اتفاق نسبتاً شایع است. علاوه بر این ،Template injection غیر عمد بسیار آسان استزیرا معمولاً هیچ نشانه قابل مشاهده ای وجود نخواهد داشت. مانند سایر آسیب پذیری های ورودی، ورودی می تواند از منابع باند خارج باشد. به عنوان مثال ، ممکن است به عنوان یک نوع Local File Include (LFI) رخ دهد، که از طریق تکنیک های کلاسیک LFI مانند کد تعبیه شده در پرونده های log فایل های session یا /proc/self/env باشدچند تمرین برای آسیب پذیری SSTIhttps://www.root-me.org/en/Challenges/Web-Server/Java-Server-side-Template-Injectionhttps://portswigger.net/web-security/server-side-template-injection/exploiting/lab-server-side-template-injection-basicخدمات آموزشیخدمات وبخدمات گیمینگصفحه اینیستاگرام | تلگرام بلک بری | یوتویوب | آپارات | زی لینک | دیسکورد