谈跨站脚本攻击之综合篇

转载 2004年10月13日 22:40:00

原文网址:
http://www.e3i5.com/html/2004-6-18/2004618171625.htm
http://wvw.ttian.net/article/show.php?id=164
作者:风清扬

       近日,由于发现一些站点仍然存在UBB的跨站脚本攻击的漏洞.跨站脚本攻击虽然很少会对服务器造成一些什么比较大的影响,但对于一个站点来说,存在这种漏洞实在是太不值得!小则,弹点什么东东出来;中则改改主页;重则窃取用户的COOKIES资料,更甚者将会G掉浏览者的硬盘.一个站点被变成一个恶意网站,还有谁敢来?如果再加上该站的站长比较"盲"一些,岂不乱套了?

小小的一段代码就真的能使一个站点成这样?好叫我们来具体的看看所谓的跨站脚本攻击到底会成为什么样的攻击模式.进入一个含UBB功能的站点,比如留言板,论坛,或是含提交程序的站点.首先,讲一下最简单的脚本攻击:<td ></td >等HTML字符的过滤问题.

登陆过一个CGI制作站点.以原来ASP的眼光看CGI的站点,感觉CGI对脚本的过滤应该很好.于是做了最初的测试.在用户一栏中填写<td >,提交用户注册后发现并没提出非法字符的提示.注册完成后,点击资料也发现页面变形了.如在其他几个如国家,性别里填写也会出现同样的问题,那页面就没法看了.于是换了一个站点,再次提交<td >出现了非法字符提示,看来站点是已经过滤的<>等HTML的脚本字符,那好,我们改用ASCII 码替换<> 如& #60; & #62;代替提交后再来看,又出现了上面页面变形的情况,看来非法过滤机制还不是很完善. 更有甚者,我竟发现一个站点内的姓名栏填写时没有字数大小设置,没有过滤任何非法字符,如果我提交个什么恶意代码那还不成全了我?

简单的脚本攻击如<td >等HTML格式的代码一定要过滤好,上面的一些站点还没牵扯到UBB就出问题了.那我们下面就开始重点讲一下UBB过滤漏洞的问题.UBB是论坛中用来替换HTML编辑的一种格式符号,如[b ][/b ]可以替换成HTML中的< b></ b>..然而就是这一个替换问题,就成了跨站脚本攻击的最佳积聚地.测试了一个ASP留言版以及一个整站的程序代码:

初级问题: [url ]的过滤,在提交该代码时可以构建一个onmouseover函数的恶意代码,既然onmouseover可以生效,那还有什么办不到的?一些原码程序在变换[url ][/url ]时,只是将[url ]s2[/ url]中的s2直接提交到< a href="s2" target=_blank>S2</a >中.看到如此转换我们可以使用相应的ASCII 码中的& #34;来代替",我们多提交一个"然后在构建onmouseover函数进行操作,后果?你应该知道!:P

[img ]的过滤,这真的算是个老大难的问题.很早以前就是[img]的脚本攻击流行一时啊.这次测试中,很多站点还是仍然存在这个漏洞.有点程序根本没有进行过滤.尤其是一些免费留言板的提供站点很多都存在这样的问题.下面我们主要将一下[IMG ]标签的问题:

很简单的[img ]javascript:alert();[/ img]提交后转换成的代码为< img src="javascript:alert();">,好,到这里我们就可以看到javascript:alert();被< img src="">标签激活了.表现就是弹出对话框.上面写着你在()中要提交的东西.如documents.cookie 呵呵..大多数人都应该知道这东西是做什么.更有甚者,使用document.write();函数,可以写网页.写什么?当然是恶意代码,如[ img]javascript:document.write();[ /img].()中间加你要加的,写你要写的,想多危险就多危险.


高级问题: 由于[img ]的初级问题骚扰很多站点就对一个敏感的字符开始过滤.如ja连接,do连接,wr连接,提交后自动分为j a,d o,w r.或是对字符进行过滤java,document,等等.而这些只能难倒一小部分人.我们仍然可以利用ASCII码来代替.可能有人会对代替后的代码仍然不能正常显示而困惑.好,我们下面以一个完整的例子介绍:

某站点UBB过滤代码段如下:
<%
Function code_ssstrers)
dim strer:strer=strers
if strer="" or isnull(strer) then code_ss"":exit function

strer=replace(strer,"<","<")
strer=replace(strer,">",">")
strer=replace(strer," "," ") '空格
strer=replace(strer,CHR(9)," ") 'table
strer=replace(strer,"'","'") '单引号
strer=replace(strer,"""",""") '双引号

dim re,re_v
re_v="[^/(/)/;/';""/[]*"
're_v=".[^/[]*"
Set re=new RegExp
re.IgnoreCase =True
re.Global=True

re.Pattern="(javascript:)"
strer=re.Replace(strer,"javascript:")
re.Pattern="(javascript)"
strer=re.Replace(strer,"javascript")
re.Pattern="(jscript:)"
strer=re.Replace(strer,"jscript :")
re.Pattern="(js:)"
strer=re.Replace(strer,"js:")
re.Pattern="(value)"
strer=re.Replace(strer,"value")
re.Pattern="(about:)"
strer=re.Replace(strer,"about:")
re.Pattern="(file:)"
strer=re.Replace(strer,"file&:")
re.Pattern="(document.)"
strer=re.Replace(strer,"document :")
re.Pattern="(vbscript:)"
strer=re.Replace(strer,"vbscript :")
re.Pattern="(vbs:)"
strer=re.Replace(strer,"vbs :")
re.Pattern="(on(mouse|exit|error|click|key))"
strer=re.Replace(strer,"on$2")


能看懂ASP的朋友,就可以看出,以上代码段对javascript,jscript:,js:,about;value,document.,onmouse以及onexit等语句进行了过滤和替换.并对一些特殊字符进行了替换.如".",";""(",")" [替换代码为""中间的"..仔细观察代码后我们会发现其过滤机制并非想想象的那样完美.提交:[ mg]& #176& #93& #118& #97& #115& #79rip& #106& #57documen& #115& #76write& #30& #29哈哈又被黑了& #29& #61& #29[/ mg] 类似代码就可以实现更高级的脚本攻击.注:由于很多站点仍存在此问题,所以将代码修改过,无攻击性了.
打开你的FT2000,使用文本编辑,你可以找到任何特殊字符所属的ASCII码.如:分号;可以代替为&# 59,句点.可以代替为&# 46,以这样的形式我们再次提交代码.果然,上面整个的过滤机制几乎完全失效了.根本没起到什么防御作用.


看了以上的攻击方法,是不是觉得很郁闷?如果才能避免上面的问题发生?

1.如果你的站点程序含论坛,留言板,以及其他程序中含提交数据格式的,没有很好过滤机制,请马上下载升级程序或是停止使用.避免造成更多的问题.
2.各提供免费论坛,免费申请留言板的站,请将UBB格式关闭.或找到更好的解析UBB.ASP程序页.
3.对一些会编写ASP的朋友,我建议大家过滤一下字符:(全部字符将写在[]中)如:
["|.|;|:|/|/|&|$|#|`|)|,|'|"|-|~|[|(||] 注:其中|为分割符

4.对于某些站点建议去掉问题比较多的留言板,或是其他含提交的程序.如:原www.sangel.net使用的guestbook,一些不知名的程序体问题更是多多.建议换掉它.

5.我本人也修改了一个国外的留言板,前台基本已经修改完毕.后台这几天正在赶.修改后感觉在文本提交和输入以及留言时都有了很好的过滤.本来打算全采用英文界面,但考虑到N多chinese 对英语不过关,我还是将部分程序汉化了.有兴趣的朋友可以http://www.e3i5.com/guestbook/ 测试.我们欢迎善意的测试.


以下是国内一些经过本人测试的站点的留言板有问题的地址,(请各位站长注意啦,及时修补程序免得造成不必要的麻烦),测试的时间比较短一些,可能有一些站点没有找到.可能存在着更严重的问题.:(



以上就是这次脚本攻击测试的全部内容。综观全部站点,看上去安全性真是的不敢再想.问题多多.
虽然只是举手之劳就可以解决的问题,但稍不小心就会造成大问题。别小看跨站脚本攻击的威力,如果真的灌注的恶意代码,那可就...Yy~汗

发表此文只是对国内各类站点给个提醒,一个安全的站点大家用着放心,使着也舒心.再此也对在这个测试过程中小有得罪的朋友表示歉意.有关该内容更多的请到http://www.e3i5.com 查找.欢迎大家的光临和指导.此文有什么不对的地方,请各位大虾指点.谢谢.

《sed & awk》读书笔记之 sed 篇

Sed&awk笔记之sed篇:简单介绍 最近在阅读《sed & awk(第二版)》,这本书是sed和awk相关书籍中比较经典的一本。我在读书的时候有一个习惯,就是会作一些笔记,如果有条件我会放到博客中...
  • chenyulancn
  • chenyulancn
  • 2014年01月02日 15:24
  • 555

异化的追思——读《变形记》《火之鸟10复活篇》《沙耶之歌》》

  原文图文并茂,请到http://www.jsharer.com/file/738383.htm下载 异化的追思——读《变形记》《火之鸟10复活篇》《沙耶之歌》》Version 1.000三部作品的...
  • luozhuang
  • luozhuang
  • 2008年07月14日 13:21
  • 5513

初读《演说之禅设计篇》有感

零零散散看了快半个月吧,还剩几十页,今天终于把那几十页看完了,直观感受就是,看起来说得挺不错的,但是如果换我自己去做,没有参考,能做出些许满意的PPT吗?尽管带着满满的不自信,但还是找出一份大一时候做...
  • u013816144
  • u013816144
  • 2016年06月21日 21:53
  • 387

《sed & awk》读书笔记之sed篇

Sed是什么 Sed本质上是一个编辑器,但是它是非交互式的,这点与VIM不同;同时它又是面向字符流的,输入的字符流经过Sed的处理后输出。这两个特性使得Sed成为命令行下面非常有用的一个...
  • aichuanwendang
  • aichuanwendang
  • 2016年11月25日 20:25
  • 671

一步一步学ROP之linux_x86篇

0x00    本文仅解释说明蒸米大神一步一步学ROP之linux_x86篇,读者应先阅读这篇文章,遇到问题再来看我这篇文章。    阅读完这两篇文章后,我们会理解ROP(返回导向编程),DEP(堆栈...
  • jltxgcy
  • jltxgcy
  • 2016年02月19日 11:16
  • 2444

深度学习word2vec笔记之算法篇

深度学习word2vec笔记之算法篇
  • mytestmy
  • mytestmy
  • 2014年05月25日 20:03
  • 33870

Java 之JNI基础篇(一)

JNI,即Java Native Interface。它其实就是一套java与本地代码交互的接口或者说是一个协议。通俗的比喻,就是中国人讲中国话,日本人讲日本话,于是中国人碰到日本人,各说各话,无法交...
  • yingshukun
  • yingshukun
  • 2018年01月13日 18:51
  • 10003

Spark编程指南入门之Java篇六-RDD持久化介绍

10. RDD持久化 Spark其中一个重要的功能是持久化(或缓存)数据到内存。当持久化一个RDD时,每一个节点会把计算后的分区数据保存在内存里面,然后后续的操作可以直接重用内存里的数据。这样可以提...
  • gangchengzhong
  • gangchengzhong
  • 2017年01月12日 16:47
  • 995

android自定义View之(一)------基本篇

(1)Canvas     我们先来看一下Canvas的官方定义:     The Canvas class holds the "draw" calls. To draw something, yo...
  • hfreeman2008
  • hfreeman2008
  • 2015年01月14日 21:27
  • 1263

繁星笔谈之量子物理篇

      本文汇集了现代物理中的因果律、 从光谱线到电子轨道、 Planck 是如何提出 Planck 公式的?、 Schrödinger 方程与态迭加原理等四篇有关量子物理的短文。  现代物理中的...
  • caiyd08
  • caiyd08
  • 2010年01月07日 13:59
  • 413
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:谈跨站脚本攻击之综合篇
举报原因:
原因补充:

(最多只允许输入30个字)