PDA

View Full Version : توضیح عملکرد حملات xss



IMANAZADI
سه شنبه 04 اسفند 1394, 13:13 عصر
با سلام
دوستان من واسم یه سوال پیش اومده نمیتونم حلاجیش کنم
سوال در مورد حملات xss هست


فرض کنید ما یه فرم داریم به شکل زیر






<body>




<?php
if (isset($_GET['par1']) && !empty($_GET['par1']))
{
echo $_GET['par1']."<br>";
}


if (isset($_GET['par2'])&& !empty($_GET['par2']))
{
echo $_GET['par2']."<br>";
}


if (isset($_GET['par3']) && !empty($_GET['par3']))
{
echo $_GET['par3']."<br>";
}




?>






<form action="<?php echo $_SERVER['PHP_SELF'];?> ?>" method="get" >


input 1: <input type="text" name="par1">
<br>
input 2: <input type="text" name="par2">
<br>
input 3: <input type="text" name="par3">


<input type="submit" value="send">
</form>
</body>





حالا هکر ما میاد و در تکس باکس کد جاوا اسکریپت مثل زیر یا هر کدی دیگه ای تزریق میکنه






<script>alert('hi');</script>





خوب این چه ربطی یا خطری واسه کاربر بوجود میاره


هر چی که وارد کنه رو سیستم خودش اجرا میشه


این alert یا هر کدی را فقط خود کاربر می‌بینه . چه خطر امنیتی داره؟؟؟



یا اینکه ما در قسمت اکشن کد زیر بدون استفاده از htmlentities نوشتیم ، این روش بدون استفاده از htmlentities چه خطری برای ما ایجاد میکنه






action="<?php echo $_SERVER['PHP_SELF'];?>





من این حمله xss رو اصلا نمیفهمم
میشه یکی خوب توضیح بده

arta.nasiri
سه شنبه 04 اسفند 1394, 14:20 عصر
درود.
اگه جلوی این حملات گرفته نشه هکر میتونه توسط اسکریپتی که تزریق کرده بیاد کوکی کاربران رو بدزده و تو کامپیوتر خودش از اون کوکی ها استفاده کنه. یا میتونه یه کی لاگر تزریق کنه و هرچی که کاربر توسط کیبورد وارد میکنه را ذخیره و ازش سواستفاده کنه.

pbm_soy
سه شنبه 04 اسفند 1394, 18:06 عصر
با سلام
دوستان من واسم یه سوال پیش اومده نمیتونم حلاجیش کنم
سوال در مورد حملات xss هست


فرض کنید ما یه فرم داریم به شکل زیر






<body>




<?php
if (isset($_GET['par1']) && !empty($_GET['par1']))
{
echo $_GET['par1']."<br>";
}


if (isset($_GET['par2'])&& !empty($_GET['par2']))
{
echo $_GET['par2']."<br>";
}


if (isset($_GET['par3']) && !empty($_GET['par3']))
{
echo $_GET['par3']."<br>";
}




?>






<form action="<?php echo $_SERVER['PHP_SELF'];?> ?>" method="get" >


input 1: <input type="text" name="par1">
<br>
input 2: <input type="text" name="par2">
<br>
input 3: <input type="text" name="par3">


<input type="submit" value="send">
</form>
</body>





حالا هکر ما میاد و در تکس باکس کد جاوا اسکریپت مثل زیر یا هر کدی دیگه ای تزریق میکنه






<script>alert('hi');</script>





خوب این چه ربطی یا خطری واسه کاربر بوجود میاره


هر چی که وارد کنه رو سیستم خودش اجرا میشه


این alert یا هر کدی را فقط خود کاربر می‌بینه . چه خطر امنیتی داره؟؟؟



یا اینکه ما در قسمت اکشن کد زیر بدون استفاده از htmlentities نوشتیم ، این روش بدون استفاده از htmlentities چه خطری برای ما ایجاد میکنه






action="<?php echo $_SERVER['PHP_SELF'];?>





من این حمله xss رو اصلا نمیفهمم
میشه یکی خوب توضیح بده

دوست عزیز به این نکته توجه کنید شما گفتیدهر اسکریپتی بنویسه تو کامپیوتر خودش اجرا میشه درسته؟
حالا فرض کنید اسکریپت وارد شده در تکست باکس بلاخره باید جایی ذخیره شود درسته؟ پس تو دیتابیس ذخیره میشه و در آینده احتمال دارد آن اطلاعات از دیتابیس خوانده شده و برای کاربران مختلف سایت نمایش داده شود در چنین زمانی اسکریپت شما در کامپیوتر کاربران دیگر سایت اجرا میشود و کامپیوتر کاربران آن سایت هک شده است
پس درسایت شما تکست باکسهایی را برای دریافت اطلاعات از کاربران میگذارید مثلا متن یک مقاله و بدون بررسی داده های وارد شده توسط کاربر آنرا در دیتابیس ذخیره میکنید حالا احتمال دارد آن مقاله را کاربران مختلف باز کنند و بخوانند
اگر شما بجای متن مقاله یک کد مخرب جاوااسکریپت نوشته باشید آن کد در کامپیوتر کاربران اجرا خواهد شد چرا؟ هرچند این بخش را میدانید ولی کوتاه عرض میکنم که دیگران هم استفاده کنند شما در php. یا asp هر ابزار سمت سرور دیگر برای نمایش متن مقاله گفتید نمایش بده مقدار فلان فیلد را از دیتابیس و یا در asp شاید مقدار فیلد دیتابیس را به یک کنترل label داده باشید در چنین زمانی چون مقدار فیلد دیتابیس حاوی کد جاوا اسکریپت است توسط مرورگر کاربر اجرا میشود
پس توجه کنید که در کامپیوتر خود حمله کننده اجرا نمیشود درواقع کاربران آن سایت را مورد حمله قرار میدهد
در چنین حملاتی بیشتر کاربران قربانی هستند وبرای حمله به خود سایت معمولا از این روش استفاده نمیکنند مگر غیر مستقیم !

pbm_soy
سه شنبه 04 اسفند 1394, 18:20 عصر
بد نیست مواردی را در اینجا کوتاه بگم
چنین حملاتی مستقیما کاربران سایت را مورد حمله قرار میدهد نه خود سایت برای همین برخی به اشتباه زیاد به این نوع امنیت اهمیت نمیدهند و میگن اولویت اول خود سایت و سرور است و امنیت خودشان را درنظر میگیرند!
ولی نکته اینجاست که مدیران سایت هم جزو کاربران این سایت هستند و همینطور بصورت غیر مستقیم میتوان از این روش استفاده کرد برای حمله به سایت و سرور!
مورد بعدی در حالت کلی شاید نتوان کاربر خاصی را دقیقا مورد حمله قرار داد ولی در کل اینکار نیز تحت شرایط خود سایت و غیره امکان پذیر است
حملات مورد استفاده این روش: چون کلا اسکریپت جاوا است این سه حالت کلی وجود دارد

حملاتی که اطلاعات حساس کاربر را به هکر میفرستد مانند کوکیها
حملاتی که باعث شود برنامه ای بروی کامپیوتر کاربلر دانلود شود و اجرا شود و . . . . .
حملاتی که محتوای صفحه نمایش داده شده برای کاربر را تغییر دهد

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

مثال زیاد اگر جستجو کنید پیدا میکنید

us1234
چهارشنبه 05 اسفند 1394, 03:18 صبح
یک نکته را هم به گفته های دوستان اضافه کنم که xxs فقط برای جاوا اسکریپت نیست .

عمدتا دیدم که در مدیریت اسکریپت ها یک لینک برای حذف مطلب وجود دارد مثلا فرض کنید که قسمت اخبار سایت در مدیریت با این لینک خبر شماره 1 حذف میشود


site.com/admin/news.php?action=del&id=1

خوب هکر به هر طریقی به این عملکرد واقف شده و در قسمتی که xss دارد می تواند یک تگ


<meta http-equiv="refresh" content="0;url=site.com/admin/news.php?action=del&id=1" />

قرار دهد .

با اولین باز شدن صفحه توسط مدیر خبر شماره 1 حذف میشود ( حتی اگر کلا جاوا اسکریپت مرورگرش را غیر فعال کرده باشد )

مثلا به جای آدرس img هم میتواند این قضیه را پیدا سازی کند !

اینها نمونه های کوچک است و کارهای بزرگتری هم میشه انجام داد .

پس فقط روی جاوا اسکریپت معطوف نشوید کلا وقتی قراره تگ html از کاربر دریافت شود باید از نظر xxs چک شده باشد ...

IMANAZADI
چهارشنبه 05 اسفند 1394, 05:57 صبح
یک نکته را هم به گفته های دوستان اضافه کنم که xxs فقط برای جاوا اسکریپت نیست .

عمدتا دیدم که در مدیریت اسکریپت ها یک لینک برای حذف مطلب وجود دارد مثلا فرض کنید که قسمت اخبار سایت در مدیریت با این لینک خبر شماره 1 حذف میشود


site.com/admin/news.php?action=del&id=1

خوب هکر به هر طریقی به این عملکرد واقف شده و در قسمتی که xss دارد می تواند یک تگ


<meta http-equiv="refresh" content="0;url=site.com/admin/news.php?action=del&id=1" />

قرار دهد .

با اولین باز شدن صفحه توسط مدیر خبر شماره 1 حذف میشود ( حتی اگر کلا جاوا اسکریپت مرورگرش را غیر فعال کرده باشد )

مثلا به جای آدرس img هم میتواند این قضیه را پیدا سازی کند !

اینها نمونه های کوچک است و کارهای بزرگتری هم میشه انجام داد .

پس فقط روی جاوا اسکریپت معطوف نشوید کلا وقتی قراره تگ html از کاربر دریافت شود باید از نظر xxs چک شده باشد ...


دوست گرامی این باگ xss نیست بلکه باگ csrf میشود

IMANAZADI
چهارشنبه 05 اسفند 1394, 06:04 صبح
با توضیحات دوست خوبم pbm_soy (http://barnamenevis.org/member.php?20034-pbm_soy) عملکرد این باگ رو متوجه شدم

نتیجه میگیرم ورودی های که کاربر وارد میکنه و در دیتابیس یا ... ذخیره میشوند و ممکنه زمانی در قسمتی از سایت نمایش یا فراخوانی بشه باید حتما از فیلتر htmlentities عبور

داده بشن در غیر اینصورت اطلاعات بازدیدکنندگان که مدیر هم میتونه یکی از اونها باشه بخطر میفته


ولی یه ابهام کوچیک دیگه اونم این قسمت هست


<form action="<?php echo $_SERVER['PHP_SELF'];?> ?>" method="get" >



این چه خطری میتونه داشته باشه

pbm_soy
چهارشنبه 05 اسفند 1394, 17:29 عصر
در کل در بهترین کار در تمام بخشهای برنامه این قاعده را رعایت کنید تمام داده های ورودی باید بررسی شوند حالا میخواهد کاربر وارد کرده باشد یا از جای دیگری آمدن باشد یا حتی از کوکی خوانده باشید فرقی ندارد!
در مورد سوال آخرتون هم باز همین قضیه xss صادق است برای اینکه کوتاه و مفید گفته باشم توجه شما را به لینک زیر جلب میکنم

http://www.w3schools.com/php/php_form_validation.asp
در ادامه پیشنهاد میدم عبارت php_self را نمایش دهید حالا در نوار آدرس نام صفحه را بنویسید مثلا
Http://localhost/test.php
مقداری که نمایش میدهد /test.php است حالا اگر در نوار آدرس عبارت زیر را بنویسید
Http://localhost/test.com/<script>alert("xxx"); </script>

من این عبارات را با گوشی تایپ کردم فکر میکنم چندتا چیز را ناقص نوشتم ولی در هرصورت اگر درست نوشته باشم نام صفحه نمایش داده میشود و پنجره پیام نمایش داده میشود
حالا اگر توجه کنید در صفحه ای که فرم گذاشته اید در بخش اکشن گفتید نمایش بده مقدار php_self پس دراینصورت کد اسکریپت مقابل نام صفحه اجرا میشود
دوست داشتم دوستان دیگه هم مشارکت کنند
بازهم اگر لازم بود بیشتر مینویسم فعلا لینک بالا را مطالعه کنید فوق العاده ساده و روان نوشته است متن ساده ای است!

H:Shojaei
پنج شنبه 06 اسفند 1394, 09:38 صبح
دوست گرامی این باگ xss نیست بلکه باگ csrf میشود
اول شما باگ xss دارید که اجازه ورود چنین کاراکتر هایی رو دادید و سپس خطای csrf که باز توکن نذاشتید و کد اجرا شده...
هردو باگ رو داره...