2024 第一届VCTF 纳新赛 Web方向 题解WP

news/2024/7/19 14:53:25 标签: Web安全, 网络安全, JS, VCTF, Java, 原型链污染

hackjs

题目描述:A baby oldjs, just warm up.

附件给源码

const express = require('express')
const fs = require('fs')
var bodyParser = require('body-parser');
const app = express()
app.use(bodyParser.urlencoded({
    extended: true
}));
app.use(bodyParser.json());

app.post('/plz', (req, res) => {

    venom = req.body.venom

    if (Object.keys(venom).length < 3 && venom.welcome == 159753) {
        try {
            if(venom.hasOwnProperty("text")){
                res.send(venom.text)
            }else{
                res.send("no text detected")
            }
        } catch {
            if (venom.text=="flag") {
                let flag=fs.readFileSync("/flag");
                res.send("Congratulations:"+flag);
            } else {
                res.end("Nothing here!")
            }
        }
    } else {
        res.end("happy game");
    }
})



app.get('/',
function(req, res, next) {
    res.send('<title>oldjs</title><a>Hack me plz</a><br><form action="/plz" method="POST">text:<input type="text" name="venom[text]" value="ezjs"><input type="submit" value="Hack"></form>  ');
});

app.listen(80, () => {
  console.log(`listening at port 80`)
}) 

开题

image-20240316135254032

点击hack进入/plz路由,代码不分析了,gpt都能看懂。

所有继承了 Object 的对象都会继承到 hasOwnProperty 方法。这个方法可以用来检测一个对象是否含有特定的自身属性;和 in 运算符不同,该方法会忽略掉那些从原型链上继承到的属性。

payload:

venom[__proto__][welcome]=159753&venom[hasOwnProperty]=Jay17&venom[text]=flag

解释一下:

  1. venom[__proto__][welcome]=159753:这一部分试图修改venom对象的原型(即venom对象的__proto__属性指向的对象)上的welcome属性。在JavaScript中,所有的对象默认继承自Object.prototype,除非明确地改变了对象的原型链。通过设置venom[__proto__][welcome]=159753,它实际上是在所有对象的原型上设置了welcome属性的值为159753,因为__proto__是指向对象原型的引用。
  2. venom[hasOwnProperty]=Jay17:这部分将venom对象的hasOwnProperty属性设置为字符串"flag"。正常情况下,hasOwnProperty是一个继承自Object.prototype的方法,用于检查对象是否拥有特定的自有属性。通过将它设置为一个字符串,venom.hasOwnProperty("text")的调用将会失败,因为hasOwnProperty已不再是一个函数。所以进入catch
  3. venom[text]=flag:这部分设置venom对象的text属性为字符串"flag"

现在,让我们回到原始的服务器端代码逻辑,看看为什么这个传参能够导致输出flag:

  • 服务器期望venom对象有一个welcome属性,其值为159753,而这已经通过原型污染在所有对象上设置了。
  • 服务器代码检查venom.hasOwnProperty("text"),这个调用会失败(抛出异常)因为hasOwnProperty已被覆盖为一个非函数值,这使得执行流进入到catch块。
  • catch块中,代码检查venom.text=="flag",这个条件为真,因为venomtext属性已经被设置为"flag"
  • 因此,满足了输出flag的条件。

image-20240316143200913

但是我很好奇的一点是,如下payload和之前同理,却无法输出flag

venom[welcome]=159753&venom[hasOwnProperty]=Jay17&venom[__proto__][text]=flag

image-20240316143913637

但是这样又可以了(为什么原型链污染一定要放在传参的最前面呢???)

venom[__proto__][text]=flag&venom[hasOwnProperty]=Jay17&venom[welcome]=159753

image-20240316143851261

Archived elephant【没出等WP】

题目描述:本打算通过写一个CMS来学习java狠狠赚他一笔,但写到一半发现好像有漏洞。都怪这个组件…虽然我也有问题:)

思路不要局限于文件上传本身,注意看题面

关键!!不是ueditor的历史漏洞,另外请注意pom.xml中存在较低版本的依赖

开题登录框。账号密码附件里找

image-20240316151031713

image-20240316151059831

之后是个文件上传点

image-20240316151219894


http://www.niftyadmin.cn/n/5433189.html

相关文章

Navicat 面试题及答案整理,最新面试题

Navicat 在数据库管理中的主要用途有哪些&#xff1f; Navicat 是一款数据库管理工具&#xff0c;其主要用途包括&#xff1a; 1、多数据库支持&#xff1a; Navicat 支持多种数据库连接&#xff0c;包括 MySQL、Oracle、PostgreSQL、SQLite、SQL Server 等&#xff0c;方便用…

51单片机-DS1302实时时钟

1.介绍 和定时器的时钟相比它的优点&#xff1a;1.不占用cpu的运行 2.精度高 3.单片机掉电不工作的时候会借用备用电池继续走时。 所属寄存器 需要完成写入和读出 并找到位置 最后找到需要写入和读出的内容 以写为例 第一步将CE置高电平 第二步先发最低位R/W是1还是0&#xf…

19. UE5 RPG使用GameplayEffect的Attribute Based Modifiers

前几篇文章我也说了GE的基础使用&#xff0c;但是&#xff0c;对一些属性的应用没有述说&#xff0c;后续&#xff0c;我将一点一点的将它们如何使用书写下来。 这一篇&#xff0c;主要就讲解一下Attribute Based Modifiers使用&#xff0c;先说一下它的应用场景&#xff0c;一…

MacBook 使用——彻底卸载并删除软件:NTFS for Mac

问题 之前因MacBook读写NTFS格式移动硬盘&#xff0c;我安装并使用了 Paragon NTFS for Mac &#xff0c;试用期结束后将其从【应用程序】中卸载移除了。但之后每次开机启动时&#xff0c;系统还是会弹出【激活】通知&#xff0c;如下图 解决 Step1、在用户目录下的 Library 目…

spacy进行简单的自然语言处理的学习

自然语言处理基本概念 概念&#xff1a;自然语言处理&#xff0c;是让机器理解人的语言的过程。 作用&#xff1a;通过使用自然语言处理&#xff0c;机器可以理解人的语言&#xff0c;从而进行语义分析&#xff0c;例如&#xff1a;从一句话中判断喜怒哀乐&#xff1b;从一段文…

unity3d Animal Controller的Animal组件中Stances,Advanced基础部分理解

Stances 立场 立场要求在动物动画控制器上的姿态动画参数。 你可以有多个运动状态,并根据当前的立场使用它们 过渡的条件是: Stance StanceID Default Stance默认姿势 如果调用函数Stance_Reset&#xff08;&#xff09;&#xff0c;动物将返回到的默认姿势。 Current …

maven工程,未被idea识别为maven工程怎么办?

示例&#xff1a;以下工程的pom文件图标不是一个蓝色的m&#xff0c;所以未被识别为maven工程。 解决办法&#xff1a;打开pom.xml文件—>右键—>add as maven project 问题解决&#xff1a;

对建造者模式的理解

目录 一、为什么需要建造者模式&#xff1f;1、场景12、场景23、解决上述场景的办法&#xff1a;建造者模式 二、练习1、题目描述 【[来源](https://kamacoder.com/problempage.php?pid1084)】2、输入描述3、输出描述4、输入示例5、输出示例6、参考 三、思考1、一般常用的是lo…