北京市第六届信息通信行业网络安全技能大赛(初赛)-CTF夺旗阶段 EZRSA writeup
题目EZRSA
EZRSA.py
from Crypto.Util.number import *
import gmpy2
from flag import m
p = getPrime(1024)
q = getPrime(1024)
n = p * q
e = 65537
miao = m * e ** 114514 * p
c = pow(miao,e,n)
print('n =',n)
print('c =',c)
n = 15724473323565045396370858465469794253897098805658297755038464795187843864543336878458855839908938174609226125906389647596135126780127853622918512750724133584255813225824621395423147937411028484797397604314549972831401569058888828390709389850009401999311919893801585196625261707533397394617900788093073155283942628090462027599299261904948019001134387413947227412444769837076744236033154179273077282052507015769350002149388500729755099921806453579133365664602172243156399457894104732823874214077421498887133708915560830956009329435645769146484681739460872512462904147532278669159028733288243011480246972212572785396951
c = 13979061528868934515991503434842402588520368874011952968148427460697509714748731073556587063579866682867476314979258657484882946029437582223157020767329942522520919760899855118050378516616088604837486252499316743832035392322851380083033361998393452998263670256288025282295743323558056979630144546247582020682237999855779926018311317468574189832558037678809876850876418649656848539996712475992846363312922214381030516807233491184673015387286304596658582165385106253842227343385240797371235750880819135427727076716569309407314242434870197756376022377417240138527121517361247185657355931682447584016791273217145770895952
解题思路
分析加密过程:
明文经过变换 miao = m * e^114514 * p,然后使用RSA加密得到密文 c。这里的模数 n = p * q,公钥指数 e = 65537。
利用GCD分解n:
由于 miao 包含因子 p,加密后的 c 也必然是 p 的倍数。通过计算 gcd(c, n) 可以分解出 p,进而得到 q = n // p。
计算私钥d:
使用欧拉函数 φ(n) = (p-1)(q-1) 和扩展欧几里得算法计算私钥 d,即 d ≡ e⁻¹ mod φ(n)。
解密得到miao:
用私钥 d 解密密文 c 得到 miao ≡ c^d mod n。由于 miao = m * e^114514 * p,这里需要进一步处理。
恢复明文m:
将 miao 除以 p 得到 temp = m * e^114514。接下来,在模 q 下计算 e^114514 的逆元,从而求得 m ≡ temp * inv(e^114514) mod q。
解题代码
import gmpy2
from Crypto.Util.number import long_to_bytes
n = 15724473323565045396370858465469794253897098805658297755038464795187843864543336878458855839908938174609226125906389647596135126780127853622918512750724133584255813225824621395423147937411028484797397604314549972831401569058888828390709389850009401999311919893801585196625261707533397394617900788093073155283942628090462027599299261904948019001134387413947227412444769837076744236033154179273077282052507015769350002149388500729755099921806453579133365664602172243156399457894104732823874214077421498887133708915560830956009329435645769146484681739460872512462904147532278669159028733288243011480246972212572785396951
c = 13979061528868934515991503434842402588520368874011952968148427460697509714748731073556587063579866682867476314979258657484882946029437582223157020767329942522520919760899855118050378516616088604837486252499316743832035392322851380083033361998393452998263670256288025282295743323558056979630144546247582020682237999855779926018311317468574189832558037678809876850876418649656848539996712475992846363312922214381030516807233491184673015387286304596658582165385106253842227343385240797371235750880819135427727076716569309407314242434870197756376022377417240138527121517361247185657355931682447584016791273217145770895952
# 分解n得到p和q
p = gmpy2.gcd(c, n)
q = n // p
# 计算phi(n)和私钥d
phi = (p - 1) * (q - 1)
e = 65537
d = gmpy2.invert(e, phi)
# 解密得到miao
miao = pow(c, d, n)
# 计算temp = m * e^114514
temp = miao // p # 因为miao = m * e^114514 * p,整除p得到m * e^114514
# 计算e^114514模q的逆元
e_exp_modq = pow(e, 114514, q)
inv_e_exp = gmpy2.invert(e_exp_modq, q)
# 计算m模q并恢复明文
m = (temp * inv_e_exp) % q
flag = long_to_bytes(m)
print(flag.decode())
北京市第六届信息通信行业网络安全技能大赛(初赛)-CTF夺旗阶段 EZRSA writeup的更多相关文章
- 2019西湖论剑网络安全技能大赛(大学生组)部分WriteUp
这次比赛是我参加以来成绩最好的一次,这离不开我们的小团队中任何一个人的努力,熬了一整天才答完题,差点饿死在工作室(门卫大爷出去散步,把大门锁了出不去,还好学弟提了几个盒饭用网线从窗户钓上来才吃到了午饭 ...
- 山东省网络安全技能大赛 部分writeup
web1 提示:ip不在范围内 直接抓包加client-ip: 127.0.0.1 即可得到flag web2 <?php include 'here.php'; $key = 'kela ...
- 2019西湖论剑网络安全技能大赛(大学生组)--奇怪的TTL字段(补充)
鉴于有人不会将得到的16进制数据在winhex中转成图片,我在这里写一个详细的步骤. 首先就是将六张图片的十六进制数据找出并提取出来. 打开winhex,新建一个文档. 大小可以选1bytes 将数据 ...
- 2021陕西省大学生网络安全技能大赛 Web ez_checkin
web ez_checkin 进去看了一会,啥也没找到,直接上dirsearch 扫到一个index.php~,打开看一看,是php审计 <?php error_reporting(0); in ...
- 2019"深思杯"山东省大学生网络安全技能大赛部分wp
签到 载入OD查看字符串 上下左右 这道题出来的时候真的是一点思路都没有,一直以为是什么编码来着,看了大佬们的 wp 原来是画图 拿大佬的脚本: from PIL import Image im = ...
- 通信行业OSS支撑系统软件研发思考
一般的,对所谓大型.通信行业.OSS支撑软件系统,我们可宏观定义以下几点: 以年计的研发周期 以几十人计的研发团队 以百计的业务菜单功能点 以千计的数据库表 以万计的业务术语指标 以亿计的数据表记录 ...
- 【技能大赛笔记01】Zigbee点对点按键控制程序开发
[技能大赛笔记01]Zigbee点对点按键控制程序开发 --2017年"物联网物联网技术应用与维护"任务五题1(中职组) 1.题目要求 2.工程文件 在比赛中,提供了一个基于Bas ...
- IM云通信行业步入快车道,谁将成为代表中国的全球IM“独角兽”?
2016年,Twilio的成功上市,以及抢眼的股价表现,拓宽了全球云通信行业的想象空间,行业内公司估值水平也集体上调. 在中国,IM云通信行业也从2016年开始进入了一个“黄金发展时期”,一批如融云. ...
- UE4学习心得:蓝图间信息通信的几种方法
蓝图间通信是一个复杂关卡能否正常运行的关键,笔者在这里提供几种蓝图类之间的信息交互方法,希望能对读者有所帮助. 1.类引用 这是最直接的一种蓝图类之间的信息交互方式.首先在Editor中创建2个Act ...
- 2018工业信息安全技能大赛华东赛区初赛 第2题 writeup
2018工业信息安全技能大赛华东赛区初赛 第2题 解题思路 本题主要考察点是对常见工控协议的理解(modbus/tcp和s7comm),题目目标是寻找出报文中某条异常报文流量.很让人疑惑的是,题目中并 ...
随机推荐
- FLink同步mysql到Iceberg丢数问题排查解决
一.问题背景 数据对比程序发现通过Flink cdc同步mysql写入Iceberg表运行一段时间后存在丢数问题,排查到丢数是由于hivemetastore钩子函数缺陷引起,由腾讯云EMR修复 钩子函 ...
- Flume - [08] 绝密档案Ⅰ
题记部分 (1)Flume使用场景 线上数据一般主要是落地(存储到磁盘)或者通过socket传输给另一个系统,这种情况下,你很难推动线上应用或服务去修改接口,实现直接向kafka里写数据,这时候你 ...
- Sqoop2 - [01] 安装部署
1.启动Hadoop集群 2.将Sqoop2的安装包上传到合适的目录中解压 tar -zxvf sqoop-1.99.7-bin-hadoop200.tar.gz 3.修改Hadoop的配置文件cor ...
- Scala面向对象之创建对象,重载构造方法,继承抽象类实现接口
package com.wyh.day01 object ScalaClass { def main(args: Array[String]): Unit = { val student = new ...
- PowerShell开发小工具 · 四张照片拼成一张
小工具的设计与实现------选四张照片拼成一张照片. 很经典的应用情景,市面上有很多类似的小软件,特别是手机应用.为了方便学习巩固PowerShell,今天笔者使用它来实现. [设计思路] 选择四张 ...
- VUE-CLI 创建VUE3项目
前言 第一篇当然是如何安装vue3 安装步骤 第一步安装vue-cli npm install -g @vue/cli // vue --version 第二步创建项目 vue create hell ...
- Mpmath库-学习笔记
目录 mpmath库学习 1. Introduction 1.2 Basic usage of mpmath 1.3 输出格式化 1.4 输出的小数点位数 2. BASIC FEATURES 2.1 ...
- PPT 技巧&网站
样机生成网站 https://mockuphone.com/device?type=computer CTROL+L 演示生成荧光笔 3.如何内嵌字体 文件->选项->保存->勾选潜 ...
- Open-Sora 2.0 重磅开源!
潞晨科技正式推出 Open-Sora 2.0 -- 一款全新开源的 SOTA 视频生成模型,仅 20 万美元(224 张 GPU)成功训练商业级 11B 参数视频生成大模型.开发高性能的视频生成模型通 ...
- Windows编程----内核对象竟然如此简单?
什么是内核对象 内核对象本质上就是内存中的一块内存 ,这块内存由操作系统进行管理和分配,任何应用程序都无法直接操作这块内存区域.至于内核对象的作用,我们暂且不说,这里只需要直到它是内存中的一块内存. ...