User Agent XSS: Stored | Reflected
یک مطلب کوتاه و توضیح مختصر راجع این نوع XSS که با کمی خلاقیت سمت و برنامه نویسی میتونید روی سایت هایی که از UserAgent استفاده میکنند کار های بسیاری انجام داد
توضیح مختصر : خوب دوستان عزیز بدون فلسفه میریم سر اصل مطلب ، همان طور که میدوننید User Agent در واقع اطلاعاتی هستن که مرورگر ( در 90% مواقع واقعی است ) در سرآیند های هدر برای سروری که درخواست صفحه و یا فایلی رو داره ارسال میکند و جواب های رو از طرف سرور ( وب سرور ) دریافت میکنه ! قسمتی از اطلاعات ارسالی و دریافتی مرورگر رو میتونید در درخواست سایت بیان ببنید ( با کمی تغییر و خلاصه )
توضیح مختصر : خوب دوستان عزیز بدون فلسفه میریم سر اصل مطلب ، همان طور که
میدوننید User Agent در واقع اطلاعاتی هستن که مرورگر ( در 90% مواقع
واقعی است ) در سرآیند های هدر برای سروری که درخواست صفحه و یا فایلی رو
داره ارسال میکند و جواب های رو از طرف سرور ( وب سرور ) دریافت میکنه !
قسمتی از اطلاعات ارسالی و دریافتی مرورگر رو میتونید در درخواست سایت بیان ببنید ( با کمی تغییر و خلاصه )
http://blog.ir/ GET / HTTP/1.1 Host: blog.ir User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Cookie: bb_sessionhash=; bb_lastvisit=; bb_lastactivity=; bb_thread_lastview=; bb_forum_view=; editor_height=fe%23466px HTTP/1.1 200 OK Date: Fri, 21 Dec 2012 23:00:45 GMT Server: Apache/2 X-Powered-By: PHP/5.3.10-1ubuntu3.4 X-Pingback: http://blog.ir/base/xmlrpc.php Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 5904 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0
http://blog.ir/ GET / HTTP/1.1 Host: blog.ir User-Agent: Mozilla/4.0 (compatible; MS<script>alert("XSS Ajab !");</script>IE 8.0; Windows NT 6.1) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Accept-Encoding: gzip, deflate Connection: keep-alive Cookie: bb_sessionhash=; bb_lastvisit=; bb_lastactivity=; bb_thread_lastview=; bb_forum_view=; editor_height=fe%23466px HTTP/1.1 200 OK Date: Sat, 22 Dec 2012 00:59:18 GMT Server: Apache/2 X-Powered-By: PHP/5.3.10-1ubuntu3.4 X-Pingback: http://blog.ir/base/xmlrpc.php Vary: Accept-Encoding Content-Encoding: gzip Content-Length: 5904 Keep-Alive: timeout=5, max=100 Connection: Keep-Alive Content-Type: text/html; charset=UTF-8
User-Agent: Mozilla/4.0 (compatible; MS<script>alert("XSS Ajab !");</script>IE 8.0; Windows NT 6.1)
تکته : اگر شما از سایتی به سایت مثال منتقل بشید و این عمل رو انجام بدید با Forbidden مواجه میشید !!! دلیلش رو اطلاعی ندارم . یکی از دوستان توضیح بدن ممنون میشم . ( پس لینک سایت رو مستقیم باز کنید )
چند نکته جالب در مورد این روش :
جالبه که وقتی خواستم روی phpinfo(); آزمایش کنم (البته دور از انتظار هم نبود ) کاراکتر های ویژه فیلتر بود ! اما من نتونستم اخطاری مبنی بر وجود رخ دادن XSS در User Agent رو در رفرنس سایت php.net پیدا کنم ( از دوستانی که با یه همچین اخطار و یا توضیحی در این مورد در سایت php.net آشنا یا برخورد داشتند ممنون میشم لینک رو قرار بدند )
جالب بود که در این روش میشه حملات bling SQL Injection و یا در مواردی خاص خود SQL Injection رو طرح ریزی و پیاده سازی کرد ! ( چون ما داریم یک ورودی رو به سایت اعمال میکنیم ناخواسته اما کجاست فیلتر ورودی !!! )
جالب تر از همه این بود که در برخی از افزونه های جوملا که برای آمار بازدید کنندگان بود این متد به راحتی کار میکنه ( مثال نزنم بهتره ! ) و جالبیش اینجاست که اومدن از فیلتر کاراکتر های خاص استفاده کردن اما اومدن زرنگ بازی در بیاردن و ورژن مرورگر رو هم بدن ولی با کد زیر میشه بایپس کرد چرا ؟ چون برنامه نویسش نمیتونه بشینه دستی ورژن ها رو آماده بزاره یعنی مثل ویندوز ، لینوکس نیست که بیاد یگه اگه اگه .... باید جدا کنه ، به مثال زیر دقت کنید :
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/17.0Windows 7 64 Bit , Firefox 17.0
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:17.0) Gecko/20100101 Firefox/1<script>alert('Working!');</script>.0
Windows 7 64 Bit , Firefox 17.0
سناریو : فرض کنید یک وب سایت فقط آمار بازدیدگنندگان رو در پنل ادمین داره ! خوب پس 100% User Agent هارو هم واسه آمارش ذخیره میکنه ، ما اگه بیام تمام روش هایی که برای رد شدن از فیلتر ها وجود داره رو در User agent خودمون ست کنیم و بعد بیام با تلفیقی از روش های Ajax , Comet , XSS بیام آمده بشیم اگه ادمین رفت آمار رو دید بیام از حملات مختلف XSS استفاده کینم ( البته اگه فیلتر نشده باشده ) فکر کنم خیلی باحال بشه :دی راستش من عاشقه این روش های فضایی هستم + حلاقیت و سرعت و برنامه نویسی میشه روش های بسیار جالبی رو پیاده سازی کرد /
منبع : سیمرغ
- ۹۲/۰۲/۱۶