一般这种XSS
多出现在APP
、微信小程序
当中,其原理是,服务器未控制返回包中的Content-Type
,导致本来是JSON
格式的数据,会用默认的html
来解析
首先我发布了一条评论,评论的内容为<svg .....>
接下来调用接口来查询发布的评论,可以发现返回的是JSON
数据,而Content-Type
却是text/html
,导致浏览器会解析数据中的标签
而服务器后端使用的是Request
来接收数据的,所以可以把POST
换为GET
,两个缺陷组合在一起也就导致了XSS
对于这种XSS
一般是有一个就有一串,如果返回的数据可控,那么每一个接口都可以是一个XSS
的触发点
第一个例子,在查询框中由于没有对双引号进行转义所以存在反射型XSS
多次测试后发现onload、onclick、onfocus
等一些常用的属性都被WAF
禁了
只能祭出我的绕WAF
万能payload <details open ontoggle=testdemo>
使用ontoggle
属性能绕过WAF
,但是属性的值被转换为大写了,之前说过使用HTML实体编码
可以绕过
将alert(1)
转换为HTML实体编码 alert(1)
转换编码后还是被检测了
这种很好绕,只要将其中一个字符的HTML编码改为�xx
格式WAF
就检测不出来了
第二个例子,跟第一个例子如出一辙,都是没有在输入框对双引号进行转义
WAF
同样也是过滤了onload onclick onfocus
等一些常用属性,这次连我的绕WAF万能payload
都给过滤了
没办法,那只能拿出我的第二个payload <input type=submit formaction=javascript:alert`1`>
还是没有绕过去,因为WAF
还过滤了javascript:
跟第一个例子一样,使用HTML实体编码
将javascript:
转换为javascript:
XSS
绕WAF
的关键就是绕过被禁用的属性,平时可以去收集一点冷门的属性,只要绕过被禁用的属性,一般的WAF
就拦不住你了