当前位置: 首页 > news >正文

VNCTF 2023 - Web 象棋王子|电子木鱼|BabyGo Writeups

象棋王子

签到题,jsfuck解密

在这里插入图片描述

丢到console得到flag

在这里插入图片描述

电子木鱼

后面两道都是代码审计,这题是rust,题目给出了源码,下载下来看

关键代码:

在这里插入图片描述

由于限制,quantity只能为正数

功德也只能是正数(负数的话无法执行到这里)

关键代码:

cost *= body.quantity;

cost变量由 cost原始值 乘 quantity 得到

由于cost是int32类型变量,这里可以试着溢出

GONGDE.set(GONGDE.get() - cost as i32);

其实我也不太清楚这里底层原理,但是我觉得整个代码里面就是这里是有机会的

虽然我不知道溢出后的结果是什么,我还是尝试了一下

在这里插入图片描述

当尝试int32最大值的时候,很明显,减变加了

简单分析

name: Cost的默认cost值是10

事实上只要 cost * quantity >= int32_max值 即可达到溢出

至于溢出之后内存中究竟是cost变负数了还是发生了其他问题我也不太清楚,但至少我们的目的达到了

在这里插入图片描述

BabyGo

go的代码审计题

思路:通过文件上传功能上传zip,利用unzip功能可以将zip解压到任意路径,做到文件覆盖的效果,然后获得backdoor的访问权限,backdoor允许自定义模块,通过文件覆盖,令后端代码使用我们编写的恶意go模块并同时获得RCE

首先是文件上传,禁止上传go、gob文件

我看到代码有unzip功能,果断将go文件压缩成zip并上传

文件路径:

/tmp/xxx/uploads/

通过unzip进行解压,也会解压到/tmp/xxx/uploads/

在这里插入图片描述

查看unzip的实现代码,能够看出zip解压路径由 固定的/tmp/xxx/uploads/ + 我们可控的path http参数

那就简单了直接设置get参数path为../ 就能解压到任意路径

在看看最后一个功能 backdoor

在这里插入图片描述

这里判断用户是否admin,而用户信息从/tmp/xxx/中的user.gob读取的

而关于user.gob的初始化关键代码:

在这里插入图片描述

很明显,struct和序列化代码都给我们了,直接照着抄过来,吧Power改admin就可以了

在这里插入图片描述

这段代码生成一个新的user.gob

利用刚刚的任意路径解压文件功能,将我们的user.gob上传到/tmp/xxx/

达到覆盖掉原始的user.gob文件目的

这样我们就有权限使用backdoor了

RCE

关键代码:

在这里插入图片描述
有了backdoor访问权限之后,新的问题又来了

这里Eval()函数执行的命令我们居然不可控,什么奇葩后门。

不过还好,它使用的模块我们可控:

http Get参数pkg,默认值为:fmt

我们可以想办法调用我们编写的fmt模块,并调用我们编写的Println()函数

由于这里禁止了使用相对路径模块调用,所以我们只能将我们编写的模块上传到:

/usr/local/go/src/

这里是存放go模块的地方,我们可以通过刚刚的漏洞将文件上传到那里并且调用它

创建一个hackerM的文件夹打开cmd输入:

go mod init fmt

这样我们将得到一个go.mod文件,在文件中添加以下内容:

require hackerM/fmt v0.0.0
replace hackerM/fmt v0.0.0 => ../fmt

在hackerM目录下创建fmt.go文件,内容如下:

package fmtimport "os/exec"
import "fmt"func Println(cmd string) {// out, _ := exec.Command("cat", "/ffflllaaaggg").Output()out, _ := exec.Command("whoami").Output()fmt.Println(string(out))
}// /usr/local/go/src/

现在hackerM结构应该是这样:

在这里插入图片描述

将hackerM文件夹压缩为zip,上传

解压到 /usr/local/go/src/ :

在这里插入图片描述

转到/backdoor页面,添加pkg参数:

?pkg=hackerM/fmt

这样我们编写的fmt模块代码将会被执行,flag在根目录

在这里插入图片描述


最后一道题有点难度,也是代码审计吧,只不过要审计cms最新版本,得自己审计出漏洞,我php能力有限,等大佬wp

相关文章:

VNCTF 2023 - Web 象棋王子|电子木鱼|BabyGo Writeups

象棋王子 签到题,jsfuck解密 丢到console得到flag 电子木鱼 后面两道都是代码审计,这题是rust,题目给出了源码,下载下来看 关键代码: 由于限制,quantity只能为正数 功德也只能是正数(负数的…...

「JVM 编译优化」插入式注解处理器(自定义代码编译检查)

JDK 的编译子系统暴露给用户直接控制的功能相对很少,除了虚拟机即时编译的若干参数,便只有 JSR-296 中定义的插入式注解处理器 API; 文章目录1. 目标2. 实现3. 运行与测试4. 其他应用案例1. 目标 前端编译器在讲 Java 源码编译成字节码时对源…...

一文彻底理解大小端和位域 BIGENDIAN LITTLEENDIAN

一文彻底理解大小端和位域 为什么有大小端 人们一直认为大道至简,就好像物理学上的世界追求使用一个理论来统一所有的现象。为什么cpu存在大小端之分,一言以蔽之,这两种模式各有各的优点,其各自的优点就是对方的缺点&#xff0c…...

面试准备知识点与总结——(虚拟机篇)

目录JVM的内存结构JVM哪些部分会发生内存溢出方法区、永久代、元空间三者之间的关系JVM内存参数JVM垃圾回收算法1.标记清除法2.标记整理3.标记复制说说GC和分代回收算法三色标记与并发漏标的问题垃圾回收器项目中什么时候会内存溢出,怎么解决类加载过程三个阶段何为…...

spring cloud 集成 seata 分布式事务

spring cloud 集成 seata 分布式事务 基于 seata-server 1.6.x 序言 下载 seata-server 准备一个数据库 seata 专门为 seata-server 做存储,如, 可以指定 branch_tabledistributed_lockglobal_tablelock_table 准备一个业务库,比如存放定单&#xff…...

k8s篇之概念介绍

文章目录时光回溯什么是K8SK8S不是什么一、K8S构成组件控制平面组件(Control Plane Components)kube-apiserveretcdkube-schedulerkube-controller-managercloud-controller-managerNode 组件kubeletkube-proxy容器运行时(Container Runtime&…...

JavaScript学习第1天:浏览器组成、JS的组成、变量、数据类型转化、运算符、while和do...while循环

目录一、浏览器的组成二、JS的组成三、变量1、同时声明多个变量2、声明变量特殊情况四、数据类型1、数据类型2、 isNaN()方法3、字符串转义符4、字符串拼接5、特殊拼接五、数据类型转换1、转化为字符串2、转化为数字型3、转化为布尔值六、运算符1、递增和递减运算符2、逻辑运算…...

【Flutter入门到进阶】Dart进阶篇---Dart多线程异步原理

1 Isolate 1.1 什么是Isolate 1.1.1 概念 线程?异步?隔离?到底什么意思? Isolate中文意思是隔离,从使用角度来说是Dart的线程,但是从本质虚拟机的实现角度来讲Isolate是一组封装。 isolate可以理解为dar…...

WEB系列(二)-----------XSS

XSS原理及基础 定义 恶意攻击者会往Web页面里插入JS代码,当用户点击网页时.镶嵌的JS代码就会执行,从而达到恶意的特殊目的. 原因 程序对输入和输出的控制不够严格,导致payload输出到前段时被浏览器当做有效代码执行从而产生危害。 分类 存储型反射型DOM型 测…...

[python入门㊾] - python异常中的断言

目录 ❤ 断言的功能与语法 ❤ 常用断言 ❤ 常用的断言表达方式 ❤ 异常断言 ❤ 正则断言 ❤ 检查断言装饰器 ❤ 断言的功能与语法 Python assert(断言)用于判断一个表达式,在表达式条件为 False 的时候触发异常 断言可以在条件…...

一文告诉你什么是财务数据治理?

大家好,我是梦想家Alex,今天是周末,就不给大家分享技术文了~应出版社老师推荐,文末给大家送几本DAMA中国主席力荐,20位行业专家历时2年共同打造的《财务数据治理实战》,将数据治理理论应用于财务…...

MySQL数据库调优————ORDER BY语句

ORDER BY调优的核心原理,原则是利用索引的有序性跳过排序环节 关于ORDER BY语句的一些尝试 我们使用employees表进行尝试,索引情况如下 在执行计划的结果中,Extra里如果存在,Using filesort则表示,排序没有使用到索…...

Linux命令之grep

Linux grep是一个非常强大的文本搜索工具。按照给定的正则表达式对目标文本进行匹配检查,打印匹配到的行。grep命令可以跟其他命令一起使用,对其他命令的输出进行匹配。 grep语法如下: grep [options] [pattern] content 文本检索 grep可以对…...

一起学 pixijs(4):如何绘制文字md

大家好,我是前端西瓜哥,今天我们来学 pixijs 如何绘制文字。pixijs 版本为 7.1.2。 使用原生的 WebGL 来绘制文字是非常繁琐的,pixijs 对此进行了高层级的封装,提供了 Text 类和 BitMapText 类来绘制文字。 Text 最基本的写法&…...

mac m1设备上安装Qt并使用qt编程遇到的问题以及解决方式

# 简介: 首先在M1平台上的程序可以看到有两种架构,分别是intel的(x86-64)和苹果的m1(arm64架构),根据苹果的介绍,当在m1上面运行intel程序的时候使用的是转译的方式运行的&#xff…...

tensorflow 学习笔记(二):神经网络的优化过程

前言: 学习跟随 如何原谅奋力过但无声的 tensorflow 笔记笔记。 本章主要讲解神经网络的优化过程:神经网络的优化方法,掌握学习率、激活函数、损失函数和正则化的使用,用 Python 语言写出 SGD、Momentum、Adagrad、RMSProp、Ada…...

【Java】《Java8 实战》 CompletableFuture 学习

文章目录前言1. 并发(Concurrent) 和 并行(Parallel)1.1 并发的来源1.2 并发技术解决了什么问题2. 并行的来源2.1 并行解决了什么问题3. CompletableFuture 简介4. CompletableFuture 简单应用5. CompletableFuture 工厂方法的应用6. CompletableFuture join() 方法7. 使用 Par…...

Vue3之条件渲染

1.何为条件渲染 条件渲染就是在指定的条件下,渲染出指定的UI。比如当我们显示主页的时候,应该隐藏掉登录等一系列不相干的UI元素。即UI元素只在特定条件下进行显示。而在VUE3中,这种UI元素的显示和隐藏可以通过两个关键字,v-if 和…...

将Nginx 核心知识点扒了个底朝天(四)

为什么 Nginx 不使用多线程? Apache: 创建多个进程或线程,而每个进程或线程都会为其分配 cpu 和内存(线程要比进程小的多,所以 worker 支持比 perfork 高的并发),并发过大会榨干服务器资源。 Nginx: 采用…...

设计模式之工厂模式

文章の目录一、什么是工厂模式二、工厂模式有什么用?三、应用场景四、示例1、用字面量的方式创建对象2、使用工厂模式创建对象参考写在最后一、什么是工厂模式 工厂模式是一种众所周知的设计模式,广泛应用于软件工程领域,用于抽象创建特定对…...

【图像处理基石】如何进行图像畸变校正?

图像畸变校正常用于计算机视觉、摄影测量学和机器人导航等领域,能够修正因镜头光学特性或传感器排列问题导致的图像失真。下面我将介绍几种常用的图像畸变校正算法,并提供Python实现和测试用例。 常用算法及Python实现 1. 径向畸变校正 径向畸变是最常…...

uniapp uni-id 如果是正式项目,需自行实现发送邮件的相关功能

(3) 使用云对象sendEmailCode 发送邮箱验证码,报错送邮箱验证码失败 Error: 已启动测试模式,直接使用:123456作为邮箱验证码即可。 如果是正式项目,需自行实现发送邮件的相关功能 - DCloud问答 uni-id 没有实现邮箱验证码逻辑&am…...

VScode编译调试debug,gpu的cuda程序,Nsight

进行下面操作的前提是,我们的环境已经能跑简单的CUDA程序了。 一、安装Nsight 二、创建launch.json文件 {"version": "0.2.0","configurations": [{"name": "CUDA C: Launch","type": "cuda-gdb…...

C# NX二次开发-查找连续倒圆角面

在QQ群里有人问怎么通过一个选择一个倒圆角面来自动选中一组倒圆角面。 可以通过ufun函数 UF_MODL_ask_face_type 和 UF_MODL_ask_face_props 可判断处理选择相应的一组圆角面。 代码: Tag[] 查找连续倒圆角面(Tag faceTag) {theUf.Modl.AskFaceType(faceTag, out int typ…...

基于51单片机的音乐盒汽车喇叭调音量proteus仿真

地址: https://pan.baidu.com/s/1l3CSSMi4uMV5-XLefnKoSg 提取码:1234 仿真图: 芯片/模块的特点: AT89C52/AT89C51简介: AT89C51 是一款常用的 8 位单片机,由 Atmel 公司(现已被 Microchip 收…...

【论文解读】Deformable DETR | Deformable Transformers for End-to-End Object Detection

论文地址:https://arxiv.org/pdf/2010.04159 代码地址:https://github.com/fundamentalvision/Deformable-DETR 摘要 DETR最近被提出,旨在消除物体检测中许多手工设计的组件的需求,同时展示出良好的性能。然而,由于T…...

Leetcode 3566. Partition Array into Two Equal Product Subsets

Leetcode 3566. Partition Array into Two Equal Product Subsets 1. 解题思路2. 代码实现 题目链接:3566. Partition Array into Two Equal Product Subsets 1. 解题思路 这一题我的实现还是比较暴力的,首先显而易见的,若要满足题目要求&…...

【Linux】shell的条件判断

目录 一.使用逻辑运算符判定命令执行结果 二.条件判断方法 三.判断表达式 3.1文件判断表达式 3.2字符串测试表达式 3.3整数测试表达式 3.4逻辑操作符 一.使用逻辑运算符判定命令执行结果 && 在命令执行后如果没有任何报错时会执行符号后面的动作|| 在命令执行后…...

设计模式——建造者设计模式(创建型)

摘要 本文详细介绍了建造者设计模式,这是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离,便于创建不同表示。文中阐述了其设计意图,如隐藏创建细节、提升代码可读性和可维护性,并通过构建电脑的示例加以说…...

神经网络-Day40

目录 单通道图片的规范写法图像任务中的张量形状NLP任务中的张量形状1. **Flatten操作**2. **view/reshape操作** 总结彩色图片的规范写法 图像数据的格式以及模型定义的过程,和之前结构化数据的略有不同,主要差异体现在2处 模型定义的时候需要展平图像由…...