关于XSS攻击的基础学习
概述
XSS攻击即为跨站脚本攻击(Cross Site Scripting)
通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。
前端漏洞,受害者为前端用户
攻击原理
HTML是一种超文本标记语言,通过将一些字符特殊地对待来区别文本和标记,例如,小于符号(<)被看作是HTML标签的开始,<title>与</title>之间的字符是页面的标题等等。当动态页面中插入的内容含有这些特殊字符(如<)时,用户浏览器会将其误认为是插入了HTML标签,当这些HTML标签引入了一段JavaScript脚本时,这些脚本程序就将会在用户浏览器中执行。所以,当这些特殊字符不能被动态页面检查或检查出现失误时,就将会产生XSS漏洞。
特点
XSS相比于钓鱼网站危害更大
XSS具有以下特点:
①由于XSS攻击在用户当前使用的应用程序中执行,用户将会看到与其有关的个性化信息,如账户信息或“欢迎回来”消息,克隆的Web站点不会显示个性化信息。②通常,在钓鱼攻击中使用的克隆Web站点一经发现,就会立即被关闭。③许多浏览器与安全防护软件产品都内置钓鱼攻击过滤器,可阻止用户访问恶意的克隆站点。④如果客户访问一个克隆的Web网银站点,银行一般不承担责任。但是,如果攻击者通过银行应用程序中的XSS漏洞攻击了银行客户,则银行将不能简单地推卸责任。
类型
按攻击代码的工作方式分:
1.持久行跨站(存储型):
最直接的危害类型,跨站代码储存在服务器(数据库)
永久性储存
2.非持久型跨站(反射型):
反射型跨站脚本漏洞,最普遍的类型
一次性
3.DOM跨站(DOM XSS):
通过DOM操作前端代码输出时产生
一次性
基于DOM的XSS漏洞是指受害者端的网页脚本在修改本地页面DOM环境时未进行合理的处置,而使得攻击脚本被执行。在整个攻击过程中,服务器响应的页面并没有发生变化,引起客户端脚本执行结果差异的原因是对本地DOM的恶意篡改利用。
形成原因
XSS漏洞形成的主要原因是程序对于输入与输出没有做到严格的把控导致攻击脚本被当作有效代码执行
XSS漏洞测试流程
① 在目标上找输入点,比如查询接口、留言板
② 输入一组 “特殊字符(>,',"等)+唯一识别字符” ,点击提交后,查看返回源码,看后端返回的数据是否有处理
③ 通过搜索定位到唯一字符,结合唯一字符前后语法确定是否可以构造执行js的条件(构造闭合)
④ 提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞
常用XSS攻击手段与目的
1、盗用cookie,获取敏感信息。2、利用植入Flash,通过crossdomain权限设置进一步获取更高权限;或者利用Java等得到类似的操作。3、利用iframe、frame、XMLHttpRequest或上述Flash等方式,以(被攻击)用户的身份执行一些管理动作,或执行一些一般的如发微博、加好友、发私信等操作。4、利用可被攻击的域受到其他域信任的特点,以受信任来源的身份请求一些平时不允许的操作,如进行不当的投票活动。5、在访问量极大的一些页面上的XSS可以攻击一些小型网站,实现DDoS攻击的效果。
XSS基础过滤
1.抓包重新插入,或修改前端HTML代码
2.修改大小写,若正则匹配只匹配小写,则可绕过
3.双写(拼凑),例如<scri<script>pt>alert(111)</scri</script>pt>,后台即使过滤script,也有只过滤一次的可能
4.注释干扰,例如<scri<!--test-->pt>alert(111)</sc<!--test-->ript>,加上注释后,有绕过后台过滤机制的可能
5.编码,例 <img src=x onerror=alert('xss')> 经过HTML编码为: <img src=x onerror=alert('xss')>
练习
反射型xss(get or post)
先判断有无过滤,然后写入xss代码
示例:
<script>alert("BEACON")</script>
存储型xss
寻找输入点,然后进行xss攻击
DOM型XSS
例一:

我们先通过 "> 闭合了herf标签,然后再插入相应的payload
根据提示构造payload '><img src="#" onmouseover="alert('xss')">
例二:

与前面不同的是,前面通过 getElementById 获取到了标签 Id 为 text的内容赋值给str
然后又把 str 的内容通过字符串拼接的方式写到了 a 标签的 href 属性中,a标签会写到 Id 为 dom的 div 标签中
这里则是定义了一个domxss函数
利用 window.location.search 获取浏览器中URL的内容,然后赋值给 str
然后经过URL解码和字符串分隔,取出URL中的参数内容
再把 “+” 替换为 “ ”(空格),赋值给 xss
最后把 xss 拼接到 a 标签中,然后写到 Id 为 dom 的 div 标签中
跟前面的DOM不同的是,它的输入是从浏览器的URL中获取的

浙公网安备 33010602011771号