【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

相关文章

MySQL8 密码强度评估与配置详解

《MySQL8密码强度评估与配置详解》MySQL8默认启用密码强度插件,实施MEDIUM策略(长度8、含数字/字母/特殊字符),支持动态调整与配置文件设置,推荐使用STRONG策略并定期更新密码以提... 目录一、mysql 8 密码强度评估机制1.核心插件:validate_password2.密码策略级

Spring Boot 整合 SSE(Server-Sent Events)实战案例(全网最全)

《SpringBoot整合SSE(Server-SentEvents)实战案例(全网最全)》本文通过实战案例讲解SpringBoot整合SSE技术,涵盖实现原理、代码配置、异常处理及前端交互,... 目录Spring Boot 整合 SSE(Server-Sent Events)1、简述SSE与其他技术的对

MySQL设置密码复杂度策略的完整步骤(附代码示例)

《MySQL设置密码复杂度策略的完整步骤(附代码示例)》MySQL密码策略还可能包括密码复杂度的检查,如是否要求密码包含大写字母、小写字母、数字和特殊字符等,:本文主要介绍MySQL设置密码复杂度... 目录前言1. 使用 validate_password 插件1.1 启用 validate_passwo

基于Spring Boot 的小区人脸识别与出入记录管理系统功能

《基于SpringBoot的小区人脸识别与出入记录管理系统功能》文章介绍基于SpringBoot框架与百度AI人脸识别API的小区出入管理系统,实现自动识别、记录及查询功能,涵盖技术选型、数据模型... 目录系统功能概述技术栈选择核心依赖配置数据模型设计出入记录实体类出入记录查询表单出入记录 VO 类(用于

java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)

《java中pdf模版填充表单踩坑实战记录(itextPdf、openPdf、pdfbox)》:本文主要介绍java中pdf模版填充表单踩坑的相关资料,OpenPDF、iText、PDFBox是三... 目录准备Pdf模版方法1:itextpdf7填充表单(1)加入依赖(2)代码(3)遇到的问题方法2:pd

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