XSS跨站之原理分类及攻击手法
XSS跨站漏洞产生的原理
往浏览器页面中插入恶意的HTML代码,比如说js、css、html标签等,当用户浏览该页面时,嵌入其中的恶意代码会执行,达到攻击用户的目的,比如说获取用户浏览器信息等。
XSS漏洞攻击的危害
- 盗取各类用户[账号,如机器登录帐号、用户网银帐号、各类管理员帐号
- 控制企业数据,包括读取、篡改、添加、删除企业敏感数据的能力
- 盗窃企业重要的具有商业价值的资料
- 非法转账
- 强制发送电子邮件
- 网站挂马
- 控制受害者机器向其它网站发起攻击(重定向语句)
- 窃取cookie的sessionid,冒充登录。
XSS攻击利用到最大就需要自己有台服务器用于窃取信息,还要利用一点社工,骗取别人点击恶意的链接。
XSS跨站漏洞执行的代码是js代码,产生层面是前端,有关的函数是一些输出函数(alert、print等)
XSS跨站漏洞分类:反射,存储,DOM
跨站测试代码:
1 | #' onclick="alert(2)"> |
使用后端来运行代码(反射型和存储型),得手动分析来测试是什么问题
XSS漏洞的分类
1.DOM型(不经过服务器,前端js代码的利用):
DOM型是针对前端代码的(有的页面跳转不是在url执行,是在HTML中执行),可以直接从源代码中发现存在XSS漏洞
DOM树
本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。其攻击过程如下所示:
Alice给Bob发送一个恶意构造了Web的URL。
Bob点击并查看了这个URL。
恶意页面中的JavaScript打开一个具有漏洞的HTML页面并将其安装在Bob电脑上。
具有漏洞的HTML页面包含了在Bob电脑本地域执行的JavaScript。
Alice的恶意脚本可以在Bob的电脑上执行Bob所持有的权限下的命令。
2.反射型:
反射型XSS有get和post型,攻击产生一次,攻击的语句不会存储到对方的服务器
这种漏洞和类型A有些类似,不同的是Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。
其攻击过程如下:
Alice经常浏览某个网站,此网站为Bob所拥有。Bob的站点运行Alice使用用户名/密码进行登录,并存储敏感信息(比如银行帐户信息)。
Charly发现Bob的站点包含反射性的XSS漏洞。
Charly编写一个利用漏洞的URL,并将其冒充为来自Bob的邮件发送给Alice。
Alice在登录到Bob的站点后,浏览Charly提供的URL。
嵌入到URL中的恶意脚本在Alice的浏览器中执行,就像它直接来自Bob的服务器一样。此脚本盗窃敏感信息(授权、信用卡、帐号信息等)然后在Alice完全不知情的情况下将这些信息发送到Charly的Web站点。
3.存储型(长久型,危害最大):
存储型XSS,输入一行攻击脚本后,每次刷新页面都会攻击,攻击语句存储到对方的服务器了
该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。其攻击过程如下:
Bob拥有一个Web站点,该站点允许用户发布信息/浏览已发布的信息。
Charly注意到Bob的站点具有类型C的XSS漏洞。
Charly发布一个热点信息,吸引其它用户纷纷阅读。
Bob或者是任何的其他人如Alice浏览该信息,其会话cookies或者其它信息将被Charly盗走。
类型A直接威胁用户个体,而类型B和类型C所威胁的对象都是企业级Web应用。
1 | 反射型 |
绕过<script>
过滤
有的网站存在<script>
过滤
在html中,onload关键字就是一个事件,其它的所有标签都没有这个属性,但是Body标签的有的。但是有一定的局限性,如果onload事件在你的代码之前已经被处理了,就不会触发了
1 | <BODY onload="alert('XSS')"> |
不过还有Onerror事件处理,图片没有指定也就是出错了,就会触发onerror事件,引发XSS漏洞,没有用<script>
标签
1 | <IMG SRC="" onerror="alert('XSS')"> |
cookie session 用户凭据,通过凭据可以判断对方的身份信息
cookie 存储在本地,存活事件较长 小中型
session 会话 存储在服务器,存活时间较短 大型
session更安全,但是会占用服务器的资源,且实现起来较为麻烦
靶场实践
反射型xss(get)
存储型xss,每次刷新的时候都会弹窗