也谈跨站脚本攻击与防御_木马相关

网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路。
还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流程如下:

恶意用户的Html输入————>web程序————>进入数据库————>web程序————>用户浏览器

这样我们就可以清楚的看到Html代码是如何进入受害者浏览器的了,我们也就可以根据这个流程来讨论跨站脚本的攻击与防御了!
1 什么是HTml输入?

这里给出一个HTml代码的示例

<img src=https://yunqi-tech.oss-cn-hangzhou.aliyuncs.com/www.loveshell.jpg width=100 onerror=alert("载入图片错误!")>

很多的程序最终都是将用户的输入转换成这种形式的。可以看到<>是告诉浏览器这是一个Html标记,img是这个Html标记的名称,src是这个标记的第一个属性,=后面是这个属性的值,后面的width是第二个属性,onerror是标记的事件属性。大家可以看到,一个Html标记是包括很多元素的,并不是传统意义上的只有输入<>才会注入Html,事实上只要你的输入处在Html标签内,产生了新的元素或者属性,就实现了跨站脚本攻击!实际上大多数隐秘的跨站脚本攻击是不需要<>的,因为现在的Ubb标签已经让你处在了Html标记之内,很有意思,不是么?

2 哪里才是罪恶的来源?

既然我们的目标是引入代码在目标用户的浏览器内执行,那么我们来看看哪些地方可以引入HTml代码吧!如果用户可以不受限制的引入<>,那么很显然他可以完全操纵一个Html标记,譬如<script>alert('xss')</script>这样的形式,这对于追求安全的程序来说是绝对不允许的,所以首先要做转换的就是<>,通过如下代码:

过滤代码:
replace(str,"<","<")
replace(str,">",">")
好了,用户可能不能构造自己的HTml标记了,那么利用已经存在的属性如何呢?下面的代码依然可以工作得很好:

<img src="javascript:alert(/xss/)" width=100>

因为很多的Html标记里属性都支持javascript:[code]的形式,很好,很多的程序意识到了这一点,可能做了如下的转换:

过滤代码
Dim re
Set re=new RegExp
re.IgnoreCase =True
re.Global=True
re.Pattern="javascript:"
Str = re.replace(Str,"javascript:")
re.Pattern="jscript:"
Str = re.replace(Str,"jscript:")
re.Pattern="vbscript:"
Str = re.replace(Str,"vbscript:")
set re=nothing

你看,只要发现以javascript等脚本属性的形式都会被过滤掉,失去了:的脚本代码是起不了作用的!这样完美了么?事实上Html属性的值,注意是值而不是属性本身是支持ASCii这种形式表示的,譬如上面的代码可以换成这样:

<img src="javascript:alert(/xss/)" width=100>

代码又执行了,呵呵!看来你漏掉了点什么哦,加上这个代码吧!

replace(str,"&","&")

行了,&失去它原来的意义了,用户不能以其他方式表示Html属性值了哦!等等,这样的过滤真可以相信么?只要发现这种过滤的关键字机制,饶过就是简单的问题了:

<img src="javas cript:alert(/xss/)" width=100>

没有javascript关键字了哦!注意中间那个是tab键弄出来的!关键字被拆分了哦!这是个很麻烦的问题,很多人忘记了这些特殊的字符,呵呵!有人想到要过滤空格了,在过滤之前我们再看看其他的一些东西吧!也许我们现在所处的src属性已经无法利用了,但是我们依然可以产生自己的属性或者事件机制哦!依然是可以执行Html代码的,首先说说事件机制吧:

<img src="#" onerror=alert(/xss/)>

这样依然可以执行代码的哦!明白问题出在哪了,不是么?有的程序员仿佛明白了,注意我说的是仿佛,动网就是一个典型的例子,事件属性不是要onerror么?很多人开始用正则表达式了,发现关键的词如onerror就会做转换或者提示用户不执行,是不是没有机会了呢?
当然不是的,事件只是让代码运行的一种方法而不是所有的,可以定义事件了那么也就可以实现自己弄出自己的属性了,试试下面的:

<img src="#" style="Xss:expression(alert(/xss/));">

呵呵,还是执行了哦!在做关键字过滤之后有人发现是不是属性之间分隔要用到空格,好,他们把空格堵死了(这样认为的人很多,呵呵)!将空格转成 是个很普遍的方法?是么?甚至还可以让别人无法关键字拆分,不要太自信了,试试下面的代码看看如何:

<img src="#"/**/onerror=alert(/xss/) width=100>

嘿嘿,Good Work!这好象是利用了脚本里注释会被当作一个空白来表示造成的!那怎么办呢?上面提到的好象一直都是在进行被动的攻击防御,为什么不抓住他的本源出来呢?哪里出了问题哪里堵上!

3 本质

上面的问题好象本质上就是一个东西,那就是用户超越了他所处的标签,也就是数据和代码的混淆,对付这种混淆的办法就是限制监牢,让用户在一个安全的空间内活动,这通过上面的分析大家也可能已经知道,只要在过滤了<>这两个人人都会去杀的字符之后就可以把用户的输入在输出的时候放到""之间,现在的一般的程序都是这样做的,譬如将会转化成<img src="http://www.loveshell.net">这是个好的安全习惯,然后呢?就要让用户的输入处在安全的领域里了,这可以通过过滤用户输入里""实现,但是不要忘记了,这个标签本身也是不安全的,过滤掉空格和tab键就不用担心关键字被拆分饶过了,然后就是用文章中提到的办法过滤掉script关键字,最后就是防止用户通过这样的形式饶过检查,转换掉&吧!

4 困惑

在文章中开始提到的图里可以看到,数据的转换和过滤是可以在3个地方进行转换的,在接受数据的时候可以转换下,在进入数据库的时候可以转换下,在输出数据的时候也可以转换下,但是困惑在哪里呢?不得不面对一个问题就是许多时候程序员舍不得为安全做出那么大的应用上的牺牲,安全是要有代价的,譬如现在邮箱的就不愿意舍弃html标签,因为需要支持多资多彩的页面,所以他们侧重于XSS的IDS检测的性质,只要发现不安全的东西就会转化,但是攻击是无法预知的,漂亮的东西总是脆弱的,有限制,肯定就有人会饶过,呵呵。本文没什么技术含量,只是希望搞安全的脚本人员能更加的了解Xss,跨站,不是那么简单滴! 

时间: 2024-10-30 21:03:56

也谈跨站脚本攻击与防御_木马相关的相关文章

也谈跨站脚本攻击与防御

网络上曾经有过关于跨站脚本攻击与防御的文章,但是随着攻击技术的进步,以前的关于跨站脚本攻击的看法与理论已经不能满足现在的攻击与防御的需要了,而且由于这种对于跨站脚本认识上的混乱,导致现在很多的程序包括现在的动网都存在着跨站脚本过滤不严的问题,希望本文能给写程序的与研究程序的带来一点思路. 还是首先看看跨站脚本漏洞的成因,所谓跨站脚本漏洞其实就是Html的注入问题,恶意用户的输入没有经过严格的控制进入了数据库最终显示给来访的用户,导致可以在来访用户的浏览器里以浏览用户的身份执行HTml代码,数据流

最新的黑客技术:XSS跨站脚本攻击详细介绍_漏洞研究

总体上介绍 简单介绍什么是XSS攻击 如何寻找XSS漏洞 对于XSS攻击的总体思路 来自内部的攻击: 如何寻找内部的XSS漏洞 如何构造攻击 如何利用 结何实例攻击,如DVBBS&BBSXP 来自外部的攻击 如何构造XSS攻击 如何欺骗管理员打开 XSS与其它技术的结何 与mssql injection的结合 QQ跨站的结何 国内大型统计网站的跨站漏洞 社会工程学 制作恐怖的flash木马 制作方法由李丰初写 总结  正文: XSS总体介绍 什么是XSS攻击 XSS又叫CSS  (Cross S

UBB的跨站脚本攻击的漏洞_漏洞研究

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

研究UBB的跨站脚本攻击之综合篇_漏洞研究

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

跨站脚本执行漏洞详解与防护_木马相关

本文主要介绍跨站脚本执行漏洞的成因,形式,危害,利用方式,隐藏技巧,解决方法和常见问题 (FAQ),由于目前介绍跨站脚本执行漏洞的资料还不是很多,而且一般也不是很详细,所以希望本文能够 比较详细的介绍该漏洞.由于时间仓促,水平有限,本文可能有不少错误,希望大家不吝赐教.  声明,请不要利用本文介绍的任何内容,代码或方法进行破坏,否则一切后果自负!  [漏洞成因]  原因很简单,就是因为CGI程序没有对用户提交的变量中的HTML代码进行过滤或转换.  [漏洞形式]  这里所说的形式,实际上是指CG

从开发角度浅谈CSRF攻击及防御

  什么是CSRF CSRF可以叫做(跨站请求伪造),咱们可以这样子理解CSRF,攻击者可以利用你的身份你的名义去发送(请求)一段恶意的请求,从而导致可以利用你的账号(名义)去--购买商品.发邮件,恶意的去消耗账户资源,导致的一些列恶意行为.CSRF可以简单分为Get型和Post型两种. Get型CSRF: 看到这个名字,很明显是发送GET请求导致的.我这里简单的说一下:GET型的CSRF利用非常简单,通常只要发送一段HTTP请求.简单的说,如果一个网站某个地方的功能,比如(用户修改自己邮箱)是

一款不错的asp木马 黑色界面_木马相关

<% Server.ScriptTimeout=999999999 Response.Buffer =true On Error Resume Next UserPass="643617"                           '密码 mName="BY:.尐飛"           '后门名字 Copyright="注:请勿用于非法用途,否则后果作者概不负责"       '版权 Server.ScriptTimeout=9

如何防范ASP木马_木马相关

修改三个组件来达到防asp木马攻击.FileSystemObject组件---对文件进行常规操作.WScript.Shell组件---可以调用系统内核运行DOS命令.Shell.Application组件--可以调用系统内核运行DOS命令. 一.使用FileSystemObject组件 1.可以通过修改注册表,将此组件改名,来防止此类木马的危害. HKEY_CLASSES_ROOT\Scripting.FileSystemObject\改名为其它的名字,如:改为FileSystemObject_

一个查ASP木马的小东东_木马相关

关于查ASP木马的程序,记得半年前在八进制发了一个测试版(具体的URL:http://forum.eviloctal.com/read-htm-tid-19665.html),得到很多朋友的指导,学到了很多东西,非常感谢他们.现在我发的这个升级版,修补了以前的bug,加入了对一些组件写文件函数的检测,更加趋于完美了,个人认为想绕过去有点难度哦. 这回的默认密码是security 当然啦,哈哈,lake2"比武招亲",欢迎各位朋友提出绕过检测的马马来,一经证实,lake2将把我自己写的某