Local File Disclosure/Download
در این آسیب پذیری بر خلاف باگهای هم خانواده خود که فقط توانایی استفاده از آنها را داشتیم در این جا می توانیم را بخوانیم و با آنها ارتباط بر قرار پیدا کنیم .
اکثر توابعی که به ما اجازه می دهند تا فایلها را بخوانیم :
|
تمام فایل را در یک رشته می خواند |
file_get_contents |
|
ایجاد یک فایل |
Readfile |
|
تمام فایل را در یک آرایه می خواند |
File |
|
یک فایل یاurl را باز می کند |
Fopen |
|
تمام نیازها را در یک فایل جایگزین می کند |
Highlight_file |
|
highlight_file() |
Show_source |
مثال کلی :
- کد زیر را در یک فایل به نام test.php ذخیره کنید
--------------------------------------
$pagina=$_GET['pagina'];
readfile($pagina);
?>
--------------------------------------
Readfile() تابع ای است که می توانیم با فایل مشخص شده ارتباط و یا آن را بخوانیم . حال با دستور زیر ما می توانیم passwd را بخوانیم :
http://127.0.0.1/test.php?pagina=../../../../../../etc/passwd
حال ما می توانیم فایل مورد نظر را در خروجی ببینیم و آن را بخوانیم .
مثال ساده :
کد زیر را در فایلی به نام download.php ذخیره کنید :
-----------------------------------------------------------------------------------
$file = $_SERVER["DOCUMENT_ROOT"]. $_REQUEST['file'];
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Content-Type: application/force-download");
header( "Content-Disposition: attachment; filename=".basename($file));
//header( "Content-Description: File Transfer");
@readfile($file);
die();
-----------------------------------------------------------------------------------
فایل آسیبپذیر ناامن می باشد . همانطور که می بینید در خط اول REQUEST_$ یک روش در خواست است و فایل به وسیله ای تابع ()readfile آشکار می شود و ما می توانیم با هر فایل دلخواه ارتباط برقرار کنیم .
و با دستور زیر :
http://127.0.0.1/download.php?file=../../../../../../etc/passwd
در خروجی باید با موفقیت فایل "etc/passwd" را بخوانیم .
طریقه fix کردن آسیب پذیری
ساده ترین راه این است که اجازه دسترسی به کاراکترهای خاص در آسیب پذیری بگیریم .
راه ساده تر اینکه با یک نقطه فیلتر کنیم "." و راه دیگر اینکه با "/" و "\" فیلتر کنیم .
انتشار یافته برای اولین بار از این بلاگ
آیا تاحالا برای شما پیش آمده که بخواهید ببینید که چه سرویس هایی بر روی روتر شما در حال اجرا است و یا پورت های باز بر روی روتر خودتان را ببنید. خوب در IOS چندین فرمان مختلف برای اینکار درنظر گرفته شده که متاسفانه توضیح خیلی زیادی هم درباره نمی توان پیدا کرد.
اولین فرمانی که در IOS بدین منظور گذاشته شد ، فرمان show ip sockets می باشد. با کمک این فرمان می توان پورت هایی که روتر بر روی آنها Listen می کند ، IP های Local که ارتباط با آن برقرار شده و IP مربوط به Device که به صورت Remote متصل شده است را مشاهده کرد. برای نمونه مثال زیر را در نظر بگیرید :
Proto Remote Port Local Port In Out Stat TTY OutputIF
17 0.0.0.0 0 10.1.1.1 67 0 0 2211 0
17 192.168.1.5 37546 192.168.1.9 161 0 0 1 0
17 --listen-- 10.1.1.1 162 0 0 11 0
17 --listen-- 10.1.1.1 52497 0 0 1 0
در این خروجی به چند نکته باید توجه داشت . نکته اول اینکه فیلد Proto نشان دهنده پروتکل ارتباطی است که بر اساس عدد آن نوشته شده است. لیست نسبتا کاملی از پروتکل ها و شماره مربوط به آنها را در این لینک می توان پیدا کرد. فیلد دیگری پروتکل شماره 17 نشان دهنده پروتکل UDP است که باید به آن توجه کرد Port است. در مثال بالا پورت های 161 و 162 مربوط به SNMP Server و SNMP Trap Sender می باشند. و یا پورت 68 متعلق به DHCP server است که به درخواست های DHCP که بر روی پورت 67 ارسال می شوند پاسخ می دهد. اگر که آدرس مربوط به Remote IP بصورت Illegal باشد آنرا به صورا –listen— نشان می دهد. مثلا برای Remote IP آدرس 0.0.0.0 به عنوان Illegal محسوب می شود. در Local IP نیز ، در صورتی که از IP 0.0.0.0 استفاده شده باشد ، بصورت –any—نشان داده می شود.
در نسخه 12.4 این فرمان با سه فرمان show sockets ، show udp و show ip sctp جایگزین شده است.در IOSنسخه 12.4 نیز فرمان sh control-plane host open-ports اضافه شده که به مراتب بهتر می باشد.
موفق باشید!!!!!!
|
پنجشنبه دوازدهم خرداد ۱۳۹۰ ساعت 11:57 | نوشته شده به دست
سیروس
| ( )
|
در گذشته نه چندان دور در بسياري از تابلوهاي فرمان ماشين آلات صنعتي ، براي کنترل پروسه هاي توليد از رله هاي الکترومکانيکي يا سيستمهاي پنوماتيکي استفاده مي کردند و اغلب با ترکيب رله هاي متعدد و اتصال آنها به يکديگر منطق کنترلي مورد نظر ايجاد مي گرديد . در بيشتر ماشين آلات صنعتي ، سيستمهاي تاخيري و شمارنده ها نيز استفده مي گرديد و با اضافه شدن تعدادي Timer و شمارنده به تابلوهاي کنترل , حجم و زمان مونتاژ آن افزايش مي يافت .
اشکال فوق با در نظر گرفتن استهلاک و هزينه بالاي خود و همچنين عدم امکان تغيير در عملکرد سيستم ، باعث گرديد تا از دهه 80 ميلادي به بعد اکثر تابلوهاي فرمان با سيستمهاي کنترلي قابل برنامه ريزي جديد يعني PLC جايگزين گردند .در حال حاضر PLC يکي از اجزاي اصلي و مهم در پروژه هاي اتوماسيون مي باشد که توسط کمپانيهاي متعدد و در تنوع زياد توليد و عرضه ميگردد .
به طور خلاصه سيستمهاي نوين اتوماسيون و ابزار دقيق مبتني بر PLC در مقايسه با کنترل کننده هاي رله اي و کنتاکتوري قديمي داراي امتيازات زير است :
هزينه نصب و راه اندازي آنها پايين مي باشد.
براي نصب و راه اندازي آنها زمان کمتري لازم است .
اندازه فيزيکي کمي دارند.
تعمير و نگه داري آنها بسيار ساده مي باشد.
به سادگي قابليت گسترش دارند .
قابليت انجام عمليات پيچيده را دارند.
ضريب اطمينان بالايي در اجراي فرايندهاي کنترلي دارند .
ساختار مدولار دارند که تعويض بخشهاي مختلف آن را ساده ميکند.
اتصالات ورودي ، خروجي و سطوح سيگنال استاندارد دارند.
زبان برنامه نويسي آنها ساده و سطح بالاست.
در مقابل نويز و اختلالات محيطي حفاظت شده اند.
تغيير برنامه در هنگام کار آسان است.
امکان ايجاد شبکه بين چندين PLC به سادگي ميسر است .
امکان کنترل از راه دور (به عنوان مثال از طريق خط تلفن يا ساير شبکه هاي ارتباطي ) قابل حصول است .
امکان اتصال بسياري از تجهيزات جانبي استاندارد از قبيل چاپگر ، بارکد خوان و ... به PLC ها وجود دارد .
شرکتهای مهندسي با توجه به مسائل فوق الذکر و به منظور کاهش مشکلات صنايع مختلف آمادگي دارد با استفاده از کادر مجرب خود در اين زمينه خدمات خود را در قالب طراحي و اجراي سيستمهاي کنترلی صنعتي مبتني بر استفاده از PLC برای صنایع مختلف ارایه نماید.
موفق باشید .....