首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > 动网跨站的原因
【标  题】:动网跨站的原因
【关键字】:
【来  源】:http://www.cnitblog.com/crazystone/archive/2006/10/09/17778.html

动网跨站的原因

动网跨站的原因

今天简要说一下跨站形成的原因。

一、BOKE跨站

在"CheckInput.asp"中,自定义函数"FormatCode()",过滤不严。
Public Function FormatCode(StrData) '提交格式化数据
............
Re.Pattern = "<(\w*) class\s*=\s*([^>|\s]*)([^>]*)>" '以下是正则表达式,用于过滤提交数据
Str = re.Replace(Str,"<$1$3>")
Re.Pattern = "<(\w*) style\s*=\s*([^>|\s]*)([^>]*)>"
Str = re.Replace(Str,"<$1$3>")
..............
FormatCode = Str
End Function

其中过滤的是 < style=****>,而非 <style=****>,导致跨站代码可以写入BOKE文章及评论中。

在"book.asp"中,而显示文章及评论内容时,如果出现"Dv_FilterJS()"中定义的以下字符才会用"Server.HtmlEncode"进行过滤:

(|function|meta|window\.|script|js:|about:|file:|Document\.|vbs:|frame|cookie|on(finish|mouse|Exit|error|click|key|load|focus|Blur))

很遗憾的是:"style"不在其中,所以跨站便出现了。

修补方法:

1、修改"FormatCode()"为以下内容,

Public Function FormatCode(StrData) 'JMDCW 2006-06-21
............
Re.Pattern ="<(\w*)class[\s|\w]*=\s*([^>|\s]*)([^>]*)>"
Str = re.Replace(Str,"<$1$3>")
Re.Pattern ="<(\w*)style[\s|\w]*=\s*([^>|\s]*)([^>]*)>"
Str = re.Replace(Str,"<$1$3>")
..............
FormatCode = Str
End Function


2、在"Dv_FilterJS()"中的过滤代码中加入:style和class。

(|function|meta|window\.|script|js:|about:|file:|Document\.|vbs:|frame|cookie|on(finish|mouse|Exit|error|click|key|load|focus|Blur|style|class))

二、头像跨站

注:详细原理及利用 请阅读《黑客X档案》 2006年第8期。

动网mymodify.asp对提交的自定义头像内容过滤不严,导致头像中可以写入跨站代码。
动网头像分myface(内置头像)和face(自定义头像),如果myface的提交值为空,就使用face的提交值。采用如下过滤方式:
face=Dv_FilterJS(Replace(face,"'",""))
face=Replace(face,"..","")
face=Replace(face,"\","/")
face=Replace(face,"^","")
face=Replace(face,"#","")
face=Replace(face,"%","")
face=Replace(face,"|","")
face=Left(face,200)
其中"Dv_FilterJS"的部分内容如下:
Function Dv_FilterJS(v)
..............
re.Pattern="(script)"
t=re.Replace(t,"<I>script</I>") '将字符script替换为<I>script</I>
re.Pattern="(js:)"
t=re.Replace(t,"<I>js:</I>")
...............
End Function

这里,动网犯了一个逻辑错误,在代码未检测完之前就进行了过滤,如果提交的是: javasc|ript,或是 javasc^ript ,就能绕过动网的过滤。

修补方法:
对replace采取如下过滤方式。

face=Dv_FilterJS(Replace(face,"'","''")) 'JMDCW 2006-06-22
face=Replace(face,"\","/")
face=Replace(face,"^","^")
face=Replace(face,"#","#")
face=Replace(face,"%","%")
face=Replace(face,"|","|")
face=Replace(face,"..","..")
face=Replace(face," "," ") 'TAB值

2006年IT人必去的论坛:【上一篇】
30秒清除Windows系统所有:【下一篇】
【相关文章】
没有相关文章
【随机文章】
  • globus-build-service 使用手册
  • Command 4 登录、注销、关机
  • 黑客的起源
  • BGP + MPLS Exam (BGP+MPLS 642-691)
  • 資料型別: 字串轉日期 T-SQL
  • 关于new与delete的小细节
  • 如何同时选择DataGrid的多行
  • 使用"usermod"命令控制口令选择
  • C#中实现字符截取
  • 获取屏幕任意点的颜色
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.