常见web漏洞学习之xss学习
原理
跨站脚本攻击,就是将恶意代码嵌入到前端js代码中(反射型,DOM型)或是数据库中(存储型)当用户点击或访问就会触发xss代码执行,盗取用户cookies或session
要注意的是可能存在浏览器的影响,会阻止js代码执行
测试流程
- 找到注入点
- 输入一组“特殊字符+唯一标识字符”,查看返回结果
- 源码找到唯一标识字符,判断是否可以构造闭合
- 结合绕过方式,执行
分类
反射型,存储型,DOM型
简单来说,反射型就是构造的恶意代码由于过滤不严格,使得嵌入到前端js页面中进行执行
玩玩pikachu靶场
反射型
输入长度被限制了,先将文本框的最大限制20改大些

以get方式提交的,可以直接在url中看到提交的xss

who is ,i don't care!

看一下源码

存储型
payload
<script>alert(document.cookie)</script>


其他用户访问也会触发
kali

区别
反射型数据交互只和前端js代码,没有进行存储,而存储型则是被写入到了后端,其他用户访问也会中招
DOM型
那什么是dom呢?简单来说dom就是通过层次分明的结果组织,来展示HTML标签抽象成代码里的对象,可以管理文档,增删改查规则,是一个HTML标准接口
在网站页面中有许多页面的元素,当页面到达浏览器时浏览器会为页面创建一个顶级的Document object文档对象,接着生成各个子文档对象,每个页面元素对应一个文档对象,每个文档对象包含属性、方法和事件。可以通过JS脚本对文档对象进行编辑从而修改页面的元素。也就是说,客户端的脚本程序可以通过DOM来动态修改页面内容,从客户端获取DOM中的数据并在本地执行。基于这个特性,就可以利用JS脚本来实现XSS漏洞的利用

而dom型xss用一个例子来讲就是,页面中的”下一页按钮”点击之后并没有url的改变也就是参数没变,而是通过HTML代码中的dom来执行的
输入特殊字符'<">666被过滤为666

查看源码

结合源码构造payload效果为点击弹窗
1 | <a href='#' onclick="alert('xss')">'>就让往事都随风,都随风吧</a> |
payload
#' onclick="alert('xss')">
点击'>就让往事都随风,都随风吧

绕过方式
大小写绕过
贴一段师傅源码
区分大小写过滤<script>标签
1 | //前端 1.html: |
嵌套<script>标签绕过
其他源码同上,加了一个i,不区分大小写过滤<script>标签
1 | $name=preg_replace("/<script> |
payload<scr<script>ipt>alert('hack')</scr</script>ipt>
过滤所有内容
其他源码同上
1 | $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] ); //过滤了<script及其之间的所有内容 |
虽然script标签不能使用了,但img、body等标签的事件或者 iframe 等标签的 src 注入恶意的 js 代码
payload<img src=1 οnerrοr=alert('hack')>
其他继续补充
利用手段
盗取cookie