YouQu的密码算法(四)

admin 2021年3月24日15:13:51评论10 views字数 9485阅读31分37秒阅读模式

前言

2021的HVV着实是比往年要忙的多,红队的手法没什么大变化,蓝队的紧张程度确实与日俱增,今年的HVV也是收获了一些比较有意思的东西,随后慢慢整理,慌慌忙忙从客户现场到家,路上想来想去密码算法的RSA这一部分到这里基本上就可以结束了,接着写的话就是补充AES,单单从CTF的角度来将密码学的话,除了传统的密码学之外,大型比赛也就是顶多围绕着RSA和AES来出题目到,到这里来说RSA的加解密难度再提高也不会增加到多少难度,,,分享两道题目。

[BJDCTF 2nd]rsa1

创建实例环境之后拿到了info,访问之后能查看e=13485281 不管是想要加密还是想要解密,仅仅知道e值无法解答,那么肯定还有其他的提示信息,其实就是常见的信息搜集,一般套路就是爆破目录或者扫端口等等,仅ctf来说想要拿到想要了解的pq等信息比较简单,随手尝试·index.html·,就拿到了数据

e=15743993
p^2+q^2=236274300085875694657043388992194451470340833870715320841446031204480246578849560556765072091156764438172831303882820888487294299198650837945126650857068058860343101329101208487143668688773927373175876899440492708231863985130792407061369665519442473903740855419470124401595314607645147851136753265430314203610
p-q=4756647724633343708492365300641797534561593992268717105608267730941950712925089102088047943405649480125018254380625534806581511921954926325547863790665108
c=49354383152604172473408602062938061357605281419792226325297786654698757139468206375525971692355717663488115932938165227031004613263213157529765804451725874242591383794592997080199123375198598647330028636284667341646083282484476219357090573254997323299152251628105015962668872776221391247780559910003393954261
flag=??????

然后发现e值是在不断的变化的,那么接下来的思路就是拿已知信息去根据RSA的加密算法求flag,根据RSA算法写出python脚本 那么就先解出p和q,然后根据e进行RSA加密拿到flag

脚本如下

from sympy import *from gmpy2 import *p,q= symbols('p,q')print(solve([p*p+q*q-236274300085875694657043388992194451470340833870715320841446031204480246578849560556765072091156764438172831303882820888487294299198650837945126650857068058860343101329101208487143668688773927373175876899440492708231863985130792407061369665519442473903740855419470124401595314607645147851136753265430314203610,p-q-4756647724633343708492365300641797534561593992268717105608267730941950712925089102088047943405649480125018254380625534806581511921954926325547863790665108],[p,q]))

得到p和q RSA解密

from gmpy2 import *# p,q= symbols('p,q')#print(solve([p*p+q*q-236274300085875694657043388992194451470340833870715320841446031204480246578849560556765072091156764438172831303882820888487294299198650837945126650857068058860343101329101208487143668688773927373175876899440492708231863985130792407061369665519442473903740855419470124401595314607645147851136753265430314203610,p-q-4756647724633343708492365300641797534561593992268717105608267730941950712925089102088047943405649480125018254380625534806581511921954926325547863790665108],[p,q]))p=12984016939568764190964805308575676385230589248622891312665629061518324104239597896614885136847698756823602329315138809097378451073416211069187057669434637q=8227369214935420482472440007933878850668995256354174207057361330576373391314508794526837193442049276698584074934513274290796939151461284743639193878769529e=15743993c=49354383152604172473408602062938061357605281419792226325297786654698757139468206375525971692355717663488115932938165227031004613263213157529765804451725874242591383794592997080199123375198598647330028636284667341646083282484476219357090573254997323299152251628105015962668872776221391247780559910003393954261phin = (p-1)*(q-1)n=p*qd=invert(e,phin)m=pow(c,d,n)flag=hex(m)[2:].decode('hex')
print flag

 

[NCTF2019]childRSA

下载拿到的文件内容如下

 

from random import choicefrom Crypto.Util.number import isPrime, sieve_base as primesfrom flag import flag

def getPrime(bits):    while True:        n = 2        while n.bit_length() < bits:            n *= choice(primes)        if isPrime(n + 1):            return n + 1
e = 0x10001m = int.from_bytes(flag.encode(), 'big')p, q = [getPrime(2048) for _ in range(2)]n = p * qc = pow(m, e, n)
# n = 32849718197337581823002243717057659218502519004386996660885100592872201948834155543125924395614928962750579667346279456710633774501407292473006312537723894221717638059058796679686953564471994009285384798450493756900459225040360430847240975678450171551048783818642467506711424027848778367427338647282428667393241157151675410661015044633282064056800913282016363415202171926089293431012379261585078566301060173689328363696699811123592090204578098276704877408688525618732848817623879899628629300385790344366046641825507767709276622692835393219811283244303899850483748651722336996164724553364097066493953127153066970594638491950199605713033004684970381605908909693802373826516622872100822213645899846325022476318425889580091613323747640467299866189070780620292627043349618839126919699862580579994887507733838561768581933029077488033326056066378869170169389819542928899483936705521710423905128732013121538495096959944889076705471928490092476616709838980562233255542325528398956185421193665359897664110835645928646616337700617883946369110702443135980068553511927115723157704586595844927607636003501038871748639417378062348085980873502535098755568810971926925447913858894180171498580131088992227637341857123607600275137768132347158657063692388249513# c = 26308018356739853895382240109968894175166731283702927002165268998773708335216338997058314157717147131083296551313334042509806229853341488461087009955203854253313827608275460592785607739091992591431080342664081962030557042784864074533380701014585315663218783130162376176094773010478159362434331787279303302718098735574605469803801873109982473258207444342330633191849040553550708886593340770753064322410889048135425025715982196600650740987076486540674090923181664281515197679745907830107684777248532278645343716263686014941081417914622724906314960249945105011301731247324601620886782967217339340393853616450077105125391982689986178342417223392217085276465471102737594719932347242482670320801063191869471318313514407997326350065187904154229557706351355052446027159972546737213451422978211055778164578782156428466626894026103053360431281644645515155471301826844754338802352846095293421718249819728205538534652212984831283642472071669494851823123552827380737798609829706225744376667082534026874483482483127491533474306552210039386256062116345785870668331513725792053302188276682550672663353937781055621860101624242216671635824311412793495965628876036344731733142759495348248970313655381407241457118743532311394697763283681852908564387282605279108

解密脚本如下

from Crypto.Util.number import sieve_base as primesimport gmpy2n = 32849718197337581823002243717057659218502519004386996660885100592872201948834155543125924395614928962750579667346279456710633774501407292473006312537723894221717638059058796679686953564471994009285384798450493756900459225040360430847240975678450171551048783818642467506711424027848778367427338647282428667393241157151675410661015044633282064056800913282016363415202171926089293431012379261585078566301060173689328363696699811123592090204578098276704877408688525618732848817623879899628629300385790344366046641825507767709276622692835393219811283244303899850483748651722336996164724553364097066493953127153066970594638491950199605713033004684970381605908909693802373826516622872100822213645899846325022476318425889580091613323747640467299866189070780620292627043349618839126919699862580579994887507733838561768581933029077488033326056066378869170169389819542928899483936705521710423905128732013121538495096959944889076705471928490092476616709838980562233255542325528398956185421193665359897664110835645928646616337700617883946369110702443135980068553511927115723157704586595844927607636003501038871748639417378062348085980873502535098755568810971926925447913858894180171498580131088992227637341857123607600275137768132347158657063692388249513c = 26308018356739853895382240109968894175166731283702927002165268998773708335216338997058314157717147131083296551313334042509806229853341488461087009955203854253313827608275460592785607739091992591431080342664081962030557042784864074533380701014585315663218783130162376176094773010478159362434331787279303302718098735574605469803801873109982473258207444342330633191849040553550708886593340770753064322410889048135425025715982196600650740987076486540674090923181664281515197679745907830107684777248532278645343716263686014941081417914622724906314960249945105011301731247324601620886782967217339340393853616450077105125391982689986178342417223392217085276465471102737594719932347242482670320801063191869471318313514407997326350065187904154229557706351355052446027159972546737213451422978211055778164578782156428466626894026103053360431281644645515155471301826844754338802352846095293421718249819728205538534652212984831283642472071669494851823123552827380737798609829706225744376667082534026874483482483127491533474306552210039386256062116345785870668331513725792053302188276682550672663353937781055621860101624242216671635824311412793495965628876036344731733142759495348248970313655381407241457118743532311394697763283681852908564387282605279108t=pow(2,2048)e = 0x10001k=2for i in range(10000):    k=pow(k,primes[i],n)    if(k>t):        if(i%15==0):            if(gmpy2.gcd(k-1,n)!=1):                print(gmpy2.gcd(k-1,n))                #178449493212694205742332078583256205058672290603652616240227340638730811945224947826121772642204629335108873832781921390308501763661154638696935732709724016546955977529088135995838497476350749621442719690722226913635772410880516639651363626821442456779009699333452616953193799328647446968707045304702547915799734431818800374360377292309248361548868909066895474518333089446581763425755389837072166970684877011663234978631869703859541876049132713490090720408351108387971577438951727337962368478059295446047962510687695047494480605473377173021467764495541590394732685140829152761532035790187269724703444386838656193674253139                breakp=gmpy2.gcd(k-1,n)q=n//pphi=(p-1)*(q-1)d=gmpy2.invert(e,phi)m=pow(c,d,n)flag=hex(m)[2:].decode('hex')print(flag)

 

这个题目的难度其实就在于p和q的求解,跟据加密算法使用的模块save_base的提示使用费马定理求解p和q,那么就可以求解flag

此题的参考链接:

https://www.it610.com/article/1290998608790888448.htm

 

原文始发于微信公众号(鼎信安全):YouQu的密码算法(四)

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2021年3月24日15:13:51
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   YouQu的密码算法(四)https://cn-sec.com/archives/1082743.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息