免费SEO软件

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2554|回复: 3

网页被插入document的html文件 解决办法

[复制链接]

122

主题

143

帖子

652

积分

超级版主

Rank: 8Rank: 8

积分
652
发表于 2014-6-3 09:17:02 | 显示全部楼层 |阅读模式
document.write('</iframe>'); document.write('<a href="http://www.xxx.com/"><img border=0 src="http://www.xxx.com/Images/codeimg.jpg" /></a>')
回复

使用道具 举报

13

主题

21

帖子

246

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
246
发表于 2014-6-3 11:13:28 | 显示全部楼层
总结大全:贵在实践

如果你是自己写的代码,每一行什么含义、什么作用肯定很清楚,一行一行查找分析。
如果是别人代写的,或者是下载的,那就让写的人帮助检查,或者使用备份文件覆盖,或者重新下载一个覆盖被嵌入恶意代码的页面。
如果这些条件都不具备,试着自己逐行检查,看看是否有类似script、iframe的字符,删除后检查还有没有恶意代码嵌入的症状(记得做备份),还有要查看有没有一串毫无意义的字符比如“%B6%F1%D2%E2%B4%FA%C2%EB”表示“恶意代码”四个字,只是经过简单加密,正常网页中不应该出现。

另外还可设置脚本权限与写入权限,如果网站只使用了asp,可设置为只开放asp权限。这样黑客即使上传了php的木马到空间也不能运行,最少的权限=最大的安全。写入权限设置则系统支持全国领先的目录权限设置,允许关闭网站的写入权限,锁定虚拟主机。对安全有重要意义,例如可以将access数据库放在databases目录,而将wwwroot目录的写入 权限关闭,令asp木马根本无法上传,这样比关闭FSO更安全。
asp木马防范之检查网页

目前流行的网站被黑,是在相应的asp,htm,js等文件中,插入<iframe src=http://这样的,需要使用查找程序来查找这类文件出来,手工删除此类插入的HTML代码。这项工作相对比较繁锁。需要仔细的查找。也会有一些木马是插入到js中,是以js调用方式的。更详细的资料,请看后部分E.挂马代码大全。

asp木马防范之禁止写入和目录禁止执行的功能

二项功能组合,可以有效的防止ASP木马。这对于常被ASP木马影响的网站来说,会有一些帮助。

有效防范asp木马

由于ASP它本身是服务器提供的一贡服务功能,特别是最近由dvbbs的upfile文件出现漏洞以来,其高度的隐蔽性和难查杀性,对网站的安全造成了严重的威胁。因此针对ASP木马的防范和清除,为网管人员提出了更高的技术要求.。

几个大的程序全部被发现存在上传漏洞,小程序更是不计其数,让asp木马一下占据了主流,得到广泛的使用,想必如果你是做服务器的话,一定为此头疼不止吧,特别是虚拟主机的用户都遇到过网页被篡改、数据被删除的经历,事后除了对这种行径深恶痛绝外,许多客户又苦于没有行之有效的防范措施。

鉴于大部分网站入侵都是利用asp木马完成的,特写此文章以使普通虚拟主机用户能更好地了解、防范asp木马。也只有空间商和虚拟主机用户共同做好防范措施才可以有效防范asp木马!

我们首先来说一下怎么样防范好了,说到防范我们自然要对asp木马的原理了,大道理我也不讲了,网上的文章有的是,简单的说asp木马其实就是用asp编写的网站程序,甚至有些asp木马就是由asp网站管理程序修改而来的。就比如说我们常见的asp站长助手,等等

它和其他asp程序没有本质区别,只要是能运行asp的空间就能运行它,这种性质使得asp木马非常不易被发觉。它和其他asp程序的区别只在于asp木马是入侵者上传到目标空间,并帮助入侵者控制目标空间的asp程序。

严重的从而获取服务器管理员的权限,要想禁止asp木马运行就等于禁止asp的运行,显然这是行不通的,这也是为什么asp木马猖獗的原因!有人要问了,是不是就没有办法了呢,不,有办法的:

从源头入手,入侵者是怎么样上传asp木马的呢?一般有几种方法,通过sql注射手段,获取管理员权限,通过备份数据库的功能将asp木马写入服务器。或者进入后台通过asp程序的上传功能的漏洞,上传木马等等,当然正常情况下,这些可以上传文件的asp程序都是有权限限制的,大多也限制了asp文件的上传。

比如:可以上传图片的新闻发布、图片管理程序,及可以上传更多类型文件的论坛程序等,如果我们直接上传asp木马的话,我们会发现,程序会有提示,是不能直接上传的,但由于存在人为的asp设置错误及asp程序本身的漏洞,给了入侵者可乘之机,实现上传asp木马。

因此,防范asp木马的重点就在于虚拟主机用户如何确保自己空间中asp上传程序的安全上,如果你是用别人的程序的话,尽量用出名一点的大型一点的程序,这样漏洞自然就少一些,而且尽量使用最新的版本,并且要经常去官方网站查看新版本或者是最新补丁,还有就是那些数据库默认路径呀,管理员密码默认呀,一定要改,形成习惯保证程序的安全性。

那么如果你是程序员的话,我还想说的一点就是我们在网站程序上也应该尽量从安全的角度上编写涉及用户名与口令的程序最好封装在服务器端,尽量少的在ASP文件里出现,涉及到与数据库连接地用户名与口令应给予最小的权限。

需要经过验证的ASP页面,可跟踪上一个页面的文件名,只有从上一页面转进来的会话才能读取这个页面。防止ASP主页.inc文件泄露问题; 防止UE等编辑器生成some.asp.bak文件泄露问题等等特别是上传功能一定要特别注意。

为什么好好的网站会有木马

一般木马是来自ASP SHELL和PHP SHELL的程序段控制不严,程序上有上传功能,没有进行文件目录和文件后缀等的判断,一般这类的目录,以“海阳顶端网ASP木马”较为流行。因2003平台IIS6原因,也存在目录名问题引起ASP木马。( 微软的IIS 6存在严重解析文件名错误)

测试办法:在FTP中建立一个 test.asp 的文件夹,文件夹名就是 test.asp ,在这个文件夹中上传一个 hack.jpg,这个jpg的内容可以直接是,然后,用IE远程访问这个hack.jpg,你可以发现,它一样被当作是ASP文件来运行!显然,只要你的网站程序,允许用户自己建立文件夹及上传图片,黑客就可以上传图片来当作ASP木马来运行。

解决办法:所有使用星外虚拟主机管理平台的虚拟主机用户,可以在主机面板,设置执行权限选项中,直接将有上传权限的目录,取消ASP的运行权限,就可以解决这个问题。

大家常用的动易2006和动网,BLOG这类的程序,需要详细的检查一下,并跟着开发者进行相应的安全程序升级。这样才能减少因代码原因引起的网站被黑。

防范ASP木马的基本原则

在空间上由于无法预见虚拟主机用户会在自己站点中上传什么样的程序,以及每个程序是否存在漏洞,因此无法防止入侵者利用站点中客户程序本身漏洞上传asp木马的行为。空间上只能防止入侵者利用已被入侵的站点再次入侵同一服务器上其他站点的行为。这也更加说明要防范asp木马,虚拟主机用户就要对自己的程序严格把关! 为此我总结了ASP木马防范的几个原则供大家参考:

1、建议用户通过ftp来上传、维护网页,尽量不安装asp的上传程序。

2、对asp上传程序的调用一定要进行身份认证,并只允许信任的人使用上传程序。

这其中包括各种新闻发布、商城及论坛程序,只要可以上传文件的asp都要进行身份认证!

3、asp程序管理员的用户名和密码要有一定复杂性,不能过于简单,还要注意定期更换。

4、到正规网站下载asp程序,下载后要对其数据库名称和存放路径进行修改,数据库文件名称也要有一定复杂性。

5、要尽量保持程序是最新版本。

6、不要在网页上加注后台管理程序登陆页面的链接。

7、为防止程序有未知漏洞,可以在维护后删除后台管理程序的登陆页面,下次维护时再通过ftp上传即可。

8、要时常备份数据库等重要文件。

9、日常要多维护,并注意空间中是否有来历不明的asp文件。记住:一分汗水,换一分安全!

10、一旦发现被入侵,除非自己能识别出所有木马文件,否则要删除所有文件。重新上传文件前,所有asp程序用户名和密码都要重置,并要重新修改程序数据库名称和存放路径以及后台管理程序的路径。做好以上防范措施,您的网站只能说是相对安全了,决不能因此疏忽大意,因为入侵与反入侵是一场永恒的战争。

一般这种问题是网站有漏洞,系统漏洞或者SQL注入漏洞,或者上传文件漏洞, 我也深受其苦,然而,如何防止网页被修改加入脚本病毒? 现将这个问题总结分享一下,

  1、简单的补救措施:在服务器IIS中,把所有的ASP,HTML文件的属性设置为Everyone只读(一般是IUSR_),只把数据库的权限设置成可写, 注意:如果你没有服务器的管理权限,那么登录上的空间ftp,选中那些不需要写入的文件或文件夹,右键点击-属性:把其中的三组写入权限都取消,但如果你有ACCESS数据库,要把数据库设成可写,不然读数据时会出错。

  2、先把恶意代码删掉(替换掉),然后把网站目录下的所有文件全部用杀软杀下 ,然后一个一个检查下是否存在后门

  3、在你的程序里写上以下防注入函数

  on error resume next ’这行代码放到conn.asp的第一行。

  防止注入

  dim qs,errc,iii

  qs=request.servervariables("query_string")

  ’response.write(qs)

  dim deStr(18)

  deStr(0)="net user"

  deStr(1)="xp_cmdshell"

  deStr(2)="/add"

  deStr(3)="exec%20master.dbo.xp_cmdshell"

  deStr(4)="net localgroup administrators"

  deStr(5)="select"

  deStr(6)="count"

  deStr(7)="asc"

  deStr(8)="char"

  deStr(9)="mid"

  deStr(10)="’"

  deStr(11)=":"

  deStr(12)=""""

  deStr(13)="insert"

  deStr(14)="delete"

  deStr(15)="drop"

  deStr(16)="truncate"

  deStr(17)="from"

  deStr(18)="%"

  errc=false

  for iii= 0 to ubound(deStr)

  if instr(qs,deStr(iii))<>0 then

  errc=true

  end if

  next

  if errc then

  Response.Write("对不起,非法URL地址请求!")

  response.end

  end if
回复 支持 反对

使用道具 举报

13

主题

21

帖子

246

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
246
发表于 2014-6-4 12:11:18 | 显示全部楼层
因为FF(Firefox)不怕IFRAME,于是就拿IE开刀,不知道比尔有没有奖发。我只写了一句代码,就搞定了,哈,痛快。就是IE only(特有的)的CSS中的属性e-xpression,插进去试试,果然那些IFRAME不起作用了。

代码如下:

<style type="text/css" media="all" id="http://www.66seo.cn">
/*<![CDATA[*/
iframe{
v:e-xpression(this.src='about:blank',this.outerHTML='');/*使用IE Only 的样式会除所有 IFRAME */
}
#f126{v:e-xpression() !important} //如果要使自己的IFRAME可以执行,在自己的IFRAME里加上ID="f126";
/*]]>*/
</style>

分析:
前缀:e-xpression(表达式);

  这个前缀是可以随意更换的,我上面取名为"v",例如我可以换成:abc123:e-xpression(this.src='about: blank',this.outerHTML=''); 挂木马的家伙得先看你的CSS里这个前缀,然后挂马的时候写成这样<iframe style="abc123:e-xpression() !important" src="URL"></iframe>,那个前缀一定要是和你的网站一样的(abc123),才能挂到马,哈哈哈!如果把前缀做成动态的,就非常OK了,看你怎么挂!

优点:

可以解决一些站长的烦恼,无须去理会人家插了多少IFRAME木马,那些IFRAME都不起作用;

保护了访客的安全,这些IFRAME不执行,不下载,就不会破坏到访问的电脑;

代码简单,仅一句CSS样式,不管你是ASP,ASP.NET,JSP,PHP还是RUBY,都通用;

缺点:

只适合防御目前的挂IFRAME方案;

使得人家挂马的方式要改变了,挂马者可以构造这样的代码<iframe style="v:e-xpression() !important" src="URL"></iframe>使我的防御方式失效,不过挂马都一定得看我的CSS里e-xpression前面的这个"v" 字母,我可以换成任意的如:xgz:e-xpression(...),哈哈哈,他也拿我没办法,再如,如果我这个前缀是变化的,是不是也行吖 *_*

不能防御其他标记的马,如<script>、<applet>、<object>等。
到那时候再来找我吧,呵呵~ 网页里插入的IFRAME还是存在,只是不起作用了;

再加固防线,加入以下JS代码——其实这个代码可以完全不用:

<script type="text/javascript" language="javascript">
//<![CDATA[
function killfrm()
{
var xgzfrm=document.getElementsByTagName("iframe");
for(var i=0;i<xgzfrm.length;i++)//循环检查所有IFRAME标记,把所有IFRAME的URL都改为空白页,然后删除IFRMAE标记;
{
xgzfrm[i].src='about:blank';
xgzfrm[i].outerHTML='';
}
}
window.onload=killfrm;//一边加载页面,一边执行这个JS方法;
//]]>
</script>
回复 支持 反对

使用道具 举报

13

主题

21

帖子

246

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
246
发表于 2014-6-4 12:12:39 | 显示全部楼层
处理数据库中木马<script>时,想清理MSSQL数据中的那些代码,在SQL查询分析器直接用命令replace时,但就遇到了"...函数replace的参数1的数据类型ntext无效"的问题,这里我就不详细说了。网上也有一些说用UPDATETEXT之类的方法,但小的不怎么会,哈哈,唯有写了一个程序给他用。相信有一些朋友会用得到,所以在这里我贴出给大家了。多多指教!

这里要注意啊,这个是对scrip块t和iframe块通杀的,不分站内或外站链接的。

一般情况挂木马都是带有http外站链接的,所以你可以把

代码:

new_content = RegReplace(RegReplace(Rs_1("Contents"),"<SCRIPT[^<]*</SCRIPT>",""),"<IFRAME[^<]*</IFRAME>","")

改成

代码:

new_content = RegReplace(RegReplace(Rs_1("Contents"),"<SCRIPT[^<]*http</SCRIPT>",""),"<IFRAME[^<]*http</IFRAME>","")

这样就保证自己的JS不被杀了。

我就喜欢通杀了,因为我不会在内容上添加这些代码。

请大家在自己本机上测试再用到真正的运用上。

对于数据多的朋友,以下这句也可能会造成ASP超时的,你们自己可以在这个程序上作出一些优化,我就暂时不写了。

代码:

sql = "select Count("& data_id &") as CountNum from "& data_tbl &" where "& data_name &" like '%"& keyword &"%'"

程序代码:

代码:

<!--#include file="conn.asp"-->

<%

'==========================================================================

'==================对数据库的script和iframe进行清理替换======================

'==========================================================================

'Author:Niky|秋风

'Email:ec365@163.com

'QQ:35550507

'==========================================================================

'没有加入程序的页面界面,人啊,就是懒,没办法,嘻嘻!!

'使用方法:直接运行文件链接就行了.如:http://www.domain.com/replace_pro.asp

'==========================================================================

'****************************************************

'函数名:RegReplace

'作  用:对str 进行正则替换

'参  数:Str,PatternStr,RepStr

'****************************************************

Function RegReplace(Str,PatternStr,RepStr)

    Dim NewStr,regEx

    NewStr = Str

    if isnull(NewStr) then

        RegReplace = ""

        exit Function

    End if

    Set regEx = New RegExp

    regEx.IgnoreCase = True

    regEx.Global = True

    regEx.Pattern=PatternStr

    NewStr = regEx.Replace(NewStr,RepStr)

    RegReplace = NewStr

End Function

'****************************************************

'*********************设置相关参数********************

'****************************************************

'为防止ASP超时,这里可以设置每次最多处理的数据条数

'如果你的中马的数据大于max_num,那么需要你运行(总数据/max_num)相除出来的次数了

'如果设max_num为0,则处理所有带script和iframe的数据,注意可能会造成超时

'****************************************************

max_num = 20

'****************************************************

'设置数据库表名

'****************************************************

data_tbl = "table"

'****************************************************

'设置数据的ID编号名 如:id 或 newid ...

'****************************************************

data_id = "id"

'****************************************************

'设置查找和替换数据列名--修改此项必须也要修改rs_2("***")

'****************************************************

data_name = "contents"

'*******************程序查找替换开始******************

For i_time = 1 To 2

    '检测关键字

    Select Case i_time

        Case 1    keyword = "<script"

        Case 2    keyword = "<iframe"

    End Select

    '首先是检查有没存在相关要替换的关键字的数据

    Set Rs=server.createobject("adodb.recordset")

    sql = "select Count("& data_id &") as CountNum from "& data_tbl &" where "& data_name &" like '%"& keyword &"%'"

    Rs.Open Sql,Conn,1,1

    '如果有的话就计算出总数是多少

    If not Rs.eof then

        '读取总数

        CountNum=Cstr(Rs("CountNum"))

        If CountNum > 0 then

            '初始化记录条数

            rec_num = 0

            ii = 1

            If max_num <> 0 And max_num > 0 then

                '每次限制处理的数据

                If CountNum > max_num Then CountNum = max_num

            End If

            

            '然后一个一个地读出来替换数据

            '开始循环

            Do While ii < CountNum +1

               

                ii = ii + 1

               

                Set Rs_1=server.createobject("adodb.recordset")

                sql_1 = "select top 1 "& data_id &" as temp_id,"& data_name &" as Contents from "& data_tbl &" where "& data_name &" like '%"& keyword &"%'"

                Rs_1.Open Sql_1,Conn,1,1

                If Rs_1.eof Then '如果没有了记录就退出Do块,防止无用的循环

                    Exit Do

                End If

                '记录处理的条数

                rec_num = rec_num + 1

               

                '读取ID和内容

                id = Rs_1("temp_id")

                '利用正则替换内容

                new_content = RegReplace(RegReplace(Rs_1("Contents"),"<SCRIPT[^<]*</SCRIPT>",""),"<IFRAME[^<]*</IFRAME>","")

                    '更新内容

                    Set rs_2 = Server.CreateObject("ADODB.Recordset")

                    sql_2="select * from "& data_tbl &" where "& data_id &"="& id

                    rs_2.open sql_2,conn,1,3

                    

                    '+++++++++++++++++++++rs_2("***")中的***修改成你的数据字段++++++++++++++++++++

                    rs_2("contents") = new_content

                    '+++++++++++++++++++++rs_2("***")中的***修改成你的数据字段+++++++++++++++++++++

                    rs_2.update

                    rs_2.close

                    set rs_2 = Nothing

                    Response.write "数据ID:"& id &"已经处理完毕!"&"<br />"

                rs_1.close

                set rs_1 = nothing

            Loop

            Response.write ("<script>alert('带"& keyword &"关键字的全部"&rec_num&"个数据已经处理完毕!')</script>")

        else

            Response.write ("<script>alert('没有带"& keyword &"关键字的数据可处理!')</script>")

        End If

    End If

Next

rs.close

set rs = Nothing

%>
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

站长推荐上一条 /1 下一条

QQ|Archiver|手机版|小黑屋|百度优化软件

GMT+8, 2019-3-19 12:13 , Processed in 0.375380 second(s), 21 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表