一次XSS测试经历
记一次input标签中的xss测试,测试步骤如下~ 逃出闭合符号
如下所示,可以闭合双引号,但是闭合标签的时候会被实体编码掉,该显示位位于input中,所以需要在input标签中形成xss
寻找能在input标签中形成xss的payload
<input onmouseover="alert(1)"/><input onclick="alert(1)"/><input onfocus="alert(1)"/>
输入以上payload后发现均会被过滤掉,结果如下图所示:
FUZZ
1.双写
进行双写绕过的时候,发现直接把
”onmouseover=”以及”onmouseover=”前面的字母给直接清除了,但是并没有清除掉双引号,所以我猜测应该是用的正则匹配的字母。
2.FUZZ特殊符号
在特殊符号中不断的测试,发现“as+onmouseover=a” 会被直接清除掉只剩下一个“a”,但是as+aonmouseover=a”,则保留下了“asa”,直接把前后的内容拼接上了。
3.再次双写
发现再次双写还是不行,又被清除了;
这时候猜想有两种可能:
1)循环过滤:直接采用循环的方式把内容过滤到没有危险字符了才会进入下一个处理流程
2)多次过滤: 非循环过滤,只是人工写的进行了2次或者2次以上的过滤操作
4.三次拼写
发现输入三次拼写的时候,成功的绕过了他的过滤,得到了我们想要的输出:“onmouseover=”(所以应该只是写了两次过滤)
5.写出完整的payload
"o+aon+aonmouseover=mouseover=nmouseover="alert`1`
一开始我输入的alert(1),但是发现会被过滤掉,所以选择了alert`1`
6.更新触发方式
这样的payload需要人为的去点击才能触发,所以后续更新了一下触发方式,使用“onfocus=“属性加 “autofocus“可以自动触发聚焦,完成xss攻击
"autofocus+onf+aonf+ aonfocus=ocus=ocus="alert`1`" a="
修复建议
1.采用循环过滤的方式过滤危险方法名
2.或者过滤双引号