BUUCTF在线评测 (buuoj.cn)

附件

import sympy
import random
from gmpy2 import gcd, invert
from Crypto.Util.number import getPrime, isPrime, getRandomNBitInteger, bytes_to_long, long_to_bytes
from z3 import *
flag = b"MRCTF{xxxx}"
base = 65537def GCD(A):B = 1for i in range(1, len(A)):B = gcd(A[i-1], A[i])return Bdef gen_p():P = [0 for i in range(17)]P[0] = getPrime(128)for i in range(1, 17):P[i] = sympy.nextprime(P[i-1])print("P_p :", P[9])n = 1for i in range(17):n *= P[i]p = getPrime(1024)factor = pow(p, base, n)print("P_factor :", factor)return sympy.nextprime(p)def gen_q():sub_Q = getPrime(1024)Q_1 = getPrime(1024)Q_2 = getPrime(1024)Q = sub_Q ** Q_2 % Q_1print("Q_1: ", Q_1)print("Q_2: ", Q_2)print("sub_Q: ", sub_Q)return sympy.nextprime(Q)if __name__ == "__main__":_E = base_P = gen_p()_Q = gen_q()assert (gcd(_E, (_P - 1) * (_Q - 1)) == 1)_M = bytes_to_long(flag)_C = pow(_M, _E, _P * _Q)print("Ciphertext = ", _C)
'''
P_p : 206027926847308612719677572554991143421
P_factor : 213671742765908980787116579976289600595864704574134469173111790965233629909513884704158446946409910475727584342641848597858942209151114627306286393390259700239698869487469080881267182803062488043469138252786381822646126962323295676431679988602406971858136496624861228526070581338082202663895710929460596143281673761666804565161435963957655012011051936180536581488499059517946308650135300428672486819645279969693519039407892941672784362868653243632727928279698588177694171797254644864554162848696210763681197279758130811723700154618280764123396312330032986093579531909363210692564988076206283296967165522152288770019720928264542910922693728918198338839
Q_1:  103766439849465588084625049495793857634556517064563488433148224524638105971161051763127718438062862548184814747601299494052813662851459740127499557785398714481909461631996020048315790167967699932967974484481209879664173009585231469785141628982021847883945871201430155071257803163523612863113967495969578605521
Q_2:  151010734276916939790591461278981486442548035032350797306496105136358723586953123484087860176438629843688462671681777513652947555325607414858514566053513243083627810686084890261120641161987614435114887565491866120507844566210561620503961205851409386041194326728437073995372322433035153519757017396063066469743
sub_Q:  168992529793593315757895995101430241994953638330919314800130536809801824971112039572562389449584350643924391984800978193707795909956472992631004290479273525116959461856227262232600089176950810729475058260332177626961286009876630340945093629959302803189668904123890991069113826241497783666995751391361028949651
Ciphertext =  1709187240516367141460862187749451047644094885791761673574674330840842792189795049968394122216854491757922647656430908587059997070488674220330847871811836724541907666983042376216411561826640060734307013458794925025684062804589439843027290282034999617915124231838524593607080377300985152179828199569474241678651559771763395596697140206072537688129790126472053987391538280007082203006348029125729650207661362371936196789562658458778312533505938858959644541233578654340925901963957980047639114170033936570060250438906130591377904182111622236567507022711176457301476543461600524993045300728432815672077399879668276471832
'''

分析

分析一下代码,就是在求pqc

有一个坑,这里的gen_p的p不是我们要用的p,千万别被骗了

根据求q部分的代码,我们最终需要的是Q,所以也可以在gen_q函数中加入print("q:",q)将q输出

这个利用源程序运行很慢,但是他已经告诉了我们与Q相关的数据我们可以自己利用简单的计算代码求解

import sympy
import gmpy2
Q_1=103766439849465588084625049495793857634556517064563488433148224524638105971161051763127718438062862548184814747601299494052813662851459740127499557785398714481909461631996020048315790167967699932967974484481209879664173009585231469785141628982021847883945871201430155071257803163523612863113967495969578605521
Q_2=151010734276916939790591461278981486442548035032350797306496105136358723586953123484087860176438629843688462671681777513652947555325607414858514566053513243083627810686084890261120641161987614435114887565491866120507844566210561620503961205851409386041194326728437073995372322433035153519757017396063066469743
sub_Q= 168992529793593315757895995101430241994953638330919314800130536809801824971112039572562389449584350643924391984800978193707795909956472992631004290479273525116959461856227262232600089176950810729475058260332177626961286009876630340945093629959302803189668904123890991069113826241497783666995751391361028949651
q=sympy.nextprime(gmpy2.powmod(sub_Q,Q_2,Q_1))
print(q)

解题脚本

综合上述条件,最终已知条件有pqec足够我们得到flag了

P_p=206027926847308612719677572554991143421
P_factor=213671742765908980787116579976289600595864704574134469173111790965233629909513884704158446946409910475727584342641848597858942209151114627306286393390259700239698869487469080881267182803062488043469138252786381822646126962323295676431679988602406971858136496624861228526070581338082202663895710929460596143281673761666804565161435963957655012011051936180536581488499059517946308650135300428672486819645279969693519039407892941672784362868653243632727928279698588177694171797254644864554162848696210763681197279758130811723700154618280764123396312330032986093579531909363210692564988076206283296967165522152288770019720928264542910922693728918198338839
q=95170653714081687088760585440906768700419459767774333757336842864507607081809193370870747769993218256925111100260761958233280546585624501259121060195932474781731613458132842656517609786144352755126076860272047457230913808406105832246663969943550533958139118721153456230616182820319799156494938586844573835221
c=1709187240516367141460862187749451047644094885791761673574674330840842792189795049968394122216854491757922647656430908587059997070488674220330847871811836724541907666983042376216411561826640060734307013458794925025684062804589439843027290282034999617915124231838524593607080377300985152179828199569474241678651559771763395596697140206072537688129790126472053987391538280007082203006348029125729650207661362371936196789562658458778312533505938858959644541233578654340925901963957980047639114170033936570060250438906130591377904182111622236567507022711176457301476543461600524993045300728432815672077399879668276471832
e = 65537import gmpy2
import Crypto
import sympy
import binascii
P=[]
for i in range(9):P_p=sympy.prevprime(P_p)
P.append(P_p)
for i in range(1,17):P.append(sympy.nextprime(P[i-1]))
n=1
phi=1
for i in range(17):n*=P[i]phi*=(P[i]-1)
based=gmpy2.invert(e,phi)
_p=gmpy2.powmod(P_factor,based,n)
p=sympy.nextprime(_p)
d=gmpy2.invert(e,(p-1)*(q-1))
flag=gmpy2.powmod(c,d,p*q)print(binascii.unhexlify(hex(flag)[2:]))

flag

很久没有一道做那么久了,人麻了

BUUCTF·[MRCTF2020]babyRSA·WP相关推荐

  1. BUUCTF·[NCTF2019]babyRSA·wp

    BUUCTF在线评测 (buuoj.cn) 附件 from Crypto.Util.number import * from flag import flagdef nextPrime(n):n += ...

  2. BUUCTF [MRCTF2020]套娃

    BUUCTF [MRCTF2020]套娃 打开链接,查看源码,如图所示 关于$_SERVER['QUERY_STRING']取值, 例如: http://localhost/aaa/?p=222 $_ ...

  3. BUUCTF·[MRCTF2020]天干地支+甲子·WP

    题目来源 BUUCTF在线评测 (buuoj.cn) 附件 得到得字符串用MRCTF{}包裹 一天Eki收到了一封来自Sndav的信,但是他有点迷希望您来解决一下 甲戌 甲寅 甲寅 癸卯 己酉 甲寅 ...

  4. BUUCTF Crypto [GUET-CTF2019]BabyRSA wp

    这题RSA非常简单,给出了p+q和(p+1)*(q+1)的值,通过简单的拼凑就可以得到n和欧拉函数phin的值,直接求得flag出来,脚本如下 // python2 import gmpy2 a =0 ...

  5. BUUCTF PWN rip1 WP

    BUUCTF   PWN   rip 1 这是一个WP,也是一个自己练习过程的记录. 先把文件放入pwn机中检查一下,发现并没有开启保护,所以应该是一道简单题 我们运行一下试试,它让你输入一段字符然后 ...

  6. Buuctf:[MRCTF2020]你传你呢

    这名字怎么还骂人呢? 打开靶机 这个题特别坑人.我们先上传一个图片试试. 上传不成功.当场给我干蒙了.正常图片也不能传?后来看别人的wp才知道这一题限制文件大小. 好了我们言归正传.思路还是上传一句话 ...

  7. BUUCTF·[AFCTF2018]Vigenère·WP

    BUUCTF在线评测 (buuoj.cn) 附件 Yzyj ia zqm Cbatky kf uavin rbgfno ig hnkozku fyyefyjzy sut gha pruyte gu f ...

  8. [MRCTF2020]PYWebsite -wp

    查看源码 发现一段前段验证,然后发现在目录下有一个flag.php 提示验证在后端,所以前面那个前端验证没用(也正常,前端验证都可以直接修改) 购买者的ip已经被记录,本地可以看到flag,那么使用x ...

  9. buuctf[MRCTF2020]Ez_bypass

    F12查看源代码: I put something in F12 for you include 'flag.php'; $flag='MRCTF{xxxxxxxxxxxxxxxxxxxxxxxxx} ...

最新文章

  1. Linux----进程概念
  2. 敏捷开发签名人建议开发者放弃“敏捷”
  3. 如何用babel将ES6转换
  4. 定位系统服务器,android系统定位服务器地址
  5. 爬虫python下载电影_python爬虫:抓取下载电影文件,合并ts文件为完整视频
  6. NO.4 Android开发中常用框架及工具
  7. Linux怎么修改用户密码
  8. VisualStudio开发工具中的C#主流控件属性及事件汇总(菜鸟必备)
  9. html微软雅黑无效,移动端h5不支持font-family里面的楷体、微软雅黑等字体
  10. windows启动winload.exe的数字签名错误问题
  11. ThinkPHP3.2.3从php5升级到php7艰辛之路
  12. 统计学基础知识有哪些?看这一篇就够了
  13. 用pycharm编写程序调用ADS仿真历程
  14. [原]极域电子教室3个没被发现的bug(V6 2007)
  15. ibm的odm使用_使用IBM ODM API生成规则工件
  16. fail2ban 的使用
  17. 安装google输入法后,左shift键不能切换中英文
  18. echarts散点图中大小_ECharts如何实现散点图
  19. c语言编程三角波,STM32 三角波输出
  20. http://www.cnblogs.com/wayfarer/archive/2004/09/29/47896.html

热门文章

  1. 在windows10系统中,用qemu软件创建ARM构架虚拟机
  2. 化学催化剂行业关键领域及整体市场规模分析
  3. C. Numbers on Whiteboard(思维+规律)
  4. 常在河边走哪有不湿鞋-IT人银行卡被盗刷
  5. dva是什么游戏_守望dva下载_守望dva大全_手游排行榜_网游/单机游戏_九游
  6. 天地图开发--打点,圈画行政区域
  7. MySQL 查看所有表和表字段
  8. Cisco ❀ LLMNR-本地域名解析服务
  9. PetiteVue - Vue 作者尤雨溪新作品,小巧精简版的 Vue
  10. x299服务器芯片,【华硕X299评测】处理器和主板的选择-中关村在线