您的位置:首页 > 编程语言 > ASP

OWASP WebGoat---安全测试学习笔记(八)---跨站脚本攻击

2014-10-24 08:48 330 查看
跨站脚本攻击(Cross-Site Scripting (XSS) )

第一部分 XSS的知识

简介
Cross-Site Scripting (XSS) attacks are a type of injection, in which malicious scripts are injected into otherwise benign and trusted web sites. XSS attacks occur when an attacker uses a web application to send
malicious code, generally in the form of a browser side script, to a different end user. Flaws that allow these attacks to succeed are quite widespread and occur anywhere a web application uses input from a user within the output it generates without validating
or encoding it.

An attacker can use XSS to send a malicious script to an unsuspecting user. The end user’s browser has no way to know that the script should not be trusted, and will execute the script. Because it thinks the script came from
a trusted source, the malicious script can access any cookies, session tokens, or other sensitive information retained by the browser and used with that site. These scripts can even rewrite the content of the HTML page.

攻击者通过在页面链接中插入恶意代码,当受害者浏览该页面时就能够盗取用户信息。分类:持久型跨站(存储型)、非持久型(反射型)、基于DOM的
跨站。只有当受害者浏览该页面时才能触发恶意代码,所以这是一种被动的攻击方式。XSS几乎每个网站都存在,是一种热门的Web攻击手段。

反射型跨站:Web客户端使用服务端脚本生成的页面为用户提供数据时,若未经验证的用户数据被包含在页面中而未经HTML编码,客户端代码便能注入到动态
页面中。需要欺骗受害者去点击链接才能触发的是反射型的XSS。

存储型跨站:攻击者将攻击脚本上传到Web服务器,使得所有浏览该页面的用户都有信息泄漏的可能。存储型XSS的攻击代码是存储在服务器上的。如在论坛
发贴时插入的XSS就是持久型的,XSS存储在数据库中。

基于DOM的跨站:DOM是Document Object Model(文档对象模型)的缩写。是与浏览器、平台、语言无关的接口,可访问页面其他的标准组件。初浅的理解
可把DOM认为是JavaScript输出的页面,基于DOM的跨站脚本漏洞就是出现在JavaScript代码中的漏洞。

其他类型:XSF(Falsh XSS):基于Action Script 这部分没接触过,以后再补充。

原理
HTTP(Hypertext Transfer Protocol)的GET和POST方法:
GET方法:用于请求服务器发送某个资源。
POST方法:向服务器发送需要处理的数据(比如一个表单)。

XSS的行为方式(来自FREEBUF.COM的文章):XSS就是在页面执行你想要的JS
XSS的攻击流程:发现XSS漏洞-->构造攻击代码-->诱骗受害者点击-->盗取受害者的用户信息

技巧
1)反射型:
过程:攻击者发现存在反射XSS的URL-->根据注入点的环境构造XSS-->进行编码、缩短-->发送给受害者-->受害者打开后,执行XSS代码-->完成攻击者的目的。
漏洞查找的方法:使用工具直接扫描网站当然可以,但是好的漏洞往往是手工找到的,所以最好的办法还是手工。比如:找到一个input输入框,先输入"> 对
input输入框做闭合,然后看页面有没有出现源代码,若没有,再输入 < > " " / & ( ) 看页面过滤了哪些字符,根据过滤的字符,来构造XSS。

2)存储型:
存储型跨站将恶意代码保存到服务器端,比如数据库。而反射型只是在客户端运行。比如:在论坛发帖,将恶意代码保存到服务器数据库。所有浏览该帖的用户
都可能会被盗取用户信息(cookie之类)。漏洞的查找和反射型是类似的,例子以后再补充。

3)基于DOM的跨站:

DOM XSS是基于JS的,不需要与服务器端进行交互,且JS代码是可见的。故也可称其为基于JS本地漏洞的跨站。
漏洞查找:要做JS的分析,我没有什么经验,以后在补充。

工具

JSky:web安全测试工具,安全漏洞检测工具。
Safe3WVS:功能强大的网站扫描工具。可以扫描SQL注入点,扫描XSS跨站,扫描潜在漏洞、登录后台等功能。

Netsparker:SQL注入扫描工具。社区版提供基本的漏洞检测功能。
Wapiti:WEB应用程序漏洞检查工具。

第二部分 WebGoat课程主题

1.使用XSS钓鱼

在服务端对所有输入进行验证总是正确的做法。当用户输入非法HTTP响应时容易造成XSS。在XSS的帮助下,可以实现钓鱼工具或向某些页面中增加内容。

对于受害者来说很难发现该内容是否存在威胁。

课程的目标:

2.小实验:跨站脚本攻击

输入验证是一个很好的方法,尤其是验证那些以后将用做参数的操作系统命令、脚本和数据库查询的输入。尤为重要的是,这些内容将会永久的存放在那里。

应当禁止用户创建消息内容。用户的信息被检索时,可能导致其他用户加载一个不良的网页或不良的内容。当一个未经验证的用户的输入作为一个HTTP响应

时,XSS 攻击也可能会发生。在一个反射式XSS攻击中,攻击者会利用攻击脚本精心制作一个URL并通过将其发送到其他网站、电子邮件、或其他方式骗取

受害者点击它。

3.存储型XSS攻击

过滤所有用户输入是一个不错的做法,特别是那些后期会被用作 OS、脚本或数据库查询参数的输入。尤其是那些将要长期存储的内容。用户不能创建

非法的消息内容,例如:可以导致其他用户访问时载入非预期的页面或内容。

4.跨站请求伪造(CSRF)

跨站请求伪造是一种让受害者加载一个包含网页的图片的一种攻击手段。如下代码所示:

<img src="http://www.mybank.com/sendFunds.do?acctId=123456"/>


当受害者的浏览器试图打开这个页面时,它会使用指定的参数向 www.mybank.com 的transferFunds.do 页面发送请求。浏览器认为将会得到一个图片,

但实际上是一种资金转移功能。该请求将包括与网站相关的任何 cookies。因此,如果用户已经通过网站的身份验证,并有一个永久的 cookie,甚至是当前会话

的 cookie,网站将没有办法区分这是否是一个从合法用户发出的请求。通过这种方法,攻击者可以让受害者执行一些他们本来没打算执行的操作,如注销、采购

项目或者网站提供的任何其他功能。

5.绕过CSRF确认

通过多个请求绕过用户确认脚本命令。

6.绕过CSRF Token

跨站请求伪造攻击(CSRF/XSRF) 欺骗用户(那些已经获取了系统的信任)点击带有伪造请求的页面从而执行相关命令。基于 Token 的请求认证用于阻止此类

攻击者。该技术在请求发起页面插入Token。Token用于完成请求和并验证该操作不是通过脚本执行的。OWASP 提供的CSRF Guard 使用该技术以阻止CSRF攻击。

7.HTTP only测试

为了降低跨站脚本攻击的威胁,微软引入了新的 cookie 属性字段:“HTTPOnly”。一旦该字段被标记,浏览器将禁止客户端脚本访问 Cookie。

8.跨站跟踪攻击

课程目标:执行跨站跟踪攻击。

参考:

《WEB安全测试》、《WebGoat v2.2技术文档》、《OWASP Testing Guide v3.0》、《HTTP权威指南》

XSS和字符集的那些事儿:http://drops.wooyun.org/papers/1327

OWASP XSS View:https://www.owasp.org/index.php/Cross-site_Scripting_%28XSS%29



XSS的原理分析与解剖(第一篇):http://www.freebuf.com/articles/web/40520.html

XSS的原理分析与解剖(第二篇):http://www.freebuf.com/articles/web/42727.html

XSS的原理分析与解剖(第三篇--技巧):http://www.freebuf.com/articles/44481.html

XSS编码剖析:http://www.freebuf.com/articles/web/43285.html

使用Xenotix_XSS框架进行自动化安全测试:http://www.freebuf.com/tools/42722.html

注:

网上的资料不少。做为测试人员,以实战为目的,也就是在实际工作中应用,解决问题。最后形成一种安全解决方案,它能够成为测试员的一种价值体现。

文章为两部分,一部分是XSS的原理、特性、技巧、工具。另一部分是WebGoat的课程内容和练习。为什么要加WebGoat这部分呢?虽然加了WebGoat的课程

使得文章结构、组织显得很乱,但是却必须要有这部分。因为,一开始学习安全测试,并没有什么头绪,不知道怎么开始,从哪里学起。WebGoat课程给了我

很好的示范,而且是java语言写的。所以看它的源代码更亲切,对我帮助也更大。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: