Lab12: Reflected DOM XSS
老常客搜索功能,随意搜索时,发现靶场使用异步请求查询搜索结果,在请求成功后,将响应内容放入eval函数中,赋值给searchResultObj变量。此处响应内容为json格式。
构思闭合json的payload为"}alert(123),发现为成功执行。
按照上面的思路闭合了json,未进行连接字符串及后续}"会让语句报错,调整payload为"};alert(123)//,发现还是为执行。观察响应内容时,发现对双引号进行转移了。
对双引号进行逃逸处理,调整payload为\"};alert(123)//。成功触发弹窗
此靶场涉及几个知识点,详细如下:
1、eval函数中的所有内容都会被当作javascript代码进行执行。
2、js代码中语句以分号结尾。
2、查看官方payload,\"}-alert(1)//。js代码中字符串与函数用运算符进行连接时,函数任然会被执行。
特别说明:测试时需多观察请求及响应内容,本次测试开始,一直盯着代码分析,查看官方payload时,才发现要进行闭合json及转移了双引号。
Lab13: Stored DOM XSS
还是那个留言功能,按照之前思路进行测试。
查看源代码,还是会发起异步请求所有评论内容,并且利用JS插入到DOM树中,利用escapeHTML函数对尖括号进行替换。初次分析暂未看出问题。
查看官方payload,<><img src=1 οnerrοr=alert(1)>。replace函数对匹配到的第一个结果进行处理,后续匹配值不会进行处理。
插入payload为<><script>alert(123)</script>,插入成功,并未触发弹窗。猜测可能对script标签进行限制。
在此插入paylaod为:<><img src=1 οnerrοr=alert(123)>,成功弹窗
需注意点:
replace函数替换仅替换第一次匹配结果,因此测试时可以进行双写绕过。
Lab14: Reflected XSS into HTML context with most tags and attributes blocked
直接搜索<img src=1 οnerrοr=alert(1)>,提示该标签不被允许。猜测后端对标签进行检测,需逐个尝试被允许的标签。
发现body标签可以使用,直接搜索<body οnlοad=alert(123)>123</body>,提示属性不被允许。此处waf对标签及事件属性进行过滤。
通过逐个尝试发现body标签的onresize事件未被过滤,onresize在修改该标签元素时触发。
起初payload为:</h1><body width="100px"><body οnresize=alert(123)width="200px">123</body></body>。思路是通过多个body标签改变文档的宽度,发现并未触发。偶尔打开审查元素时,触发onresize事件,成功弹窗。
官方截图思路为iframe标签src加载搜索URL,然后利用οnlοad="this.style.width='100px'",修改当前窗口宽度触发onresize事件。根据官方给出payload即可成功通过该靶场。
此靶场意为爆破waf未过滤的标签及事件属性。
Lab15: Reflected XSS into HTML context with all tags blocked except custom ones
还是开局一个搜索框,直接测试<h1>123</h1>,提示该标签不被允许,被waf拦截。经测试现有标签均被过滤。
现有标签都被过滤时,可利用自定义标签,格式为<tag>value</tag>必须用尖括号包围,成对出现。自定义标签被html解析器识别。
payload为:<tag οnclick=alert(123) style="color:red">123</tag>,标签的事件及属性都被html解析器识别。点击标签后成功触发弹窗。
Lab16: Reflected XSS with some SVG markup allowed
经测试过滤了所有标签,仅svg及animatetransform标签可以被正常识别。
标签测试完后,尝试事件,大多也被禁止使用,只有onbegin被允许。
payload为<svg><animatetransform onbegin=alert(123) />,成功弹窗。