存储型XSS:
输入的恶意代码会存到网站的数据库里,具有长久性
同源策略(Cookie是共用的):
同协议、同端口、同域名/IP
窃取Cookie流程:
读取Cookie:document.Cookie
发送Cookie:ajax异步传输(不刷新当前页面)
当然,这么搞的话,需要一点条件,你的前端技术得好,而且还需要有一个公网IP,所以前辈们搞了一个XSS平台
XSS平台:集成了XSS攻击代码和接收端的工具
在网上随便找一个XSS平台,或者你们可以自己搭建一个。找到之后,注册登录,点击我的项目、创建,名称和描述你们自己发挥,点击下一步,然后就是选择模块,基本上默认模块就够用了,然后点击下一步,就会生成一段代码,下滑到最下面,我们会看到一串JS代码,将这个代码插入到你认为存在XSS的地方,就能偷到Cookie了
存储型XSS测试方法:
见框就插:<img src='' onerror=alert(1) />
在留言板、上传文件的文件名、或者在注册的时候、报错信息之类的,都可以插
当然,插的时候要注意闭合,不然会把页面插崩
接下来进入靶场,这里使用的是FineCMS 5.3.0版本
这个CMS会记录错误日志,假如我们访问一个不存在的页面,他就会记录下来,这个c=后面的内容,我们是可以控制的,那么我们是不是可以在这里打一个XSS呢
我们输入c=hello&m=<script>alert(1)</script>,然后就会出现弹窗
接下来就是利用XSS平台生成的代码,直接插进去,然后等待管理员访问,就能窃取到他的Cookie
打到Cookie之后,我们就可以进入后台,看到后台记录的错误日志了
DOM型XSS:
DOM-XSS漏洞是基于文档对象模型的一种漏洞
DOM:是一个沟通的渠道,和DOM沟通可以控制浏览器,核心是JS去操纵浏览器,它是一个与平台、编程语言无关的接口,它允许程序或脚本动态地访问和更新网页内容、结构和样式,处理后的结果能够成为显示页面的一部分
调用DOM:
document.cookie 读取当前页面的Cookie
document.lastmodified 获取当前页面的最后修改时间(识别伪静态)
document.write 向文档写入HTML或者JS代码(DOM XSS常见的存在形式)
document.domain 获取当前页面域名
网页一般分为动态、静态、伪静态
我们打开一个DOMXSS的HTML页面,查看页面源码
indexOf() 可返回某个指定的字符串值在字符串中首次出现的位置
unescape() 对通过escape()编码的字符串进行解码
substring() 提取字符串中介于指定下标两者之间的字符
我们直接输入?name=<script>alert(1)<script>,页面就会弹窗,以后寻找DOMxss就可以随便输入一些东西,然后查看网页源代码,搜索有没有document.write(,如果有的话,就可能存在XSS
我们再打开一个HTML页面查看网页源代码
可以看到有一个表单标签,onclick,当点击的时候触发
function 自定义一个函数
document.getElementById("zkaq") 定位id为zkaq的地方
innerHTML= Hi 将读取到的内容替换为Hi
我们输入?name=<img src="#" onerror=alert(1) />,就能弹窗了
我们进入第三个HTML页面,查看网页源代码
location.hash 用来获取或设置页面的标签值,获取描点后的值
# 描点 ,点击某个东西,就会跳到指定的地方,和目录差不多
location.hash.substr(1) 获取描点的值,从第二位开始取
eval() 将字符串当做代码执行
我们输入#alert(1),页面就会弹窗
以上就是典型的DOMXSS
document.write(支持Native编码)
innerHTML
eval
XSS防御:
1、过滤法(过滤输入、过滤输出)
2、转义法(HTML实体化)
3、开启http-only(禁止JS读取Cookie)
http-only绕过:IE浏览器访问或者找到一个能输出cookie的点