xss的原理
跨站脚本攻击XSS(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS。恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用户的目的。XSS攻击针对的是用户层面的攻击!
xss的分类
反射性xss
反射型XSS 是非持久性、参数型的跨站脚本。反射型XSS 的JS 代码在Web 应用的参数(变量)中,如搜索框的反射型XSS。在搜索框中,提交PoC[scriptalert(/xss/)/script],点击搜索,即可触发反射型XSS。注意到,我们提交的poc 会出现在search.php 页面的keywords 参数中。
例题1


很明显输入的值被传到h标签里了

例题2


input表单的value得到值提交给h标签

可以看到<>在input中是正常的,到h标签中就被转义了,所以我们只能从input中想办法
写">闭合input,再写恶意代码,就OK了

例题3

aaa传值给了submit


发现input也转义<>,


例题4

将<>直接转换成空格
还可以用on事件,

例题5

不可以用on事件

看源代码,确实过滤了,但是input却没有转义<>

构建一个a标签
例题6

替换了href


用大写的HREF就绕过了

用属性大写onfocus也是可以绕过的
例题7

替换很多变成空格

通过过滤关键字中间插入关键字的方式成功绕过
例题8

限制条件更加多,将"也过滤了

input value的值传给a标签,所以只要进行html实体编码就可以绕过input的限制,传给a标签的href属性,href在解析前html实体编码刚好解码

将javascript:alert(1)进行html实体编码
例题9

在8的基础上加上必须有http://的字段,所以在最末尾加上//http://就OK了

例题10

给了个值keyword,但是用函数过滤了<>,所以找input,只有t_sort有接受值,但是它hidden,所以我写了type覆盖了后面的。

存储型xss
存储型XSS 是持久性跨站脚本。持久性体现在XSS 代码不是在某个参数(变量)中,而是写进数据库或文件等可以永久保存数据的介质中。存储型XSS 通常发生在留言板等地方。我们在留言板位置留言,将恶意代码写进数据库中。此时,我们只完成了第一步,将恶意代码写入数据库。因为XSS 使用的JS 代码,JS 代码的运行环境是浏览器,所以需要浏览器从服务器载入恶意的XSS 代码,才能真正触发XSS。此时,需要我们模拟网站后台管理员的身份,查看留言。
例题1

首先,该提交能入库

尝试在评论区评论

发现实体编码转义,标签变成普通字符

输入两次评论后发现,
这里我们可以看到并没有完成闭合,但是评论回显是倒序出现的,同时中间夹着我们本机的IP地址,这个IP我们是否可以进行利用,从而配合我们的评论完成XSS注入。其实是可以的,这里我们需要用到X-FORWARDED-FOR来进行HTTP请求端真实IP伪造,通过这个字段将IP地址进行伪造为我们使用的payload。 思路确定了,我们使用多次注入的方式,同测试一样完成我们的闭合,即:
正常payload:
<script>alert(11111)</script>
达成的效果(将中间的代码注释掉):
<script>/**/alert(11111)/**/</script>
多次注入:
<script>/*
*/alert(11111)/*
*/</script>
将payload多次拆分,使用两条留言完成注入:
第一次:
内容:*/alert(11111)
IP伪造为:X-FORWARDED-FOR: */</script>
第二次:
内容:随意都行
IP伪造为:X-FORWARDED-FOR: <script>/*
然后使用Burp进行抓包改包(伪造IP):
第一次

第二次

闭环形成,就等管理员审核
用xss hunter获取信息


http://172.16.100.1:3000/hook.js换成hunter提供的网址
DOM型XSS
DOM XSS 比较特殊。owasp 关于DOM 型号XSS 的定义是基于DOM 的XSS 是一种XSS 攻击,其中攻击
的payload由于修改受害者浏览器页面的DOM 树而执行的。其特殊的地方就是payload 在浏览器本地修
改DOM 树而执行, 并不会传到服务器上,这也就使得DOM XSS 比较难以检测。
例题1
查看源代码,发现js源代码
点进去
发现可以利用dom破坏的点
可以利用二层集合的关系覆盖window.defaultAvatar的原始数据
当再次输入新的没有头像的评论时就开始触发我们的xss
第二次随意评论