【CTF-Events】R3CTF/YUANHENGCTF 2024 两道密码题记录一下

2024-06-11 22:20

本文主要是介绍【CTF-Events】R3CTF/YUANHENGCTF 2024 两道密码题记录一下,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

R3CTF2024 WP

文章目录

  • R3CTF2024 WP
    • Crypto
      • R0System
        • 考点:代码审计 ECDH
      • R1System
        • 考点:代码审计 ECDH

Crypto

R0System

考点:代码审计 ECDH

打开代码后有两个小系统,看一下功能

image-20240611160303897

然后再看一下登录之后有哪些功能

image-20240611160827260

其实到这里就可以发现一个非常明显的漏洞点了, 重置密码,但是对用户名没有任何限制,这就导致任何用户,可以重置任何用户的密码

image-20240611162002831

这是泄露的内容,看到Alice和Bob,两个人在传输信息,并且涉及到公钥的交换,其实大体可以确定使用了非对称加密,进行密钥交换,既然是Alice发给Bob的消息,Alice用Bob的公钥进行加密,Bob想要解密必然需要使用自己的私钥进行解密,所以我们的目标是获得Bob的私钥

image-20240611162653898

这里是进行交换密钥的地方,逻辑比较简单

ecdhs是ECDH类的一个对象,调用A用户的该方法,与B的公钥进行交换,就可以得到AB之间的共享密钥

这样发给B之后,B只需要用自己的该方法,传入A的公钥进行交换,就能得到AB之间的共享密钥进行解密

共享密钥生成流程图大概如下:

image-20240611163557634

那么获取B的私钥是我们当前需要完成的,途径也很明确,登录上B的账号 直接让系统返回

步骤:

注册一个普通用户01

登录01

修改Bob的密码

退出01

登录Bob

获取私钥

拿到B的私钥后,我们需要恢复共享密钥是什么,这个在本地直接调用给出的代码就好,不过要仔细观察系统的传值形式

注册普通用户

image-20240611165053157

重置Bob的密码

image-20240611165140437

登录Bob拿私钥

image-20240611165221649

拿泄露数据

image-20240611165241935

因为可以看到flag的加密方式就是用共享密钥做了一个AES的简单加密

下面本地恢复共享密钥

image-20240611165437402

首先可以发现exchange_key传参的内容是一个二元组,但是我们获得的泄露的公钥信息只是一个长字符串,所以需要转换成二元组,同时题目已经给出我们转换的方法了

exp:

from hashlib import md5
from utils import *  #注意一定要在同文件夹下导包直接用给出的代码B_private_key = 0xef7c7923ef85988c24c6f66c6799ccb285691ca9cbc0c4dfd259d84e6b4a2f90   #这是十六进制格式的
A_pub = 'e7e620bb5a43a7ac3a78f908f6e1f702fe4d9176adfe3e1efa22df1d636aa7ab08a32839893d6ed323aa01eefb2fc7393250299252ba96339f43cb40c658f28c'  #这个因为需要转化成二元组 所以是字符串print(b2p(bytes.fromhex(A_pub)))
print(p2b(b2p(bytes.fromhex(A_pub))).hex())#字符串转化为二元组
A_pub_ = b2p(bytes.fromhex(A_pub))# pub_key =(85971966356924244980831307020457178590563197663408196712967537635077016642444, 79000431020590387084280106635416454953038752073893771961864570482154499521525)
class ECDH:def __init__(self):self.curve = Curve()self.private_key = B_private_key  #这是十六进制格式的self.public_key  = self.curve.mul(self.private_key, self.curve.G)  #根据私钥会自动生成公钥#进行密钥交换合成def exchange_key(self,others_publickey):print(self.public_key)return md5(str(self.curve.mul(self.private_key,others_publickey)).encode()).digest()f = ECDH() #用户B和A进行交换
print("flag",f.exchange_key(A_pub_).hex())  #注意最后的格式 给出hex 作为AES的key

拿下:

image-20240611204330897

R1System

考点:代码审计 ECDH

首先要说一下 这个题非了,R2是他的修复版

image-20240611204954589

可以发现 开始的时候题目先自己注册了Alice的账号 那Bob呢

image-20240611205027002

这也就是说 如果没有用户登录,Bob是不会注册的

所以我们能不能先直接注册一个Bob的账号

image-20240611205109202

答案是可以的,因为这个限制只限制了Alice的账号不能注册 这也是非的点

这样先别登录 直接注册一个Bob的账号

拿到和R0的信息 相同的解法 就不赘述了


以上就是赛时做出来的题目,其他的期待复现见!

这篇关于【CTF-Events】R3CTF/YUANHENGCTF 2024 两道密码题记录一下的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Zabbix在MySQL性能监控方面的运用及最佳实践记录

《Zabbix在MySQL性能监控方面的运用及最佳实践记录》Zabbix通过自定义脚本和内置模板监控MySQL核心指标(连接、查询、资源、复制),支持自动发现多实例及告警通知,结合可视化仪表盘,可有效... 目录一、核心监控指标及配置1. 关键监控指标示例2. 配置方法二、自动发现与多实例管理1. 实践步骤

Spring Security中用户名和密码的验证完整流程

《SpringSecurity中用户名和密码的验证完整流程》本文给大家介绍SpringSecurity中用户名和密码的验证完整流程,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定... 首先创建了一个UsernamePasswordAuthenticationTChina编程oken对象,这是S

在Spring Boot中集成RabbitMQ的实战记录

《在SpringBoot中集成RabbitMQ的实战记录》本文介绍SpringBoot集成RabbitMQ的步骤,涵盖配置连接、消息发送与接收,并对比两种定义Exchange与队列的方式:手动声明(... 目录前言准备工作1. 安装 RabbitMQ2. 消息发送者(Producer)配置1. 创建 Spr

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手

PostgreSQL数据库密码被遗忘时的操作步骤

《PostgreSQL数据库密码被遗忘时的操作步骤》密码遗忘是常见的用户问题,因此提供一种安全的遗忘密码找回机制是十分必要的,:本文主要介绍PostgreSQL数据库密码被遗忘时的操作步骤的相关资... 目录前言一、背景知识二、Windows环境下的解决步骤1. 找到PostgreSQL安装目录2. 修改p

SpringBoot3应用中集成和使用Spring Retry的实践记录

《SpringBoot3应用中集成和使用SpringRetry的实践记录》SpringRetry为SpringBoot3提供重试机制,支持注解和编程式两种方式,可配置重试策略与监听器,适用于临时性故... 目录1. 简介2. 环境准备3. 使用方式3.1 注解方式 基础使用自定义重试策略失败恢复机制注意事项

Python UV安装、升级、卸载详细步骤记录

《PythonUV安装、升级、卸载详细步骤记录》:本文主要介绍PythonUV安装、升级、卸载的详细步骤,uv是Astral推出的下一代Python包与项目管理器,主打单一可执行文件、极致性能... 目录安装检查升级设置自动补全卸载UV 命令总结 官方文档详见:https://docs.astral.sh/

统一返回JsonResult踩坑的记录

《统一返回JsonResult踩坑的记录》:本文主要介绍统一返回JsonResult踩坑的记录,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录统一返回jsonResult踩坑定义了一个统一返回类在使用时,JsonResult没有get/set方法时响应总结统一返回

Go学习记录之runtime包深入解析

《Go学习记录之runtime包深入解析》Go语言runtime包管理运行时环境,涵盖goroutine调度、内存分配、垃圾回收、类型信息等核心功能,:本文主要介绍Go学习记录之runtime包的... 目录前言:一、runtime包内容学习1、作用:① Goroutine和并发控制:② 垃圾回收:③ 栈和

java对接海康摄像头的完整步骤记录

《java对接海康摄像头的完整步骤记录》在Java中调用海康威视摄像头通常需要使用海康威视提供的SDK,下面这篇文章主要给大家介绍了关于java对接海康摄像头的完整步骤,文中通过代码介绍的非常详细,需... 目录一、开发环境准备二、实现Java调用设备接口(一)加载动态链接库(二)结构体、接口重定义1.类型