سلام عماد هستم، این اولین نوشتار من برای مموری لیکز هست، تو این نوشتار میخواهیم یک بررسی بر روی فرآیند Automate کردن XSS داشته باشیم که بتونیم تو کمترین زمان ممکن به نتیجه برسیم.
داستان از کشف آسیبپذیری Reflected DOM XSS توی یکی از برنامههای باگبانتی خارجی شروع شد. پس از کشف که داستانش مفصله و از حوصله این نوشتار خارجه، از ابزارهای مختلف برای بررسی این XSS استفاده کردم و گفتم نتایج رو با شما به اشتراک بذارم.
عکس زیر URL آسیبپذیر به XSS هست:
2 پارامتر در داخل URL داریم، برای پارامتر fid=5? یک مقداری را وارد میکنیم تا Reflect شدن آن را بررسی کنیم:
بعد از وارد کردن پارامتر Reflect نمیشد و به Index.php ریدایرکت میشد.
ولی تست اینجا تموم نمیشه، با کمی بررسی روی پارامتر و استفاده از تکنیکهای Escaping به شکل زیر میرسیم:
در پی Reflection بالا میشد HTML Injection انجام داد:
و در پی HTML Injection میرسیم به XSS:
روش کشف آسیبپذیری XSS
در مثال بالا مقدمهای بر روی موضوع این نوشتار داشتیم، اگر شد بررسی فنی و Write-up حمله بالا را آینده منتشر میکنیم، موضوع این نوشتار پیدا کردن پارامترهایی شبیه حمله بالا، با سرعت زیاد و با استفاده از Automation است ، همانطور که دیدید پارامترهای ما در داخل URL بودند، این به این معنی است که با Spider کردن وب سایت میشد به آنها رسید.
Spider
Spider کردن یا Crawling هنر پیدا کردن تمامی URL های یک سایت است، منظور از URL لینک هایی است که در سایت وجود دارد و دنبال کردن زنجیره ای آنها به ما اطلاعات بیشتری راجع به تارگت میدهد.
ولی این روش به تنهایی جوابگو نیست، همانطور که گفتیم این کار تعداد زیادی URL به ما میدهد و بررسی دستی تک تک URL ها به شدت زمانبر است، راه حل چیه؟
مرحله اول
از اول شروع کنیم، برای Spider کردن از ابزارهای زیادی میتونیم استفاده کنیم برای مثال امروز من از Waybackurls استفاده کردم که از آرشیو قدیمی Snapshot هایی که از وب سایتها میگیره به ما URL های مربوط به اون سایت رو میده.
نمونه گرافیکی را در شکل زیر میتونید ببینید:
من از نسخه CLI استفاده میکنم، میتونید از اینجا نصبش کنید.
مشکلاتی که داریم
مرحله اول اینجا تموم میشه، در مرحله بعدی باید خروجی Waybackurls رو جدا کنیم، در مرحله قبل تعداد زیادی URL میگیریم که 3 تا مشکل داره:
1- برای پارامترهایی که از یک جنس هستند، کافیه روی یک پارامتر تست انجام بشه ( عکس بالا پارامتر =p? )
2- همه ی پارامترهایی که پیدا میکنیم، پارامترهای مشکوک به XSS نیستند.
3- Waybackurls از آرشیو قدیمی وب استفاده میکنه، خیلی از URL ها دیگه در دسترس نیستند.
راه حل
1- برای حل مشکل اول باید پارامترهای یکسان را جدا کنیم.
2- برای حل مشکل دوم باید پارامترهای مخصوص XSS را جدا کنیم.
3- برای حل مشکل سوم باید به URL ها درخواست GET بدیم و Status Code را دریافت کنیم.
جدا کردن پارامترهای یکسان
برای اینکار از ابزار deduplicate استفاده میکنیم
جدا کردن پارامترهای XSS
برای پیدا کردن پارامترهای XSS از ابزار gf استفاده میکنیم.
میبینید که پارامترهای یکسان زیادی داریم پس از deduplicate استفاده میکنیم تا پارامترهای یکسان را حذف کنیم.
پیدا کردن Valid URLs
برای درخواست دادن به URL ها از Httpx استفاده میکنیم
قابلیتهای دیگر این ابزار
از دیگر قابلیتهای Httpx پیدا کردن موارد زیر است:
انجام فرآیند
در ابتدا با استفاده از Waybackurls تمامی URL های Uber را پیدا می کنیم، سپس با استفاده از deduplicate پارامترهای یکسان را حذف میکنیم، و در آخر با استفاده از gf پارامترهای مشکوک به XSS را جدا میکنیم و خروجی را در یک فایل میریزیم.
در مرحله دوم باید URL هایی که از خروجی دستور قبل گرفتیم را با استفاده از Httpx بررسی کنیم که همچنان در دسترس باشند.
از Httpx خواستیم که به ما Status Code هر URL را بدهد و با استفاده از mc- مشخص میکنیم که دنبال چه Status Code مشخصی میگردیم و در انتها خروجی را در یک فایل میریزیم.
چالش بعدی
در این مرحله اگر تمام مراحل بالا به درستی انجام شده باشد، لیستی از URL های Valid را داریم که داخل آنها پارامترهای مشکوک به XSS وجود دارد و میتوانیم روی URL ها به صورت دستی تست برای پیدا کردن Reflected XSS انجام بدیم، ولی آیا واقعا میخواهیم اینکارو دستی انجام بدیم؟
یا ترجیح میدیم ابزاری استفاده کنیم که بتونه Reflect شدن رو تشخیص بده؟
Reflected Parameters
برای Automate کردن فرآیندِ پیدا کردن پارامترهایی که Reflect میشوند، من از ابزارهای زیادی استفاده کردم، برای مثال یکی از آنها Gxss بود که نسبت به بقیه ابزارها کارش بهتر بود، جای پارامترها یک String میزاشت و اگه توی سورس کد Reflection میدید میگفت، ولی متاسفانه این هم فایدهای نداره چون ما دنبال پارامترهایی هستیم که اجازه وارد کردن Special Characters هایی مثل ‘ < > ” را بهمون بده، اینکارو با Gxss که انجام میدادم همه پارامترهارو آسیب پذیر نشان میداد، چون قدرت درک اینکه کاراکتر Encode یا Filter شده رو نداشت، با کمی سرچ رسیدم به چیزی که میخواستم!
بررسی Reflection
برای بررسی Reflection پارامترها از ابزارهای زیادی میتوان استفاده کرد، از جمله Ninjref ، Gxss و Kxss.
در این بخش به بررسی انواع ابزارها و خروجی های آنها پراختیم.
Ninjref
خب، من یک فایل به اسم LiveUrl درست کردم که داخلش URL آسیبپذیربه XSS اول نوشتار هست، از این URL استفاده کردم، چون نوع Reflection به سادگی قابل تشخیص نبود و باید با استفاده از تکنیک Escaping بررسی Reflection پارامتر را انجام میدادیم.
عکس زیر خروجی ابزار Ninjref است:
همانطور که میبینید فایل URL به عنوان ورودی داده شده، ولی هیچ خروجی از اینکه پارامتر Reflect میشه یا نه نمیگیریم، پس در همین مرحله این ابزار شکست خورد.
Gxss
ابزار دیگر برای تست Reflection پارامترها Gxss است، خروجی این ابزار را در عکس زیر مشاهده میکنید:
همانطور که میبینید این ابزار هم موفق به پیدا کردن Reflection پارامتر داخل URL نشد.
Kxss
Kxss دقیقا چیزیه که ما میخواهیم، با قدرت درک بالا و استفاده از Special Characters ها، مشکل مارو حل میکنه چون اگر اون کاراکترها Encode یا Filter شده باشند، به ما False Positive نمیده و این دقیقا چیزیه که ما میخواهیم.
این عکسی که در بالا میبینید، مثال Reflected DOM XSS اول نوشتار بود، شاید نحوه Reflect شدن پارامتر یکم چالش برانگیز باشه چون اگر مقدار Default پارامتر پاک میشد Redirect انجام میشد و بررسی دستی نحوه برخورد وب سرور با هر پارامتر در صورت وارد کردن Special Characters ها زمان زیادی میگیره، و در بین ابزارهایی که برای تست URL بالا استفاده کردم، هیچ ابزاری نتونست Reflect شدن رو پیدا کنه، Kxss نه تنها Reflection رو پیدا کرد بلکه کاراکترهای مجاز رو هم داد.
اکسپلویت
تا اینجا که پیش اومدیم، خیلی به روند کارمون سرعت دادیم و تونستیم پارامترهای Reflect شده را نیز پیدا کنیم، معمولا از این قسمت به بعد به صورت دستی اکسپلویت کردن صورت میگیره، ولی میتونیم قبل از اینکار از XSS Exploitation Tools ها کمک بگیریم.
من از دو ابزار XSStrike و Dalfox که از بهترین ابزار در این زمینه هستند استفاده کردم، بررسی این ابزار را با ما همراه باشید.
XSStrike
این ابزار یکی از بهترین ابزار در زمینه اسکن و اکسپلویت XSS است، با استفاده از این ابزار تست را بر روی URL و پارامتر آسیبپذیر انجام دادیم.
خروجی XSStrike را درعکس زیر ببینید:
میبینید که این ابزار موفق به اکسپلویت کردن نشد.
Dalfox
ابزار Dalfox یکی دیگر از بهترین ابزارها برای اسکن کردن و اکسپلویت کردن XSS است که میتوانیم از آن هم استفاده کنیم.
عکس زیر خروجی استفاده از این ابزار است:
بله! این ابزار توانست اکسپلویت کردن را انجام بده و به ما POC داد، تست را روی پارامتر آسیبپذیر با استفاده از انواع Special Characters ها و متود های Encoding انجام داد و آسیبپذیری را پیدا کرد.
Mindmap
نتیجه گیری
هنر Automation سرعت و دقت کاری ما را چند برابر افزایش میدهد، انجام دادن فرآیند بالا در کمتر از نیم ساعت انجام میشود، از روش بالا استفاده کنید و اگر خوش شانس باشید در کمتر از چند ساعت XSS بزنید.
مرسی که خوندید، خوشحال میشم نظراتتون رو بخونم 🙂
خیلی مفید لذت بردیم،منتظر مطالب بیشتر هستیم??
ممنون از شما که خوندی ?
عالی. خیلی ممنون از مطلب مفیدتون
ممنون از شما که خوندی ?
ممنون بابت توضیحات کامل و ذکر ابزارها
باز هم از این پست ها بزارید لطفا
ممنون از شما که خوندی ?
حتما
خیلی خوب و مفید بود ،مخصوصا این که ابزارا رو لینک به منابع انجام دادید ،تشکرفراوان .
ممنون از شما که خوندی ?
سلام. خیلی خوب بود، ولی آخرش اشاره نکردی که تونستی با این اتومیشن
باگی پیدا کنی یا نه.
سلام، هنوز نه ولی در حال تست ایم.
فوق العاده بود دست خوش!
بسیار عالی و درجه یک
اگه ممکنه همچین اتومیشنی رو برای حمله ssrf هم بزارید لطفا. ممنون
سلام، اگر فرصت شد حتما.
عالی، ولی اینطوری دیگه لذتی از کار نمیبری و در واقع خودت کاری انجام نمیدی و همه چیز اتوماتیک داره انجام میشه، نمیشه به این ابزار ها تکیه کرد! ممکنه wayback همه url هارو نده یا اصلا اشتباه بده، اصلا مشخص نیست بر چه اساسی داره این url هارو میده؟ بر اساس میزان بازدیده؟ اگه اینطوری باشه اونوقت ممکنه واقعا یه اسیب پذیری بزرگ رو توی اون سایت جا بذاری … به نظر من اینطوری نمیشه امنیت رو کامل کرد. همونطوری که توی مطلب هم اشاره کردی اینه که همین ابزار ها خودشون اشتباهات زیادی دارن. (درضمن وبسایتی که تازه میاد بالا توی wayback هنوز ثبت نشده قطعا و زمان میبره تا اون url ها ثبت بشن)
ولی مطلب شما عالی بود. خسته نباشید.
سلام ممنون از نظرتون، حرف شما کاملا درسته، استفاده از این ابزارها و این روشها در فاز Recon و قبل از شروع به Manual Testing صورت میگیره، این نوع تست ها معمولا به صورت اسکریپت در میاد و استفاده میشه و دقیقا همونطور که خودتون گفتید شباهتی به امنیت و تست درست اپلیکیشن نداره و اکثر آسیب پذیریها فقط با Manual Testing در میاد ولی در این مورد که مقدمه نوشتار رو باهاش شروع کردم با استفاده از Spidering این دامین ( که در اینجا از Wayback استفاده شده بود ) میشد به URL آسیب پذیر رسید، ولی خب در خیلی جاها هم ممکنه ابزار URL هارو جا بذاره، در رابطه با سوال بعدیتون Wayback اون URL هارو از Archive اسنپ شات هایی که از سایت ها میگیره به ما میده، سایت اصلی که داره اینکارو میکنه Archive.org هست، این ابزار به صورت CLI اون URL هارو از سایت میگیره به شما میده.
سلام
خیلی عالی بود، من تمام آموزش رو انجام دادم و ابزارهارو نصب و تست کردم، فقط به یک مسئله برخوردم، متاسفانه kxss برای من هیچ خروجی نمیاره، حتی gxss بهتر از اون عمل میکنه، روی سایت های آسیب پذیر واقعی تست کردم، چندین مرتبه هم kxss رو نصب کردم و پاک کردم، اما باز هم خروجی به من نشون نمیده، فکر میکنید ایراد از کجاست؟
سلام نمایش ندادن Kxss نشان بر آسیب پذیر نبودن اون Endpoint است، اگر چیزی نشون بده یعنی آسیب پذیره، از Gxss استفاده نکنید چون حتی مقادیر encode/block شده را به عنوان reflected میشناسه.
خیلی ام عالی، به قول داداشم آبراهام لینکلن : “اگه ده دقیقه بهت فرصت دادن تا درختی و قطع کنی، شش دقیقه از وقتت و صرف تیز کردن تبرت کن”
دمت گرم داداش عالی بود
بسیار عالی بود
عماد جان خداقوت 🙂
بسیار کامل و جامع بود از بهترین رایت آپ هایی بود که خوندم
سلام و درودی مطلب خیلی عالی و ارزندهای بود.
خدمت شما عرض کنم که من خیلی به این زمینه علاقه دارم خیلی در مورد انواع باگ های جاوا اسکریپت و نفوذ از طریق جاوااسکریپت داخل سایتا گشتم و js هم مقداری مقدماتی بلدم دوست دارم خیلی بیشتر یاد بگیریم، بعضی از اصلاحاتی ک بکار بردید رو هم متوجه نشدم
بنظر شما از کدوم منبع شروع کنم برای یادگیری مقدماتی داخل سایت های ایرانی هیچی نیست، زبان انگلیسی خودمم در اون حد حرفه ای نیست ک کامل مقالات سایت های خارجی رو متوجه بشم یک منبعی معرفی کنید که خیلی ساده شروع کرده و مطلب رو بیان کرده.
باتشکر