【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

相关文章

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.类型

apache的commons-pool2原理与使用实践记录

《apache的commons-pool2原理与使用实践记录》ApacheCommonsPool2是一个高效的对象池化框架,通过复用昂贵资源(如数据库连接、线程、网络连接)优化系统性能,这篇文章主... 目录一、核心原理与组件二、使用步骤详解(以数据库连接池为例)三、高级配置与优化四、典型应用场景五、注意事

Druid连接池实现自定义数据库密码加解密功能

《Druid连接池实现自定义数据库密码加解密功能》在现代应用开发中,数据安全是至关重要的,本文将介绍如何在​​Druid​​连接池中实现自定义的数据库密码加解密功能,有需要的小伙伴可以参考一下... 目录1. 环境准备2. 密码加密算法的选择3. 自定义 ​​DruidDataSource​​ 的密码解密3

SpringBoot实现文件记录日志及日志文件自动归档和压缩

《SpringBoot实现文件记录日志及日志文件自动归档和压缩》Logback是Java日志框架,通过Logger收集日志并经Appender输出至控制台、文件等,SpringBoot配置logbac... 目录1、什么是Logback2、SpringBoot实现文件记录日志,日志文件自动归档和压缩2.1、

qtcreater配置opencv遇到的坑及实践记录

《qtcreater配置opencv遇到的坑及实践记录》我配置opencv不管是按照网上的教程还是deepseek发现都有些问题,下面是我的配置方法以及实践成功的心得,感兴趣的朋友跟随小编一起看看吧... 目录电脑环境下载环境变量配置qmake加入外部库测试配置我配置opencv不管是按照网上的教程还是de

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

JavaScript实战:智能密码生成器开发指南

本文通过JavaScript实战开发智能密码生成器,详解如何运用crypto.getRandomValues实现加密级随机密码生成,包含多字符组合、安全强度可视化、易混淆字符排除等企业级功能。学习密码强度检测算法与信息熵计算原理,获取可直接嵌入项目的完整代码,提升Web应用的安全开发能力 目录