XSS
自己测试的时候要意识到Chrome,IE这些浏览器都自带一个XSS的过滤,做题或者测试建议用火狐
XSS漏洞发生在用户输入的数据未经处理就放入前端JS代码的情况下,常见的XSS漏洞有反射型XSS和储存型XSS
简单无过滤
直接闭合一下括号引号就可以了,XSS漏洞可以直接查源码看引号括号标签怎么闭合,比较好修改。
今天的发现:
- <input>标签未闭合的时候好像不能在里面继续加标签
- 在<input>标签中可以通过事件(onclick,onmousemove等)来触发JS函数
前端干扰
设置了输入长度限制,按钮按不下去什么的,直接前端改代码就可以了
<>被转义
这种情况直接审查元素有时候看不出来,但是你如果查看页面源码就可以看到尖括号是否被转义。
通常绕过方法有闭合引号直接在当前标签内添加事件来触发。
也可以试试有没有其他的无过滤参数,比如下拉框内容抓包修改进行注入
“被转义
有的时候可以试试加一个空格来分隔属性,偶尔有效
JS伪协议
href定义的超链接可以执行JS代码,如<a href="alert(1);">
utf-7编码绕过
好像现在只有IE还有这个漏洞,别的浏览器都修好了
双写绕过
XSS在注入的时候也是后台代码进行分析,这个绕过和SQL注入也很像
实体编码绕过
&#xx;为HTML的实体编码,部分特殊符号被实体编码表示
但也可以用实体编码表示某些正常字符,绕过检测
添加制表符绕过
可用&NewLine代替空格
使用%09,	(有分号)分隔字符串绕过。
当数据以get方式传递时,%09可使用,使用后者会导致&作为元素之间的分隔符导致截断,后者可将&#替换为%26%23后使用
当数据以post方式传递时,	可使用,使用前者在数据post出去后会进行url编码为%2509,传入后只能解码为%09,无法绕过,在bp中抓包添加%09也可
get传参时不会对%进行再次编码,且存在部分特殊符号& #
不被编码,存在特殊意义,可以将其编码输入将其作为无特殊意义字符传入
post传参时会对%进行再次编码
HTML的这个编码好像只能在字符串(值)中生效,不能用来直接分隔像onclick,onmousemove这些函数上
若无引号进行使用,%09会使值产生截断被解析为两个元素
但是	不会产生问题
切记:%09无引号情况下会导致空格产生截断!!!
原因
%09是url编码,	为实体编码,url编码在数据发送至后台时进行转码,在引号闭合的情况下,%09被作为内部字符串处理,成为一个空格;在引号未闭合的情况下,成为制表符,使得内容被解析为两个元素。	为实体编码,在浏览器最后输出时被解析,然后被去除
内联标签
<iframe></iframe>,定义一个内联标签,内部可使用scr=定义链接
例:<iframe src="javas	cript:alert(document.domain)">
可代替<a>标签
IE特性
老版本IE才具有的古老漏洞
`解析为’
expression表达式
可用在css下执行js语句expression(alert(document.domain));
注释符绕过
/**/用注释符隔断字符阻止匹配,但不影响语句正常执行
xss和实体编码的关系
浏览器先解析HTML生成DOM树,然后解析CSS,结合,渲染
实体编码被转换成字符是在DOM树生成之后的,但DOM树生成完成后各节点以固定,此时被解析出来的<>无法再次形成新的节点,但实体编码解析后生成的js代码仍能正常解析
一篇文章
https://www.cnblogs.com/escape-w/p/10162831.html