春秋杯冬季赛-EzMisc WP

news/2025/1/19 19:00:40/文章来源:https://www.cnblogs.com/ljnljn/p/18679811

后面两天本来没打算写出来啥题的,因为都太难了呜呜,但是这道题竟然做出来了(虽然花了接近3个小时),还是有点小激动

前排提醒

1、是看了提示之后才做出来的

题目提示:1、利⽤DP泄露来求出私钥,从⽽还原私钥流解密密⽂ 2、图片经过了Arnold变换

2、存在偶然性,复现难度挺大的,大佬轻点喷QAQ

解答过程

1、流量分析

直接追踪流走起

image

这时候显示设置为UTF-8

第五个流显示有三个文件,私钥、压缩包、密文

-rw-------    1 ftp      ftp           256 Oct 24 12:06 encrypted.enc
-rw-------    1 ftp      ftp         31168 Oct 24 12:06 flag.7z
-rw-------    1 ftp      ftp          1679 Oct 24 12:04 private_key.pem

在第六个流显示传输私钥

150 Opening BINARY mode data connection for private_key.pem (1679 bytes).
226 Transfer complete.

第七个流就是私钥

说明格式都是文件名-文件内容

因此导出第7个流(另存为)为private_key.pem,第10个流为encrypted.enc

注意这里第10个流和12个流是二进制文件,要用“显示为原始数据”存储

这样我们就得到了三个文件

2、修复私钥

用openssl看私钥是否正确,结果是错的(不然怎么会卡到这里

image

现在就用到了提示1:利⽤DP泄露来求出私钥,从⽽还原私钥流解密密⽂

先对这个坏的私钥进行分析(这里只需要n和dp,就只拿出这两个)

E:\>openssl rsa -in PRIVATEKEY.pem -text
Private-Key: (2048 bit, 2 primes)
modulus:00:b3:ee:84:a7:c4:9a:b1:b8:6f:20:6e:b6:89:18:00:aa:9a:42:ec:4e:b1:b4:cd:de:74:f7:67:eb:9e:07:d0:82:09:72:bd:d3:b2:2b:3c:38:ee:49:70:49:52:1e:12:64:0a:44:f5:c6:d4:60:1e:6d:73:57:23:c8:a7:36:53:3d:96:37:bc:c8:0d:fb:14:ee:0f:09:fb:ae:83:eb:30:9f:68:62:15:04:f1:8b:77:94:11:a8:b4:ec:99:87:bf:df:4a:af:e1:77:d2:00:4e:a9:8e:de:04:e0:07:34:05:14:f2:8a:f8:d2:c7:86:27:58:60:49:1b:83:b3:23:d9:30:9a:48:e6:4e:66:d9:1a:ec:bb:0f:7e:39:eb:d9:ba:3f:87:73:2f:24:0c:7c:e9:11:03:3b:61:57:bc:90:21:63:d0:3f:56:20:5a:b6:ad:29:18:a0:ff:2e:2a:07:93:06:9f:8d:dd:ab:c5:00:37:4a:39:ee:af:c2:f1:39:67:8c:f6:73:59:91:94:78:0c:7f:e4:93:11:cb:2b:1b:25:45:e3:c6:90:e1:db:2e:0c:08:3b:d6:dd:a6:58:48:d6:4c:bb:81:0a:42:43:79:a8:8b:be:15:3d:df:3c:8e:79:e0:c8:07:ed:1a:a9:b6:87:43:30:da:35:59:83:0c:fa:45
publicExponent: 65537 (0x10001)
privateExponent:...
prime1:...
prime2:...
exponent1:00:97:24:1a:2c:d4:a3:a6:a6:24:57:ed:7a:08:bd:ae:42:85:aa:8a:a5:c8:2f:74:13:a0:d8:64:32:97:cb:44:ad:e7:e6:25:d2:9c:de:1a:6a:2d:9d:0c:2a:b6:7e:1a:81:64:70:ad:47:08:b7:92:f9:73:38:7c:fb:90:5e:47:3d:bb:2e:4b:70:da:2a:4e:74:62:f4:53:1b:c1:cb:a0:bc:fb:04:b6:0e:49:b5:eb:05:c3:4d:8e:91:48:ac:12:e9:a9:ce:34:d7:c7:af:73:e9:c6:be:76:94:2d:e1:f0:35:73:4f:6b:58:65:08:d1:57:80:9e:3e:9d:ed:df:fc:a7
exponent2:...
coefficient:...

修改一下格式(去掉冒号和空格,前面加0x)

n=0x00b3ee84a7c49ab1b86f206eb6891800aa9a42ec4eb1b4cdde74f767eb9e07d0820972bdd3b22b3c38ee497049521e12640a44f5c6d4601e6d735723c8a736533d9637bcc80dfb14ee0f09fbae83eb309f68621504f18b779411a8b4ec9987bfdf4aafe177d2004ea98ede04e007340514f28af8d2c786275860491b83b323d9309a48e64e66d91aecbb0f7e39ebd9ba3f87732f240c7ce911033b6157bc902163d03f56205ab6ad2918a0ff2e2a0793069f8dddabc500374a39eeafc2f139678cf673599194780c7fe49311cb2b1b2545e3c690e1db2e0c083bd6dda65848d64cbb810a424379a88bbe153ddf3c8e79e0c807ed1aa9b6874330da3559830cfa45

dp=0x0097241a2cd4a3a6a62457ed7a08bdae4285aa8aa5c82f7413a0d8643297cb44ade7e625d29cde1a6a2d9d0c2ab67e1a816470ad4708b792f973387cfb905e473dbb2e4b70da2a4e7462f4531bc1cba0bcfb04b60e49b5eb05c34d8e9148ac12e9a9ce34d7c7af73e9c6be76942de1f035734f6b586508d157809e3e9deddffca7

然后求解p、q,到网上搜了个代码,因为没有密文所以修改了一下

[RSA的dp泄露 BUUCTF] RSA2_dp=d%(p-1)-CSDN博客

import gmpy2 as gp
e = 65537
n=0x00b3ee84a7c49ab1b86f206eb6891800aa9a42ec4eb1b4cdde74f767eb9e07d0820972bdd3b22b3c38ee497049521e12640a44f5c6d4601e6d735723c8a736533d9637bcc80dfb14ee0f09fbae83eb309f68621504f18b779411a8b4ec9987bfdf4aafe177d2004ea98ede04e007340514f28af8d2c786275860491b83b323d9309a48e64e66d91aecbb0f7e39ebd9ba3f87732f240c7ce911033b6157bc902163d03f56205ab6ad2918a0ff2e2a0793069f8dddabc500374a39eeafc2f139678cf673599194780c7fe49311cb2b1b2545e3c690e1db2e0c083bd6dda65848d64cbb810a424379a88bbe153ddf3c8e79e0c807ed1aa9b6874330da3559830cfa45
dp=0x0097241a2cd4a3a6a62457ed7a08bdae4285aa8aa5c82f7413a0d8643297cb44ade7e625d29cde1a6a2d9d0c2ab67e1a816470ad4708b792f973387cfb905e473dbb2e4b70da2a4e7462f4531bc1cba0bcfb04b60e49b5eb05c34d8e9148ac12e9a9ce34d7c7af73e9c6be76942de1f035734f6b586508d157809e3e9deddffca7
for i in range(1, e):if (dp * e - 1) % i == 0:if n % (((dp * e - 1) // i) + 1) == 0:p = ((dp * e - 1) // i) + 1q = n // (((dp * e - 1) // i) + 1)phi = (q - 1) * (p - 1)d = gp.invert(e, phi)
print(p)
print(q)

然后就会输出p、q,再把p、q放到rsatool生成der证书,用openssl转成pem(大佬轻点喷,我只会这么用www

 > python rsatool.py -f DER -o key.der -p 167491603290232240165109588122788533113389414892381818156844128040193230978258977820405344205575296236371810427163650149605152056848232885222313353175604339541646561904247957829866027314556374355724182064112393004948463738291920723783245808179255742950559196088831263741806293908034669816429240284314008447447 -q 135614405996392828283288405736816325971158828195581321137267815028274015935746901788826424186827187305964377540945597767870885565726850264456049944775721936464833029271446916299066431842045054106684672619067404844022080815572204158632860297345943545872303196205961279815313762145298097712015966260328367919427
 > openssl rsa -inform DER -outform PEM -in key.der -out mykey.pem
writing RSA key

这时生成的mykey.pem就是正确的密钥,开始解密

这里又踩了一个坑,openssl解密死活不成功,结果用cyberchef一次就成功了,挺奇怪的(用open file as input)

image

这样就获得了压缩包密码

3、图片解密

提示 2、图片经过了Arnold变换(不给提示真的有人知道吗

在网上搜索这个变换,找到一个可用的代码,自己改了一下让他能把图片输出

-Arnold-/arnold.py at main · mouguawang/-Arnold-

import numpy as np
import cv2
import randomdef dearnold_encode(image, a, b):arnold_image = np.zeros(shape=image.shape)  h, w = image.shape[0], image.shape[1]N = w  for x in range(h):for y in range(w):new_x = ((a * b + 1) * x - a * y) % Nnew_y = (-b * x + y) % Narnold_image[new_x, new_y, :] = image[x, y, :]arnold_image = np.uint8(arnold_image)return arnold_imager = cv2.imread('flag.png')
cishu=0
for _ in range(10000):a=random.randint(1,1000)b=random.randint(1,1000)cishu+=1r = dearnold_encode(r, a, b)cv2.imwrite("D:\\hi\\" + "{}.png".format(cishu), r)

这里纯随机,我开了八个Python强制多线程输出了几万张图片,花了一个小时去找,偶然间发现了最靓的仔

(其实这个也不是完美的,但是已经没办法了,只有这个是能看到内容的)
这里可以把图片缩小看得更清楚

image

通过我的反复查看和大胆的蒙,花了一个小时终于把flag弄出来了,挺不容易的QAQ

flag{3089ea1c-23a0-4889-a87f-daabe2f6e1b4}

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

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

相关文章

信息量,熵,交叉熵,相对熵的定义

本文将介绍信息量,熵,交叉熵,相对熵的定义,以及它们与机器学习算法中代价函数的定义的联系。转载请保留原文链接:http://www.cnblogs.com/llhthinker/p/7287029.html 1. 信息量 信息的量化计算:解释如下:信息量的大小应该可以衡量事件发生的“惊讶程度”或不确定性: 如…

探索照片新艺术:在线将你的照片转为油画杰作

在数字时代,我们每天都在捕捉生活的瞬间,但你是否想过将这些平凡的照片转变为独一无二的艺术品?今天,我要向大家推荐一个令人兴奋的在线平台——img4you,它利用尖端的AI技术,让你的照片瞬间“穿上”油画的华服。 轻松体验在线照片转油画: https://www.img4you.com/style…

通俗理解深度学习中的熵相关知识【信息量、熵、相对熵(KL散度)、交叉熵】

https://zhuanlan.zhihu.com/p/647312079 通俗理解:一个事件从不确定变为确定的难度有多大 往往某件事情发生概率越低,信息量越大,从不确定变为确定的难度越大 ex:【中国队想要在世界杯夺冠】这一事件发生概率极极极低,信息量非常大,想要实现即“从不确定变为确定”的难度…

IPv6路由

前言 在企业网络中,IPv6技术的应用越来越普及。IETF组织针对IPv6网络制定了两种路由协议RIPng和OSPFV3。 路由过程IPv6中的动态路由的下一跳为链路本地地址,静态路由为手动指定的单播地址 链路本地地址只在接口所连接的链路上有效,ping链路本地地址需要指定接口路由配置静态路…

【bp爆破流程】不知道存活用户的喷洒

经典情况: 无论是用户名不存在,还是用户名存在但密码错误,统一返回“用户名或密码错误”这种情况又要怎么办呢❓ 如果没有其他接口配合,我们是很难确定存活用户了,我们也不可能用5w的用户名和6w的密码字典去交叉爆破,量级达到30亿了都。这种情况下,我们首先可以挑一些常…

【SpringBoot应用】统计、监控 SQL 运行情况

基本概念 Druid,作为Java领域一款杰出的数据库连接池,不仅因其源自阿里巴巴的深厚背景而备受信赖,更以其卓越的功能性、性能表现以及高度可扩展性在众多数据库连接池中脱颖而出。 尽管HikariCP在速度上略有优势,但Druid凭借其强大的监控和扩展能力,成为了许多项目首选的数…

从0到1:AI微信红包开发全攻略,小白也能轻松上手!

AI编程时代真的来了!最近我重度沉迷AI编程,发现它简直是开发神器,前端页面、后端服务,都能轻松搞定,效率直接起飞!最近临近过年,我突然冒出一个想法:为什么不试试用AI来做个微信红包呢? 说干就干! 1. 明确需求 要用AI做红包,首先得了解微信红包的规则。简单来说,我…

【安全运营】安全风险管理

一、什么是安全风险二、如何评估安全风险2.1 确定影响范围2.2 确定威胁2.3 确定脆弱性2.4 计算风险值2.5 评估结论三、为什么要管理安全风险四、如何管理安全风险4.1 背景建立4.2 风险评估4.3 风险处理4.4 批准监督原创 xiejava fullbug在信息时代,信息已经成为第一战略资源,…

collectd:系统统计信息收集守护进程软件

一、概述二、主要功能三、应用场景四、与其他监控工具的比较五、安装与配置六、总结Collectd是一个系统统计信息收集守护进程(daemon),主要用于收集系统性能和提供各种存储方式来存储不同值的机制。 一、概述 •定义:Collectd是一个基于C语言研发的插件式架构的监控软件,通…

【Java】Java UML 类图绘制解析:结构与工具类型详解

前言常用UML绘图工具1、Visual Paradigm2. Lucidchart3. Draw.io (现名diagrams.net)4. PlantUML(推荐)5. StarUML类与类之间的关系UML中的关系是面向对象关系。PlantUML类之间的关系符号定义UML 类图实战1、类 (Class)2、接口 (Interface)3、实现 (Implementation)4、继承 (…

红黑树插入与删除操作的基本规则

刷题又久违刷到了红黑树的知识,才发现上次学完之后没有及时留下笔记,现在又回到了一知半解的状态。写技术笔记是多么重要啊(喝老鼠药.jpg),以下为这次学到知识的简单总结。 通俗来说 红黑树更像是一种有规则的“交通系统”,每个交叉口是一个节点,红色代表“警示”或“等…

【监控】大型系统高可用监控体系建设

监控体系是稳定性建设的必备措施,它可以分为多个子系统:异常的智能监控系统、调用链路跟踪系统、端到端的链路染色系统、业务数据轨迹重现系统、业务数据对账系统等。 一个有效的监控体系可以帮助快速识别和响应问题,从而最小化服务中断的风险。 一、异常的智能监控系统 利用…