xss绕waf的小trick

0x00

在翻某SRC的js文件的时候,发现了GET参数可控;情况大致如下

<script>
...
    const order = 'microfan2'
	const type = 'microfan1'
...
</script>

经过测试发现网站存在WAF,以及后端会对传入的<> ""做HTML编码;但并不会对'()做编码处理。此处的数据域在<script>标签内,感觉有戏。

0x01

xss本质属于注入漏洞;因此围绕着的核心思想就是:逃出数据域,进入逻辑域。

经过多次尝试发现,虽然WAF并不会对()''做编码处理;但是会对其做匹配检测。如果一段payload中存在闭合的()则会对其进行拦截;而)(却不会拦截

0x02

成功的payload

/index.php?type=*/1);%27&order=%27;alert(1/*

response

<script>	
	const gift_order = '';
	alert(1/*'
	const gift_type = '*/);''
</script>

其中的关键点在于:使用多行注释、分号、单引号等使得逃离数据域成功执行弹窗~。分号的作用是让JavaScript解释器能够识别独立的语句。

最后成功弹窗

由于重重限制,最终也就仅能弹个窗;不能进行下一步有效的利用;但是绕waf的过程还是很有意思的~