
در این بخش از دوره آموزشی SEC542 از موسسه SANS به آشنایی با ابزارهای شناسایی آسیب پذیری XSS می پردازیم.
ابزارهای XSS
همانطور که قبلا گفتیم، Cross-Site Scripting یک آسیبپذیری خطرناک است که ممکن است در هر نوع اپلیکیشنی وجود داشته باشد. اگرچه مثل همیشه پراکسی ابزار اول کار ماست، اما ابزارهای مختص آسیب پذیری XSS ، میتوانند در یافت این آسیبپذیری به ما کمک زیادی کنند.
در ادامه به بررسی ابزارهای XSSer، xsssniper و XSScrapy به عنوان ابزارهای مفید در کشف آسیب پذیری XSS ، میپردازیم.
Interception Proxies
Interception Proxy ها معمولا نقش عمدهای در تست دستی برای کشف و اطمینان از وجود XSS بازی میکنند. همچنین در fuzzing کامل و همه جانبه اپلیکیشن، کارایی ویژهای دارند. در مرورگرها افزونههای سادهای برای تست XSS وجود دارد، اما این افزونهها در ارزیابی کامل تمام ورودیهای اپلیکیشن عملکرد کاملی ندارند.
برای یافت XSS میتوانیم به کمک Burp یا ZAP، اپلیکیشن را fuzz کنیم. هر پارامتری که قابلیت تزریق داشته باشد و یا هر فیلدی که توسط پراکسی شناسایی شود، میتواند هدف حمله قرار گیرد. اما واقعا چیزهای بیشتری برای ارزیابی وجود دارند. هر آنچه که ما به سرور ارسال میکنیم، میتواند به عنوان یک ورودی در نظر گرفته شود که پتانسیل آسیبپذیری داشته و باید در محدوده ارزیابیهای ما قرار گیرد. عملا بعضی از المانها بیشتر از بقیه توجه ما را به خود جلب میکنند.
نمونههایی از ورودیهایی که ممکن است نسبت به XSS آسیبپذیر باشند اما زیاد مورد توجه قرار نگیرند عبارتند از: user agent ها، کوکیها، توکنهای session، هدرهای customize شده HTTP، HTTP Referer و غیره.
نکته: دیکته اشتباه کلمه “referer” طبق RFC بوده و در لینک زیر به آن اشاره شده است.
tools.ietf.org/html/rfc2616#section-14.36
xsssniper
یکی از ابزارهای کشف آسیبپذیری XSS که استفاده از آن نیز آسان است، ابزار xsssniper از Gianluca Brindisi است. این ابزار با زبان Python نوشته شده و سوئیچهای سادهای در خط فرمان دارد که شناسایی آسیبپذیریهای XSS را ممکن میسازد.
اگرچه xsssniper میتواند یک URL خاص را هدف قرار دهد، اما میتوان به عنوان یک XSS spider نیز از آن استفاده نمود تا سایت را crawl کند و ورودیهای بیشتری برای تست پیدا کند.
دستور زیر، URL هدف را اسکن کرده، URL های اضافهتری را spider کرده و همچنین در هر فرمی که پیدا کند، پیلود تزریق میکند:
$xsssniper -u http://sec542.org –crawl –forms
به دستور زیر دقت کنید:
$xsssniper -u http://mutillidae –crawl –forms –http-proxy 127.0.0.1:8082
قسمتهای مختلف این دستور را با هم بررسی میکنیم:
xsssniper : ابزار را اجرا میکند.
u http://mutillidae- : نقطه شروع تارگت را مشخص میکند. در این جا ما سایت تستی خود را مشخص کردیم.
crawl– : معلوم میکند که xsssniper باید سایت را crawl کند تا ورودیهای بیشتری پیدا کند.
forms– : ابزار باید در فرمهای سایت تارگت نیز تزریق کند.
http-proxy 127.0.0.1:8082– : ابزار را از طریق یک پراکسی اجرا کن. در این دستور آدرس پراکسی، آدرس Burp لوکال است.
برای کسب اطلاعات بیشتر میتوانید به لینکهای زیر مراجعه کنید:
https://github.com/gbrindisi/xsssniper
http://brindi.si/g/blog/introducing-xsssniper.html
XSSer
XSSer یک ابزار مبتنی بر Python است که با هدف کشف و اکسپلویت آسیبپذیریهای XSS نوشته شده است. یکی از تفاوتهای XSSer با دیگر ابزارها، داشتن رابط کاربری گرافیک (GUI) مبتنی بر GTK است. این رابط به کاربر کمک میکند تا حملات خود را پیادهسازی نماید اما متاسفانه کار کردن با آن آسان نبوده و زبان انگلیسی نامفهومی دارد. با این حال، میتوان از آن به عنوان راهی سریع جهت شناسایی آپشنهای ابزار استفاده کرد.
یکی از سوئیچهای اصلی command-line که کارایی مفیدی دارد، سوئیچ –heuristic است. هدف این سوئیچ شناسایی کاراکترهایی است که توسط اپلیکیشن فیلتر میشوند. بدین ترتیب برای اکسپلویتهای آتی که به بایپس فیلتر و یا تکنیکهای evasion نیاز دارد، مورد استفاده قرار میگیرد.
علاوه بر موارد مذکور، XSSer چندین آپشن مختلف دیگر نیز ارائه میدهد که برای بایپس فیلترها و انجام evasion مستقیما تلاش میکند. برخی از آنها عبارتند از:
• Hexadecimal encoding (–Hex)
• Decimal (–Dec)
• String.FromCharCode()
• Unescape() (–Une)
علاوه بر بایپس و evasion، XSSer میتواند برای کشف و اکسپلویت XSS با “تکنیکهای خاص” نیز تلاش کند. در زیر آپشنهای موجود برای کشف آسیبپذیری در XSSer آورده شده است:
• HTTP User-Agent
• HTTP Referer (sic)
• HTTP Cookies
لازم به ذکر است که همانند xsssniper، XSSer نیز میتواند با سوئیچ –proxy ترافیک خود را به پراکسی دلخواه ما هدایت کند.
یکی دیگر از مشخصههای XSSer، لیست پیلودهای نسبتا قابل توجه و تقریبا منحصر به فرد آن است که توسط نویسنده ابزار تهیه شده است. گرچه اخیرا تعداد آپدیتهای زیادی برای این لیست ارائه نشده، اما هنوز هم میتوان از پیلودهای آن برای یافت آسیبپذیریهای احتمالی، استفاده نمود.
برای کسب اطلاعات بیشتر به لینک زیر مراجعه کنید:
http://sourceforge.net/projects/xsser/
XSScrapy
XSScrapy یک ابزار عالی برای کشف آسیبپذیریهای reflected XSS میباشد که توسط Dan McInerney (@DanHMcInerney) و به زبان Python نوشته شده است. این ابزار با استفاده از فریمورک Scrapy، سایت را spider نموده و به کمک تکنیکهای جالبش، سرعت و دقت کشف XSS را بهبود میبخشد.
XSScrapy روش متفاوت و کارآمدتری در پیدا کردن باگهای XSS دارد. برخلاف سایر ابزارها، XSScrapy به جای تمرکز بر پیلودهای بزرگتر و پیچیدهتر، خیلی ساده به دنبال شواهد وجود reflection در ورودیها میگردد. در حال حاضر XSScrapy از عبارت 9zqjx به عنوان رشته جادویی خود در injection استفاده میکند. بعد از تزریق این رشته در جاهای مختلف، XSScrapy از قابلیتهای spidering خود کمک میگیرد تا تعیین کند که آیا رشته جادوییاش در پاسخهای سرور وجود دارد و دقیقا جای آن کجاست.
با تمرکز بر روی محل reflection در HTML، احتمال پیدا کردن باگهای XSS که اکسپلویت میشوند، افزایش مییابد. بعد از یافت ورودی بازتاب شده، XSScrapy یکی از سه پیلود متفاوت خود را inject میکند تا فیلترینگ مورد استفاده اپلیکیشن و injection موفق را مشخص کند. این پیلودها به شکل زیر میباشند:

این پیلودها ممکن به ابتدا یا انتهای رشته جادویی اضافه شوند.
استفاده از یک رشته معتبر و غیرمخرب برای تشخیص reflection و سپس تزریق پیلود برای تعیین injection و فیلترینگ، موجب شده تا میزان بروز false positive در نتایج این ابزار کاهش یابد.
برای کسب اطلاعات بیشتر در مورد این ابزار به لینکهای زیر مراجعه نمائید:
https://github.com/DanMcInerney/xsscrapy
https://web.archive.org/web/20150423183250/
http://danmcinerney.org/xsscrapy-fast-thorough-xss-vulnerability-spider/
https://web.archive.org/web/20150426012034/
http://danmcinerney.org/modern-techniques-for-xss-discovery/
مطالب این بخش توسط سرکار خانم فهیمه رضایی تهیه شده است.