در این مقاله سعی شده تا روش های مختلف تست نفوذ به سایت ها و آشنایی با روش های مختلف حمله و تشخیص نقاط آسیب پذیر سایت ها و همچنین رفع مشکلات این نوع باگ ها را ، لذا تمامی مطالب ذکر شده جنبه آموزشی داشته و بیشتر برای بالا بردن سطح آگاهی دوست دارن این عرصه فراهم گردیده است . لذا از تست بر روی سایت های مختلف خودداری نمایید چرا که تمامی فعالیت های شما قابل پیگیری میباشد . هر زمانیکه یک صفحه وب از شما اطلاعات حساسی را می پرسد، شما باید قادر به تشخیص امنیت آن سایت باشید. توانایی شناسایی یک اتصال امن به صفحات وب بسیار مهم است. که در این مقاله با بسیاری از این روش ها آشنا خواهید شد لذا این مقاله در چند قسمت ارئه خواهد شد. در قسمت اول : نرم افزار های مورد نیاز رو معرفی میکنیم و امنیت در نرم افزار های تحت وب را معرفی میکنیم و باگ های رایج در وب سایت ها رو معرفی میکنیم و غیره
از نرم افزارهای مورد استفاده در ضمینه آزمون نفوذ میتوان به دو ابزار زیر اشاده نمود.
این ابزار تحت ویندوز است و قادر به شناسایی انواع باگ ها و حفره های ممکن در وبسایت ها می باشد
این ابزار تحت لینوکس اجرا می شود و کاربردی همانند acunetix دارد.
این دو ابزار علاوه بر تست نفوذ و بدست آوردن باگ های احتمالی عمل Crawling هم انجام می دهند ومی توانند در این ضمینه نیز مفید باشند. درضمن نسخه ویندوزی این ابزار نیز وجود دارد .
در کل امنیت دارای سه مشخصه کلی است.
این سه مشخصه به نام مثلث امنیت شناخته میشود
علاوه بر این مثلث، مثلث دیگری نیز وجود دارد که مورد علاقه هکرهاست.
اگر دقت کنید این مثلث کاملا متضاد با مثلث امنیت است
افشا سازی مخالف محرمانگی است.شرکت ها باید اطلاعات خود را ارزیابی و آنها را دسته بندی کنند، که این عمل به ندرت اتفاق می افتد.کارکنان شرکت ها همیشه باید اگاه باشند تا بتوانند از اطلاعات یک شرکت حفاظت کنند. به عنوان مثال وزارت دفاع اطلاعات را برا این اساس طبقه بندی میکند :
شرکت ها معمولا همه اطلاعات خود را در سطح محرمانه قرار می دهند که سبب مشکل برای آنها می شود.پس اگر شما بخواهید از همه ی اطلاعات خود در یک سطح امنیتی حفاظت کنید، با مشکل موجه می شوید.شرکت ها می بایست اطلاعات محرمانه خود را همانند دولت به چند قسمت تقسیم و درجه بندی کنند :
شرکت ها باید بررسی کنند تا متوجه شوند که چه افشاسازی اطلاعاتی برای آنها و مشتریان آنها مهم است . سپس میتوانند براساس اینکه کدام اطلاعات به بیشترین حفاظت نیاز دارد اولویت هایی برای رفع آنها ،سخت تر کردن آنها و غیره ایجاد کنند .
تخریب مخالف بی نقصی است. حالا که شما اطلاعات مهم خود و میزان حیاتی بودن انها را بررسی کردید قادر خواهید بود تا مشخص کنید که چه میشود اگر انها دستکاری شوند یا از بین بروند.سازمان ها باید راه کار هایی برای هر دوی این مشکلات داشته باشند. آنها این سوال را باید از خود بپرسند که بیشتر یک دشمن تمایل دارد چه اطلاعاتی را نابود کند یا در آنها تغییراتی ایجاد کند.این برای هر شرکت یا ارگان متفاوت است و یک الگوی خاص ندارد .
انکار یا در دسترس نبودن متضاد دردسترس بودن است .وقتی صحبت از در دسترس نبودن می شود اولین چیزی که به ذهن شما میرسد حملات ( DDoS حملاتی که باعث down شدن یک مجموعه میشوند) است.حملات DDoS در موارد زیادی باعث خسارت های قابل توجهی به یک تجارت نمی شوند البته اگر تجارت شما وابسته به فروش آنلاین باشد ضربه بیشتری به شما وارد می شود. نکته قابل توجه این است که شما باید شرایط خود را بسنجید. بدیهی است که این یک مشکل است، اگر مشتریان شما نتوانند از وب سایتتان استفاده کنند یا در موارد زیادی لو رفتن یا افشای اطلاعات شخصی آنها باعث می شود که دیگر از وب سایت شما استفاده نکنند. این بزرگترین اشتباه است، وقتی که بحث به پوشش امنیت شبکه میرسد چون هر کسی میتواند قربانی حملات وسیع باشد .
بسیاری از ارگان ها بررسی نمیکند که چه اطلاعاتی برای کسب و کار آنها مهم است.آنها عواقب این که اطلاعاتشان افشا یا نابود شود و یا دردسترس نباشد را نمیدانند. این مهفوم ها باید اساس زیرساخت های امینتی شرکت ها باشد که متاسفانه در ایران قریب به 91درصد شرکت ها و ارگان های دولتی به آن توجه نمی کنند.
قبل از نام بردن این باگ ها بهتر است بر اساس تجربه ی شخصی این نکته را ذکر کنم که بهتر است برای سفارش یک وبسایت، چه از نظر طراحی و توسعه به گروه هایی که کارکشته تر و شناخته شده هستند معامله شود و طراحی بصورت کاملا شخصی انجام شود و حتی الامکان از CMS ها استفاده نشود. و درصورت نداشتن چاره ای دیگر از CMS های پراستفاده و معروفتر مثل وردپرس استفاده شود .
این باگ بسیار بسیار خطرناک میباشد.چون با دسترسی به آن در نهایت میتواند به تنهایی هر سه راس مثلث امنیت را بشکند. محل آزمون این نوع باگ فرمها، آدرس بار(بستگی به نوع ارسال پارامترها بصورت Post وGet کوکیها، هدر View State ، Hidden Field ،HTML)می باشد همچنین این باگ میتواند با Buffer Overflow و XSS و ... نیز ادغام شود. همانطور که مشاهده میشود محل های اینجکت این کدها بسیار متنوع است. پس میتواند بسیار خطرناک باشد.
قبل از عمل SQL Injection می بایست با انواع خطاهایی که ممکن است در حین کار را با آنها مواجه شوید آشنا شد. یک Web Application میتواند در مواجه با مشکلات ایجاد شده Error هایی را به دو شکل کلی ایجاد نماید.
به عنوان مثال اگر یک Application داشته باشیم که دارای یک صفحه به نام News.Aspباشد. این صفحه وظیفه دارد که یک Id به عنوان ورودی دریافت نماید و بعد از دریافت مقدار Id اطلاعات مربوط به Id را از Database دریافت نموده و سپس جزئیات خبر را در صفحه نمایش میدهد. حال اگر Application فقط مقدار Id ورودی را چک کند که مقداری معتبر و Validباشد و هیچ بررسی دیگری انجام ندهد هکر میتواند از این اشتباه برنامه نویسی استفاده کند و یک Id را به عنوان ورودی اعلام نماید که هیچ ردیفی در جدول News برای آن وجود نداشته باشد و در نتیجه یک Record خالی برگشت داده میشود و هنگامی که Application تلاش میکند که اطلاعات Record بازگشتی را بررسی نماید، یک Error تولید میشود. یک هکر در ابتدا چندین InValid Request به سمت Application ارسالی مینماید تا متوجه شود که Application چطور با Errorها برخورد میکند.
در مرحله بعدی SQL Injection می بایست Pageهایی که در نتیجه دستکاری داده های ورودی دچار خطا می شوند را مشخص نماییم. برای این منظور ما میتوانیم از کلماتی مانند OR , ANDو . . . و همچنین کاراکترهایی مانند ; و ‘ استفاده نماییم.پارامترهای آسیب پذیر در برابر SQL Injection دارای چندین نوع داده می باشد که به طور کلی به سه دسته تقسیم می شوند :
هر پارامتر ارسال شده از سمت Web Application به سمت SQL یکی از انواع داده مطرح شده می باشد. مثلا Ali یک داده String و 5 یک داده Number می باشد . تمام پارامترهای عددی دقیقا به همان صورتی که هستند به سمت SQL ارسال می شوند ولی پارامترهای String و Data در داخل کاراکتر ’ ‘ به سمت SQL ارسال میشوند .
SELECT * FROM News WHERE NewsId=5 SELECT * FRPM News WHERE NewsTitle='News'
پارامترهایی که دارای مقدار Number و یا عددی هستند بهترین روش برای تشخیص آسیب پذیر بودن یک پارامتر در برابر SQL Injection می باشند .
www.site.com/news.asp?NewsId=10
برای تست کردن این URL می توانیم از دو راه جهت تشخیص پارامترهای آسیب پذیر در برابر SQL Injection استفاده کنیم. راه اول استفاده از کاراکتر ‘ بعد از Idمی باشد و راه دوم نیز استفاده از کاراکتر + می باشد
SELECT * FROM News WHERE NewsId=10' SELECT * FROM News WHERE NewsId=9+1
اجرای اولین SQL Query باعث خطا مبنی بر اینکه ساختار دستور SQL دچار مشکل است را نمایش میدهد، ولی دستور دوم بدون Error اجرا می شود. و این مورد نشان میدهد این پارامتر دارای اسیب SQL Injection میباشد و ما توانسته ایم به وسیله دستورات خود SQL را مدیریت نماییم. دقیقا از همین دستورات میتوانیم جهت تست پارامترهایی String نیز استفاده نماییم .
www.site.com/news.asp?NewsTitle=News' SELECT * FROM News WHERE NewsTitle='News” SELECT * FROM News WHERE NewsTitle='New'+'s'
اجرای اولین SQL Query باعث خطا مبنی بر اینکه ساختار دستور SQL دچار مشکل است را نمایش میدهد، ولی دستور دوم بدون Error اجرا می شود. و این مورد نشان می دهد این پارامتر دارای اسیب SQL Injection می باشد و میتوان به وسیله دستورات خود SQL را مدیریت کرد. بنابراین تشخیص این که پارامتر دارای آسیب SQL Injection می باشد و یا خیر ساده می باشد حتی اگر پیغام خطایی نمایش داده نشود.
در حالت کلی از دستور Union برای ترکیب و ادغام دو یا چند ستون مختلف از دو یا چند جدول و قرار دادن آنها در یک ستون مشترک استفاده می شود. در این دستور، نوع دادهای ستونهای انتخاب شده برای ترکیب باید یکسان باشند. دستور Union در هنگام ترکیب فیلدها، در صورت برخورد با مقادیر تکراری آنها را حذف کرده و از هر مقدار یک نمونه را نمایش میدهد. برای مشاهده تمام مقادیرحتی مقادیر تکراری باید از دستورUnion ALL استفاده کرد.توسط این دستور می توان در کنار دستور Select ای که در حال اجرا می باشد دستور Select خود را جهت Inject به Database انجام دهید.برای استفاده از این دستور باید شرایط زیر را در نظر گرفت:
به منظور پیدا کردن تعداد ستونهای یک جدول می بایست از دستور Order by استفاده نمود حالت کلی استفاده از این دستور به صورت زیر می باشد :
www.site.com/news.asp?id=news Order By 5
که عدد 5 یک عدد حدسی می باشد پس از اجرای آدرس بالا در مرورگر دو حالت ممکن است اتفاق بیافتد اول اینکه صفحه به طور کامل لود شود و این بدان معناست که می بایست عدد 5 را افزایش دهید.حالت دوم این می باشد که صفحه به طور کامل لود نشود و با خطایی رخ دهد در این حالت می بایست عدد 5 را کاهش دهیم.
پس از به دست آوردن تعداد ستون ها، می بایست که ستون های آسیب پذیر را مشخص نماییم برای این منظور از دستور Union Select استفاده میکنیم، حالت کلی این دستور به صورت زیر می باشد:
www.site.com/news.asp?id=news Union Select 1,2,3,4,5
در My SQL و MS SQL و SQL Server دیتابیس سیستمی به نام information_schema وجود دارد که در برگیرنده نام تمام دیتابیس ها به همراه جداول و ستونهای آنها می باشد. به همین منظور میتوان از این دیتابیس برای به دست آوردن نام جداول مورد نیاز به همراه ستون های آنها بهره برد. ساختار کلی این دستور برای به دست آوردن لیست جدولها به این صورت می باشد:
www.site.com/news.asp?id=news Union Select Table_name,2,3,4,5 from information_schema.Tables
میتوان از دستور () Group_Concat نیز برای مشاهده تعداد بیشتری از نام جدولها استفاده کرد به این صورت:
www.site.com/news.asp?id=news Union Select Group_Concat (Table_Name),2,3,4,5 from information_schema.Tables
برای به دست آوردن نام ستون های یک جدول کافیست که از دیتابیس سیستمی information_schema استفاده کرد. طریقه استفاده از این دستور در زیر میتوانید مشاهده نمایید:
www.site.com/news.asp?id=news Union Select Group_Concat (Column_Name),2,3,4,5 from information_schema.Columns
با داشتن نام دیتابیس، نام جداول، نام ستونها تقریباً میتوان به تمام قسمتهای دیتابیس یک سایت راه یافت. با این روش به اطلاعاتی از قبیل نام کاربری و گذرواژه افراد میتوان دست یافت. همچنین میتوان با ورود به بخش مدیریت داده ها را دستکاری کرد. با این تفاسیر کل مثلث امنیت شکسته می شود .
یکی از مهمترین و گاه خطرناکترین آسیب پذیریهای امنیتی موجود در وب سایت ها آسیب پذیری مربوط به آپلود فایلهای مخرب به سرور است.(که البته چند وقت پیش یکی از کاربران از طریق این نوع حمله هک شده بود که دوستان ht-access رو پیشنهاد دادن ) با این کار نفوذگر به راحتی میتواند با آپلود فایلهای مخرب کنترل سرور را نیز به دست بگیرد و گاه خطرات جبران ناپذیری را به ادمین سایت و یا سرور وارد نماید.
این نوع آسیب پذیری که به RFU یا Remote File Upload نیز شهرت دارد معمولا در آپلود سنترهای سایت به وجود می آید. مثلا در بخش مدیریتی سایت ادمین سایت قادر است فایلهایی را بر روی سایت ارسال نماید حال اگر پورت سایت به دست یک نفوذگر برسد به راحتی میتواند یک شل را آپلود و از آن بهره برداری نماید. در این صورت است اگر فیلترگذاری مناسب برای فایلهای ارسالی اعمال نشده باشد میتواند سناریو هک سایت را کامل کند. در اولین مرحله شما را به یک کد ساده که فقط وظیفه ارسال فایل به سرور را دارد نشان میدهم. همچنین شما را با فرآیندهایی که در این بین رخ میدهد نیز آشنا میکنم.
<?php $uploadDir = ‘uploads/’; $uploadFile = $uploadDir.basename($_FILES[‘userFile’][‘name’]); If( move_upload_file($_FILES[‘userFile’][‘tmp_name’],$uploadFile)){ Echo “file is valid and was successfully uploaded.\n”; }else{ Echo “file uploading failed.\n”; } ?>
این کد مربوط به پردازش فایل ارسال شده از طرف کاربر است که طی فرآیندهایی آن را به مسیر مربوطه در سایت انتقال میدهد. کد زیر کدی است که در مرورگر کاربر به نمایش در می آید و فایل مربوطه را به سمت سرور ارسال مینماید:
<form method=”POST” action=”upload1.php” ENCTYPE=”multipart/formdata”> Select thie file to upload: <input type=”file” name=”userfile”/> <input type=”submit” name=”upload” value=”upload”/> </form>
با بررسی کد بالا پی میبریم که بدون هیچگونه فیلترگذاری و کنترل، فایل به سرور انتقال می یابد.حال فرض کنید این فایل یک فایل PHP که حاوی کدهای مربوط به شل کد هست باشد نتیجه این می باشد که نه تنها سایت خود بلکه سرور را هم در اختیار نفوذگر قرار داده اید.
این مشکل زمانی ایجاد می شود که اطلاعات ارسالی بین کاربران و سایت بدون بررسی و اعتبار سنجی لازم توسط نرم افزار سایت صورت گیرد. در این حالت هکرها میتوانند اسکریپت هایی را همراه اطلاعات به نرم افزار سایت تزریق کنند و این اسکریپتها هنگام نمایش اطلاعات در مرورگر دیگر کاربران سایت اجرا شده و مشکلاتی همچون سرقت اطلاعات نشست (Session ) و دسترسی به اختیارات و اطلاعات دیگر کاربران و یا تغییر در صفحات سایت را ایجاد کند.
یکی از موارد استفاده دیفیس موقت سایت می باشد که زیاد خطرناک نیست. اما درصورتی که بتوان این حمله را با سرقت اطلاعات نشست (Session hijacking) ادغام شود بسیار خطرناک می شود. در این روش، نفوذگر با ارسال اطلاعات مخرب به ادمین، نشست او را به سرقت برده و خود را به راحتی جای ادمین جا میزند.
<?php // Is there any input? if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) { // Feedback for end user echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>'; {?>
همانطور که در کد بالا می بینید، بدون اعمال هیچ فیلتری عبارت داخل Query String با نام Name را اعمال میکند. برای اینجکت کد و تست میتوان URL زیر را امتحان کرد. درصورتی که موفقیت آمیز بود میتوان فهمید که وبسایت باگ مورد نظر را دارد.
http://site.com/xss.php?name=<script>alert(1)</script>
بخش اصلی همان جاوا اسکریپتی است که اینجکت کردیم.
این باگ در بخشی از وبسایت ممکن است رخ دهد که طراح وبسایت بدون اعمال فیلتر فایلی را از روی هاست خوانده و در صفحه ای نمایش داده است. به طور مثال فرض کنید در قسمتی از وبسایت از سیستم دیتابیس فایلی جهت نمایش اطلاعات استفاده شده، و این فایل از طریق URL یا Hidden Field یا هرچیز دیگری در حال خواندن باشد. از این طریق می توان فایل دلخواهی که روی سرور وجود دارد را بخوانیم.
<?php // The page we wish to display $file = $_GET[ 'page' ]; @readfile($file); ?>
اگر به کد دقت شود درخواهید یافت که بدون اعمال تغییراتی فایل گرفته شده و خوانده شده. در این صورت میتوان به کد هر صفحه ای از سایت که دوست داشته باشید دسترسی داشته باشید. حتی اگر دسترسی ها درهاست برای یوزر وبسایت مدنظر باز باشد میتوانید به فایل های سیستم هم دست پیدا کنید. به آدرس زیر دقت کنید.
http://site.com/lfi.php?file=../../etc/passwd
این آدرس، فایل پسورد های هاست لینوکسی که وبسایت روی آن است را به نفوذگر میدهد.
این باگ دقیقا همان باگ LFI است با این تفاوت که میتوان از بیرون از هاست نیز فایل یا حتی شل خود را در داخل سایت نمایش داد.
http://site.com/lfi.php?file=https://www.google.com
این باگ زمانی اتفاق میافتد که بخواهید دستوری را بصورت سیستمی اجرا کنید و نتیجه را نمایش دهید. بطور مثال فرض کنید بخواهید اطلاعات مربوط به روتینگ یک آدرس IP را که از کاربر گرفته اید را به او نشان دهید.
<?php $cmd=$_GET[‘ip’]; system(“tracert” . $cmd); ?>
با توجه به کد میفهمید که با اینجکت کردن اطلاعات اضافه، میتوانید به اطلاعات دیگری نیز دست پیدا کنید.
www.site.com/rce.php?reg=127.0.0.1|dir
با اجرای این دستور میتوانید فایلها و دایرکتوری های زیرشاخه موجود را بخوانید.
در اصل یک باگ در رابطه با سروری است که وبسایت روی آن قرار دارد.در یک تهاجم از نوع ، DoS یک مهاجم باعث ممانعت دستیابی کاربران تائید شده به اطلاعات و یا سرویس های خاصی می نماید . یک مهاجم با هدف قرار دادن کامپیوتر شما و اتصال شبکه ای آن و یا کامپیوترها و شبکه ای از سایت هایی که شما قصد استفاده از آنان را دارید ، باعث سلب دستیابی شما به سایت های ، Email وب سایت ها ، account های online و سایر سرویس های ارائه شده بر روی کامپیوترهای سرویس دهنده می گردد .
متداولترین و مشهودترین نوع حملات DoSمی باشد زمانی محقق می گردد که یک مهاجم اقدام به ایجاد یک سیلاب اطلاعاتی در یک شبکه میکند . زمانی که شما آدرس URL یک وب سایت خاص را از طریق مرورگر خود تایپ می نمائید درخواست شما برای سرویس دهنده ارسال می گردد . سرویس دهنده در هر لحظه قادر به پاسخگوئی به حجم محدودی از درخواست ها می باشد، بنابراین اگر یک مهاجم با ارسال درخواست های متعدد و سیلاب گونه باعث افزایش حجم عملیات سرویس دهند گردد ، قطعا" امکان پردازش درخواست شما برای سرویس دهنده وجود نخواهد داشت. حملات فوق از نوع DoS می باشند، چراکه امکان دستیابی شما به سایـت مورد نظر سلب شده است .
در یک تهاجم از نوع ، DDoS یک مهاجم ممکن است از کامپیوتر شما برای تهاجم بر علیه کامپیوتر دیگری استفاده نماید . مهاجمان با استفاده از نقاط آسیب پذیر و یا ضعف امنتیی موجود بر روی سیستم شما می توانند کنترل کامپیوتر شما را بدست گرفته و در ادامه از آن به منظور انجام عملیات مخرب خود استفاده نمایند.
ارسال حجم بسیار بالای داده از طریق کامپیوتر شما برای یک وب سایت و یا ارسال نامه های الکترونیکی ناخواسته برای آدرس های Email خاصی ، نمونه هائی از همکاری کامپیوتر شما در بروز یک تهاجم DDOS می باشد . حملات فوق ، "توزیع شده" می باشند ، چراکه مهاجم از چندین کامپیوتر به منظور اجرای یک تهاجم DoS استفاده می نماید .باز هم خدمت دوستان عرض کنم که مطالب فوق جنبه آموزشی دارد
تا قسمت بعدی مقاله موفق و پیروز
FSBYANGE
متخصص هک و نفوذ : طراحی دیتاسنتر
بیش از 20 سال سابقه اجرایی در حوضه زیر ساخت شبکه (Fib , wire) و طراحی دیتا سنتر و مشاوره در زمینه های مختلف امنیتی در سازمانهای خصوصی و دولتی دارم . تخصص اصلی من تست و هک و نفوذ هست گاهی کلاه سفید گاهی مشکی عاشق مهندسی معکوس سیستم های امنیتی هستم و ... مطالعه کتب انگلیسی در زمینه های کاری خودم رو دوست دارم
زمان پاسخ گویی روز های شنبه الی چهارشنبه ساعت 9 الی 18
فقط به موضوعات مربوط به محصولات آموزشی و فروش پاسخ داده می شود