北京市第六届信息通信行业网络安全技能大赛(初赛)-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),题目目标是寻找出报文中某条异常报文流量.很让人疑惑的是,题目中并 ...
随机推荐
- 线性空间与线性基(待整修,现在是史,OIwiki上的史。)
各代数结构定义 群 对于一个集合 \(G\) 和运算 \(\times\),若其满足:封闭性.结合律,具有单位元,对于每个元素都有逆元,则称呼 \((G,\times)\) 为一个群. 阿贝尔群,或交 ...
- 百万架构师第三十九课:RabbitMq:Linux安装RabbitMq|JavaGuide
来源:https://javaguide.net RPM包安装RabbitMQ RabbitMQ的安装非常简单,由于RabbitMQ依赖于Erlang,所以需要先安装Erlang,解决依赖关系后,就可 ...
- [SDOI2009] 晨跑 题解
每个点拆成入点和出点. 发现每个点.每条边都只能经过一次,所以所有边的容量都是 \(1\). #include<bits/stdc++.h> #define ll long long us ...
- 反范式设计,冗余用户姓名,修改用户姓名后,业务表同步更新 -- MySQL 存储过程
反范式设计,冗余用户姓名,通过存储过程进行业务表的同步更新. 所有的表,在创建的时候,都加了创建人.修改人的字段..用户姓名发生变化时,要将所有的表都更新一遍. 创建存储过程 MySQL CREATE ...
- Shell - 集群监控脚本合集
node_heart_check.sh #!/bin/bash scriptPath=$(dirname "$0") for ip in `cat /etc/hosts | gre ...
- 全网最强 DeepSeek 插件上线!支持多家云服务,一键解锁满血版 AI
前言 自 DeepSeek 推出以来,其回答质量备受好评.然而,许多用户在连续提问时经常遇到"服务器繁忙,请稍后再试"的提示.随着各大云服务商陆续部署 DeepSeek 的完整模型 ...
- 面试题53 - II. 0~n-1中缺失的数字
地址:https://leetcode-cn.com/problems/que-shi-de-shu-zi-lcof/ <?php /** 一个长度为n-1的递增排序数组中的所有数字都是唯一的, ...
- JSON驱动的vue可视化表单设计器组件
form-create-designer 是基于 @form-create/element-ui 实现的表单设计器组件.可以通过拖拽的方式快速创建表单,轻松帮你搞定表单. 源码地址: Github | ...
- 05_模块(import & from)
模块(import & from) 导入模块 在和.py同级文件夹下创建一个自定义的模块 fibo.py def fib_return(x): a, b = 0, 1 result = [] ...
- sql server 2017 STRING_AGG() 替代方案
SELECT @StuId='"'+STRING_AGG(Id,'","')+'"'FROM( SELECT 'a'+cast(Id as varchar) I ...