Lab7: Reflected XSS into attribute with angle brackets HTML-encoded
访问此靶场,存在检索功能,按照正常闭合标签思路,进行测试发现对内容进行了HTML实体化转换,发现双引号未进行处理,可尝试利用事件触发。
payload: 123" οnclick=alert(123) x=",成功触发alert,发现并未通过。
查看提示发现靶场需使用onmouseover事件,成功通过。
Lab8: Stored XSS into anchor href attribute with double quotes HTML-encoded
还是之前的留言功能,按照之前的思路,直接在内容、姓名处注入payload,邮箱和网站随意填写并提交。
审查元素发现内容和姓名提交的内容被HTML实体化转移,这里网站website直接拼入a标签的href属性。可利用javascript伪协议,payload为javascript:alert(123)
提交后点击姓名,成功触发alert
Lab9: Reflected XSS into a JavaScript string with angle brackets HTML encoded
老常客搜索框,直接搜索h1标签。发现对其进行HTML实体化,审查元素时发现代码中有段script脚本。并且会将搜索内容赋值给JS脚本中的searchTherms变量。
直接将搜索内容放入script代码块中,可直接进行利用,构思payload为:123';alert(123)//。搜索该payload后直接成功触发alert。
Lab10: DOM XSS in document.write sink using source location.search inside a select element
靶场为商品列表,点击某一商品,页面只存在检查库存功能。审查元素发现会从URL中获取storeId参数值,利用document.write将其未处理的写入网页中。此处可造成 DOM XSS
在原有URL上加上&storeId=123,直接输出在页面上
构造payload,123</option><script>alert(123)</script>,成功触发。
Lab11: DOM XSS in AngularJS expression with angle brackets and double quotes HTML-encoded
还是搜索功能,经尝试输入都被HTML实体化,看提示和原文引入了AngularJS,因不了解,直接抄答案。
官方给出的payload:{{$on.constructor('alert(1)')()}},遇事不明直接上AI。
经解读,{{}}在AngularJS为插值表达式,$on为监听事件方法或者为当前对象, constructor()为javascript对象的构造函数属性。此处的个人理解为当前对象加载构造的时候便会触发alert。
在观察靶场提示和源代码,body标签中使用了ng-app指令,在AngularJS中,ng-app指令表示该标签内容的所有内容都会进行编译和执行。
结合payload及ng-app指令发现,可直接搜索payload,会自动插入到body中,payload就会被执行。
成功触发弹窗。审查元素时,看不了AngularJS表达式,查看源代码才能看到。