نگاره‌هایی پیرامون امنیت، شبکه و رمزنگاری

25 نوامبر 2020

سلام عماد هستم، این اولین نوشتار من برای مموری لیکز هست، تو این نوشتار میخواهیم یک بررسی بر روی فرآیند 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 بزنید.

مرسی که خوندید، خوشحال میشم نظراتتون رو بخونم 🙂

2 پست نوشته شده
باگ هانتر، عاشق امنیت و حل مشکلات غیر ممکن 🙂
  • به اشتراک بگذارید:
  1. تکین گفت:

    خیلی مفید لذت بردیم،منتظر مطالب بیشتر هستیم🔥🔥

  2. فرزاد گفت:

    عالی. خیلی ممنون از مطلب مفیدتون

  3. محمد گفت:

    ممنون بابت توضیحات کامل و ذکر ابزارها
    باز هم از این پست ها بزارید لطفا

  4. smnh گفت:

    خیلی خوب و مفید بود ،مخصوصا این که ابزارا رو لینک به منابع انجام دادید ،تشکرفراوان .

  5. مهرداد گفت:

    سلام. خیلی خوب بود، ولی آخرش اشاره نکردی که تونستی با این اتومیشن
    باگی پیدا کنی یا نه.

  6. سعید گفت:

    فوق العاده بود دست خوش!

  7. navid گفت:

    بسیار عالی و درجه یک

  8. soheil گفت:

    اگه ممکنه همچین اتومیشنی رو برای حمله ssrf هم بزارید لطفا. ممنون

  9. mehdi lotfi گفت:

    عالی، ولی اینطوری دیگه لذتی از کار نمیبری و در واقع خودت کاری انجام نمیدی و همه چیز اتوماتیک داره انجام میشه، نمیشه به این ابزار ها تکیه کرد! ممکنه wayback همه url هارو نده یا اصلا اشتباه بده، اصلا مشخص نیست بر چه اساسی داره این url هارو میده؟ بر اساس میزان بازدیده؟ اگه اینطوری باشه اونوقت ممکنه واقعا یه اسیب پذیری بزرگ رو توی اون سایت جا بذاری … به نظر من اینطوری نمیشه امنیت رو کامل کرد. همونطوری که توی مطلب هم اشاره کردی اینه که همین ابزار ها خودشون اشتباهات زیادی دارن. (درضمن وبسایتی که تازه میاد بالا توی wayback هنوز ثبت نشده قطعا و زمان میبره تا اون url ها ثبت بشن)

    ولی مطلب شما عالی بود. خسته نباشید.

    • عماد روشن گفت:

      سلام ممنون از نظرتون، حرف شما کاملا درسته، استفاده از این ابزارها و این روش‌ها در فاز Recon و قبل از شروع به Manual Testing صورت میگیره، این نوع تست ها معمولا به صورت اسکریپت در میاد و استفاده میشه و دقیقا همونطور که خودتون گفتید شباهتی به امنیت و تست درست اپلیکیشن نداره و اکثر آسیب پذیری‌ها فقط با Manual Testing در میاد ولی در این مورد که مقدمه نوشتار رو باهاش شروع کردم با استفاده از Spidering این دامین ( که در اینجا از Wayback استفاده شده بود ) میشد به URL آسیب پذیر رسید، ولی خب در خیلی جاها هم ممکنه ابزار URL هارو جا بذاره، در رابطه با سوال بعدیتون Wayback اون URL هارو از Archive اسنپ شات هایی که از سایت ها میگیره به ما میده، سایت اصلی که داره اینکارو میکنه Archive.org هست، این ابزار به صورت CLI اون URL هارو از سایت میگیره به شما میده.

  10. بهنام گفت:

    سلام
    خیلی عالی بود، من تمام آموزش رو انجام دادم و ابزارهارو نصب و تست کردم، فقط به یک مسئله برخوردم، متاسفانه kxss برای من هیچ خروجی نمیاره، حتی gxss بهتر از اون عمل میکنه، روی سایت های آسیب پذیر واقعی تست کردم، چندین مرتبه هم kxss رو نصب کردم و پاک کردم، اما باز هم خروجی به من نشون نمیده، فکر میکنید ایراد از کجاست؟

    • عماد روشن گفت:

      سلام نمایش ندادن Kxss نشان بر آسیب پذیر نبودن اون Endpoint است، اگر چیزی نشون بده یعنی آسیب پذیره، از Gxss استفاده نکنید چون حتی مقادیر encode/block شده را به عنوان reflected میشناسه.

  11. مصطفی گفت:

    خیلی ام عالی، به قول داداشم آبراهام لینکلن : “اگه ده دقیقه بهت فرصت دادن تا درختی و قطع کنی، شش دقیقه از وقتت و صرف تیز کردن تبرت کن”

  12. sobhan گفت:

    دمت گرم داداش عالی بود