NSSCTF--Crypto--[CISCN 2023 初赛]badkey

news/2024/12/25 20:54:42/文章来源:https://www.cnblogs.com/chen-xing-zzu/p/18628553

[CISCN 2023 初赛]badkey

task:

from Crypto.Util.number import *
from Crypto.PublicKey import RSA
from hashlib import sha256
import random, os, signal, stringdef proof_of_work():random.seed(os.urandom(8))proof = ''.join([random.choice(string.ascii_letters+string.digits) for _ in range(20)])_hexdigest = sha256(proof.encode()).hexdigest()print(f"sha256(XXXX+{proof[4:]}) == {_hexdigest}")print('Give me XXXX: ')x = input()if len(x) != 4 or sha256(x.encode()+proof[4:].encode()).hexdigest() != _hexdigest:print('Wrong PoW')return Falsereturn Trueif not proof_of_work():exit(1)signal.alarm(10)
print("Give me a bad RSA keypair.")try:p = int(input('p = '))q = int(input('q = '))assert p > 0assert q > 0assert p != qassert p.bit_length() == 512assert q.bit_length() == 512assert isPrime(p)assert isPrime(q)n = p * qe = 65537assert p % e != 1assert q % e != 1d = inverse(e, (p-1)*(q-1))
except:print("Invalid params")exit(2)try:key = RSA.construct([n,e,d,p,q])print("This is not a bad RSA keypair.")exit(3)
except KeyboardInterrupt:print("Hacker detected.")exit(4)
except ValueError:print("How could this happen?")from secret import flagprint(flag)

analysis:

首先我们连接靶机之后,我们需要输入四位正常可显示字符,这四位字符与剩下的16位字符的hash值已经给定,所以第一步进行爆破即可.

第二部需要我们输入一组RSA加密的p,q并且有assert的限制条件,采用key = RSA.construct([n,e,d,p,q])后需要发生ValueError错误才能获取flag.通过搜索该函数:

排除调用 RSA.construct 前已进行的检查,最有可能导致失败的检查是

if Integer(n).gcd(d) != 1:raise ValueError("RSA private exponent is not coprime to modulus")

\[\begin{flalign} &n=pq\quad and\quad gcd(n,d)!=1\Longrightarrow gcd(n,d)=p\\ &设d=k_1p,ed=ek_1p=ek_1+ek_1(p-1)\equiv1(mod\ (p-1)*(q-1))\Longrightarrow ek_1\equiv1(mod\ p-1).\\ &k_1=e^{-1}(mod\ p-1).ed = k_2(p-1)*(q-1),k_2(q-1)={ek_1p\over p-1}\Longrightarrow q={ek_1p\over k_2(p-1)}+1.\\ &k_2是整数,且q.bit\_length()=512,则在range(1,2^{{ek_1p\over p-1}.bit\_lehnth()-512})的范围进行爆破寻找能让RSA.construct产生ValueError错误的p,q即可.& \end{flalign} \]

exp:

# -*- coding: utf-8 -*-
# @Author  : chen_xing
# @Time    : 2024/12/24 下午4:35
# @File    : badkey.py
# @Software: PyCharm
from pwn import *
import temp
# getpq
p,q = temp.getpq()
# hash_pop
io = remote('node4.anna.nssctf.cn',28788)
data = io.recvline().decode().strip().split(') == ')
result = data[1]
known = data[0][-16:]
io.sendline(temp.hash_pop(result,known))
io.sendlineafter(b'p = ', str(p))
io.sendlineafter(b'q = ', str(q))
io.interactive()
"""
-------------------------------getpq-begin-------------------------------
--------------------------------getpq-end--------------------------------
getpq time is: 16.541666269302368
-------------------------------hash_pop-begin-------------------------------
--------------------------------hash_pop-end---------------------------------
hash_pop time is: 44.73846364021301
How could this happen?
NSSCTF{971a423e-8f97-4f98-b7ee-e2d5eff4c2fb}
"""
"""
temp.py
import hashlib
from Crypto.Util.number import *
from time import *
def hash_pop(result,known):print("-------------------------------hash_pop-begin-------------------------------")start_time = time()for i in range(32,127):for j in range(32,127):for p in range(32,127):for q in range(32,127):temp = str(chr(i)) + str(chr(j)) + str(chr(p)) + str(chr(q)) + knownif hashlib.sha256(temp.encode('utf-8')).hexdigest() == result:end_time = time()print("--------------------------------hash_pop-end---------------------------------")print(f"hash_pop time is: {end_time - start_time}")return temp[:4:]
def getpq():print("-------------------------------getpq-begin-------------------------------")e = 65537start_time = time()while True:p = getPrime(512)d = inverse(e,p - 1)temp = (e * d * p - 1) // (p - 1)for k in range(1,2**(temp.bit_length() - 512)):if temp % k == 0:q = temp // k + 1if isPrime(q) and q.bit_length() == 512:end_time = time()print("--------------------------------getpq-end--------------------------------")print(f"getpq time is: {end_time - start_time}")return p,q
"""

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

deque容器/构造函数/赋值操作/大小操作/插入和删除/数据存取/排序

deque容器基本概念 功能: 双端数组,可以对头端进行插入删除操作 deque与vector区别: vector对于头部的插入删除效率低,数据量越大,效率越低 deque相对而言,对头部的插入删除速度会比vector块 vector访问元素时的速度会比deque快,这和两者内部实现有关deque内部工作原理:…

CSS基础-长度单位

💖简介 在CSS中,长度单位分为绝对长度单位和相对长度单位。这些单位用于定义元素的尺寸、边距、填充、字体大小等属性值 vmin和vmax是CSS中的相对长度单位,它们基于视口(viewport)尺寸来定义元素的宽度或高度。这些单位使得元素的尺寸可以根据视口的大小进行缩放,从而有…

基于GRNN广义回归网络和MFCC的语音情绪识别matlab仿真,对比SVM和KNN

1.算法运行效果图预览 (完整程序运行后无水印) filePath =Test_data\悲伤1.wav类型:悲伤 识别置信度Vmax =0.9559 2.算法运行软件版本 matlab2022a3.部分核心程序 (完整版代码包含详细中文注释和操作步骤视频)Labsn = []; % 遍历每种情绪 for i = 1:length(Em_kind)Labs0…

学习高校课程-软件设计模式-访客模式(lec13)

Visitor: Problem Example: exporting the graph into XML format 示例:将图表导出为 XML 格式Visitor: Solution Place the new behavior into a separate class called visitor The original object passed to the visitor’s method as an argument

[学习笔记] 线性筛与欧拉函数

一 线性筛主要讲下思想,埃氏筛法就是用所有质数标记所有倍数,这样的时间复杂度是 \(O(n\log n\log n)\),有两只 \(\log\)。可是我不想要 \(\log\),于是欧拉筛: 改进:存下质数表。对于每一个数,只标记自己与不超过自己最小质因子的数的乘积,对于质数表 \(2,3,5\),循环到…

低空经济的地理信息支撑:构建安全、高效的飞行管理体系

随着无人机等低空飞行器的广泛应用,低空空域管理的重要性日益凸显。地理信息技术作为低空空域管理的重要支撑,对于保障低空经济的健康发展具有不可替代的作用。 地理信息技术在低空空域管理中的作用地理信息技术在低空空域管理中扮演着关键角色,主要体现在以下几个方面:空域…

【Nginx应用】Windows下使用Nginx反向代理访问MySQL数据库

环境说明1和2互通,2和3互通,1和3不通,想要在1上访问3上的msyql服务。实现步骤如下: 一、安装nginx 1.1 下载nginx 下载地址 https://nginx.org/download/nginx-1.26.2.zip 1.2 将下载的安装包上传到192.168.221.134运维跳板机,并解压1.3 nginx常用操作 1.3.1 启动nginx…

Hume 语音模型 OCTAVE:实现情感语音合成、声音克隆和多角色对话生成;通义开源多模态说话人识别项目 3D-Speaker

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。 我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编…

[学习笔记] 网络流

网络流,梳理一下然后看下 trick。 网络流主要难点在于建模,网络流很多 trick 现在已经很难有新意了。很多很好想的都是紫题,没啥含金量啊。 最大流 在残量网络中找到一条路径,设边集为 \(u\),要求满足 \(\min_{ x\in u} C_x ≠ 0\),即每条边残量皆不为 \(0\)。此时将这条…

FTP(windows版)

一、windows server搭建FTP 准备工作 手动搭建FTP站点,ECS实例必须满足以下条件:实例已分配公网IP地址或绑定弹性公网IP(EIP)。具体操作,请参见​绑定EIP​ 。 操作系统:Windows Server 2008及以上系统。系统自建即可。 步骤一:添加IIS以及FTP服务角色 在创建FTP站点前,…

BUU

BUU LSB 010看了一下没发现有什么问题 丢到stegsolve,rgb调到0的时候,是张二维码被嗅探的流量 找就完了rarqr镜子里面的世界key就是flag..无语 一开始没看到Hey I think we can write safely in this file without any one seeing it. Anyway, the secret key is: st3g0_saur…

WINDOWS-Windows11修改主题为浅色

一、文件夹显示的颜色是深颜色 个人不太喜欢,想要换成浅色系二、桌面 - 鼠标右键 - 个性化 - 颜色三、“选择模式”改成浅色系