Polaris CTF招新赛-WEB-小白向

张开发
2026/4/9 2:11:35 15 分钟阅读

分享文章

Polaris CTF招新赛-WEB-小白向
已经好久好久没有更新了也算是完成了从0基础到初步WEB手的蜕变WEB1.ezpollute分析源码是一个Node.js Express 网站1启动一个 Web 服务2提供一个接口 /api/config让用户提交 JSON 配置3提供一个接口 /api/status去启动一个新的 node 子进程检查“Node.js 是否正常运行”开发者显然知道 __proto__ 常常和原型污染有关所以他写了个“黑名单”如果发现传进来的键名是 __proto__就拒绝。不过 in 不只检查对象自己有没有这个属性还会检查它原型链上的属性。BUT没拦 constructor.prototype。由于 key in target 会沿原型链找config 上虽然没有自有属性 constructor但它能从 Object.prototype 继承到所以可以一路递归到 Object.prototype形成原型污染。构造payload拿下XMCTF{9fa42f10-38fa-4963-b4ca-a21beabee11e}2.ez_python分析app.py, Flask框架考点是 Python 对象属性递归合并导致的任意属性覆盖POST / 会在 request.data 非空时执行 merge(json.loads(request.data), instance)- merge() 可递归修改 instance.config.filename- GET /read 会执行 open(instance.config.filename).read()形成任意文件读取3、Broken Trust/api/profile 存在未鉴权 SQL 注入可直接泄露管理员资料。用该 UID 登录后可访问 /api/admin?actionbackupfile...直接拿到flag先随便注册一个知道了 只有管理员可以拿到权限Dirsearch扫描发现/api/profileBP改个抓包方式打出管理员UID基本搞定了用管理员UID登录路径不对想到路径穿越慢慢试试出来直接flag4.only-real1F12提示了账号密码登入进去之后f12把disabled全部删除2看看能不能进行JWT伪造JSON Web TokenJWTJSON Web Token伪造是 Web 安全中非常经典且重要的一个考点。在 CTF 的 Web 方向中它通常是你从“普通访客”跨越到“管理员”并最终拿到 Flag 的关键钥匙。我们可以把 JWT 想象成一张“电子通行证”服务器一旦签发给你之后就不再查询数据库而是直接通过查验这张通行证上的印章签名来确认你的身份。JWT 伪造的核心原理就是利用服务端验证机制的漏洞自己伪造出一枚能够以假乱真的“印章”从而随意篡改通行证上的身份信息。为了理解它是怎么被伪造的我们需要先拆解这张通行证的结构。JWT的基础结构一个标准的 JWT 看起来是一串由两个点 . 分隔的长字符串例如 xxxxx.yyyyy.zzzzz它由三部分组成每部分都经过了 Base64Url 编码Header头部声明了这块 Token 的类型JWT和所使用的签名算法比如 HS256 或 RS256。JSON{ alg: HS256, typ: JWT }Payload负载存放实际的有效信息比如你的用户名、角色、过期时间等。JSON{ user: guest, role: user }Signature签名这是防伪的关键。服务器用一个只有它自己知道的密钥Secret按照 Header 里指定的算法对 Header 和 Payload 进行加密计算得出的结果。BP改jwt发包发现改useradmin回显未登录algnonesub: 0全部回显”无效cookie”遂,JWT伪造失败Wait学习大佬的wp发现可能是一个弱密钥(正好学到利用jwtcracker工具可以去csdn上看看很简单一学就会不过爆破的时间有点长最好问问GPT格式是啥能省好多时间)芜湖爆出来了cdef,这题其实直接dirsearch直接能扫出来可能考点在only_real_revenge吧我们那题再见5.only_real_revenge同上一题思路一样用图片马尝尝咸淡抓包再改回php同时把伪造JWT传上访问直接出flag啦6.DXT本体环境是一个“MCP 工具包管理后台”它平时做的事是你上传一个 .dxt 包它解开这个包读取里面的 manifest.json相当于说明书按说明书里的内容把这个 MCP server 启动起来然后问它“你有什么工具可以给我展示”在MCP (Model Context Protocol)的语境下.dxt 文件代表的是Desktop Extension桌面扩展。简单来说它就像是给 AI 助手如 Claude Desktop准备的“一键安装包”。1. .dxt 文件到底是什么本质上一个 .dxt 文件就是一个压缩包ZIP 格式它把一个 MCP 服务器运行所需的所有东西都打包在了一起。它的结构通常包含manifest.json这是整个扩展的“大脑”告诉 AI 这个工具有什么功能、叫什么名字、需要怎么启动。服务器代码比如 Node.js 或 Python 编写的工具逻辑。依赖项运行这些代码需要的库文件。2. 它在 MCP 里面是用来做什么的在没有 .dxt 之前如果你想给你的 Claude 增加一个“搜索本地文件”或者“操作数据库”的功能即安装一个 MCP Server你通常需要安装 Node.js 或 Python 环境。手动修改复杂的 config.json 配置文件。处理各种环境变量和路径问题。有了 .dxt 文件后一键安装你只需要把这个 .dxt 文件拖进支持 MCP 的客户端比如 Claude Desktop它就自动装好了。封装环境它解决了“在我电脑上能跑在你那里报错”的问题把环境依赖都打包好了。自动配置它会自动在后台帮你写好配置不需要你手动去翻文件夹改 JSON。3. 注意它正在变身虽然你现在看到的是 .dxt但根据最新的标准这个格式正在演变为.mcpb (MCP Bundle)。它们的作用是一样的都是为了让非技术用户也能像安装 Chrome 插件一样轻松地给 AI 增加新技能。总结一下如果你正在折腾 MCP 相关的开发.dxt 就是你的发布工具如果你只是使用者它就是你的安装包。这道题真的学到好多用dirsearch扫描1发现网站的后端很可能是 Go 语言写的因为pprof是GO程序常见的性能分析/调试工具简单说开发者本来是拿它来看程序占了多少内存看程序开了多少并发线程看程序运行时在干什么2/debug/pprof/heap这个是看内存使用情况的。/debug/pprof/trace这个是更细的运行轨迹。/health、/ping这两个一般是健康检查接口。/metrics这个一般是监控指标接口。很多程序会把请求数量响应时间内存占用CPU 使用情况这种数据放在这里给 Prometheus 之类的监控系统抓取。/static/这一般表示静态资源目录比如图片CSSJS前端文件2状态码:200-访问成功301-跳转403-禁止访问404-资源不存在405-方法不允许3按照GPT给的优先级先访问/debug/pprofallocs历史内存分配情况可以理解成过去内存都分给谁用了。heap当前还活着的内存对象就是现在内存主要被谁占着。goroutine当前所有 goroutine 的堆栈信息也就是程序当前“并发任务”的运行现场。threadcreate程序创建系统线程的情况可以理解成程序开过哪些更底层的线程。block看哪些地方发生了阻塞比如某些操作卡住了。mutex看锁竞争情况就是多个地方抢同一把锁。trace程序运行轨迹像更细的运行录像。cmdline程序启动命令也就是这个程序启动时是怎么运行起来的。symbol把地址映射成函数名偏底层一般是给分析工具用的。参考佬的WP分析前端源码这页前端本质上就是一个“上传包 → 查看服务列表 → 启停/删除服务 → 查看服务详情”的管理面板真正有价值的攻击面几乎都集中在它调用的那几个 /api/* 接口上而不是页面样式本身。前端唯一的“文件合法性检查”就是看文件名后缀是不是 .dxt然后就是codex帮着写的exp和伪造的.dxt文件了就做出来这么多题这几天也参加了几个出色的CTF战队的面试在AGENT时代想要担任一名合格的WEB手 还是要有比较坚实的基础让自己变得更强和让AGENT更强并不冲突加油

更多文章