NSSCTF Crypto靶场练习,31-40WP
文章目录
[NISACTF 2022]normal
套娃题
先用OoK – Unicode – base64 — bubblebabble – ROT13
解密网址https://www.splitbrain.org/services/ook
https://gchq.github.io/CyberChef/#recipe=ROT13(true,true,false,13)&input=QVZGTntoX3hhMGpfalVAZ18hX2d1dmFYfQ
https://tool.chinaz.com/tools/unicode.aspx
http://www.hiencode.com/
最后NISA改为NISSCTF就好了。
[LitCTF 2023]原来你也玩原神 (初级)
不太想做,但是强迫症。贴个wp吧
WP链接:https://www.nssctf.cn/note/set/2178
[BJDCTF 2020]EasyRSA
差点被骗了,真的是easyRSA
直接用factordb分解n就好。
EXP:
from Crypto.Util.number import *
from gmpy2 import *
p = 105909195259921349656664570904199242969110902804477734660927330311460997899731622163728968380757294196277263615386525795293086103142131020215128282050307177125962302515483190468569376643751587606016315185736245896434947691528567696271911398179288329609207435393579332931583829355558784305002360873458907029141
q = 144564833334456076455156647979862690498796694770100520405218930055633597500009574663803955456004439398699669751249623406199542605271188909145969364476344963078599240058180033000440459281558347909876143313940657252737586803051935392596519226965519859474501391969755712097119163926672753588797180811711004203301
c = 7922547866857761459807491502654216283012776177789511549350672958101810281348402284098310147796549430689253803510994877420135537268549410652654479620858691324110367182025648788407041599943091386227543182157746202947099572389676084392706406084307657000104665696654409155006313203957292885743791715198781974205578654792123191584957665293208390453748369182333152809882312453359706147808198922916762773721726681588977103877454119043744889164529383188077499194932909643918696646876907327364751380953182517883134591810800848971719184808713694342985458103006676013451912221080252735948993692674899399826084848622145815461035
e = 65537
n = p * q
phi = (p - 1) * (q - 1)
d = invert(e, phi)
print(long_to_bytes(pow(c, d, n)))
不过嘛做题的目的是学习而不是做题。
所以再看看
z=Fraction(1,Derivative(arctan(p),p))-Fraction(1,Derivative(arth(q),q))
关键就在于这行代码
已知 arctan()
函数是反正切函数, arth()
函数是反双曲正切函数。
而Derivative(a,b)
函数就是对 a 函数关于 b 变量的求导。已知它们俩的导函数分别是
1/1+x**2
1/1-x**2
再看, Fraction(1,a)
函数就是 做个倒数,即 1/b
所以这一行代码化简下来就是
z = p**2 + q**2
那样就简单了,已知 n = p * q
我是用z3求出来的,
from z3 import *
s = Solver()
p, q = Ints('p q')
z = 32115748677623209667471622872185275070257924766015020072805267359839059393284316595882933372289732127274076434587519333300142473010344694803885168557548801202495933226215437763329280242113556524498457559562872900811602056944423967403777623306961880757613246328729616643032628964072931272085866928045973799374711846825157781056965164178505232524245809179235607571567174228822561697888645968559343608375331988097157145264357626738141646556353500994924115875748198318036296898604097000938272195903056733565880150540275369239637793975923329598716003350308259321436752579291000355560431542229699759955141152914708362494482
n = 15310745161336895413406690009324766200789179248896951942047235448901612351128459309145825547569298479821101249094161867207686537607047447968708758990950136380924747359052570549594098569970632854351825950729752563502284849263730127586382522703959893392329333760927637353052250274195821469023401443841395096410231843592101426591882573405934188675124326997277775238287928403743324297705151732524641213516306585297722190780088180705070359469719869343939106529204798285957516860774384001892777525916167743272419958572055332232056095979448155082465977781482598371994798871917514767508394730447974770329967681767625495394441
s.add(p ** 2 + q ** 2 == z)
s.add(p * q == n)
if s.check() == sat:
print(s.model())
else:
print("no")
'''
[q = 105909195259921349656664570904199242969110902804477734660927330311460997899731622163728968380757294196277263615386525795293086103142131020215128282050307177125962302515483190468569376643751587606016315185736245896434947691528567696271911398179288329609207435393579332931583829355558784305002360873458907029141,
p = 144564833334456076455156647979862690498796694770100520405218930055633597500009574663803955456004439398699669751249623406199542605271188909145969364476344963078599240058180033000440459281558347909876143313940657252737586803051935392596519226965519859474501391969755712097119163926672753588797180811711004203301]
'''
看了下他佬的WP,学习一下:
已知 z = p**2 + q**2
和 n = p * q
简单的数学公式:
(p + q)**2 = p**2 + q**2 + 2p*q
(p - q)**2 = p**2 + q**2 - 2p*q
可以得到
p + q = iroot(z+2n,2)
p - q = iroot(z-2n,2)
因此代码:
paddq,mod = iroot(z+2*n,2)
pmulq,mod = iroot(z-2*n,2)
p = (paddq + pmulq)//2
q = paddq - p
就可以得到p和q了,搞定
[闽盾杯 2021]decode
题目给了三组c,e,n
考虑到模不互素
关键代码:
q1 = gcd(n1,n2)
q3 = gcd(n2,n3)
这样可以求出 n1和n2 的最大公约数,继而求出p1,再求 n2和n3 的最大公约数,求出p3
之后根据最大公约数的性质,n2的p和q实际上就是 q1和q3
EXP:
from gmpy2 import *
from Crypto.Util.number import *
n1 = 15228664629164509105936278301396170708905691970126305196584505186788860519598413718493859625462561931380632032431490419378905593909771649295663481782473029836321132574188559245931660756414915507930357509270674460219615256962333464689419869130366867401404262606367700782040693275068101244535880649261286041921882470460606034302142183971677715439862839410834231609821777031530457674591868138859358815039755085358568037032478394036448363183057305077227769673701227083943898736796552550712057417053897722979700329662099072959306298177351997084389916443815546425080826441671985030755256185725913397986385179516049927425591
n2 = 28182418532443955655250943929828439725377604572088962537896240628709829618999901367131159759359513146864646169253348651905865895468151210748207509325666501438590382812326109260537618829438786609626137074778638549998280533912080708785604673270460635181275360847313985764185991865570533815651261638439461846512012164531330949433517277559149828806588070421852157781670188281908625986974579194819272643409859915715455134433970119584552350648013116998668938513347083566970423327936691885137812528912263666957628197241313496232397910546498542303925205356813548741679943691886217742767778075067797422624969714343428365022749
n3 = 18355811159408154065817199279776805621878757240392366715869421799780946779485225342662736231980532326015283372375030686507311099745671828649419794838611580909610100636296701054995302819692794479292794716441442731393027118795245239019609474743841061251498233337758043553376098591254587406941205804917663153256036922860462415387926973551020540123742773938055950168965005226319984869124543783579240130888344231027912143592472823564266887957101575622993773291455143915263715932280728961208233983782906070719786115187115449430196335973764600533097718947377609348244073036523422892353195107093782201003551217830556519184839
e1 = 65537
e2 = 27751
e3 = 65537
c1 = 5368342382489380107251269030258282008067103595899117880173297169710980852124379736420135829984131832023988667774795223808420069001078159756328642298736759964890517323144475742861501409284299556459601222657540302786301791897975932176538612601162552795835603779910738886150925504885639254302406755008796950704938463132687940418772021406619622090999564746948113296328739593309200238996686945891130656599419832796482095787039339269564880847130379179831744694000940207887150388411084465949903406848727641093033681144598595895383689139227400553234701993087147186292040330589331703587405822925483701667354935313494938769206
c2 = 21521672635651854919517759696514027081496995002884626306313384597771682621826437868933822942195279941318573525337109548152966094293276717095298929811895186384560362917891928656637913236676702009205642367801075592458101830488916914437754803979953027152373619293870115731171449223105986403604973873007338969000153480949617700626516389419935352576014084068271819009465242491467427642787306345049280205827574043586767133396458785487959251540831856187380154825027964867977651727983254127239427622549059938701125498520279503972702883327594442747467858234391945790597844344295786118320620376681461727686876948563884520137741
c3 = 13940747781246179701167820858098775936269078279837839169409057305686612176371099274767269714494905207551971162649902129137425806839867713157472497469542260664882313041602553845621113546259276402534229231780532278276697961222319054833980226978574905974878218905613341365260453461080117407529132948986104191917111000811731784483944945364091757083949827612260904757837644538366763161154611658652020868326985526984718638276184626634240096213703958275241215175054246685206226179114590838833694648062135027841593419815101363262701960507235056752424778384286627997500871204804629047307688466887868894491042058198480775705486
q1 = gcd(n1,n2)
q3 = gcd(n2,n3)
p1 = n1 // q1
phi1 = (p1 - 1) * (q1 - 1)
d1 = invert(e1, phi1)
print(long_to_bytes(pow(c1, d1, n1)))
# flag{G00d_w4
phi2 = (q1 - 1) * (q3 - 1)
d2 = invert(e2,phi2)
print(long_to_bytes(pow(c2,d2,n2)))
# y_tO_cR
p3 = n3 // q3
phi3 = (p3 - 1) * (q3 - 1)
d3 = invert(e3, phi3)
print(long_to_bytes(pow(c3, d3, n3)))
# 4ck_RS4}
[BJDCTF 2020]rsa_output
标题名称是RSA,观察output,推测可以使用共模攻击
EXP:
from Crypto.Util.number import *
from gmpy2 import *
n = 21058339337354287847534107544613605305015441090508924094198816691219103399526800112802416383088995253908857460266726925615826895303377801614829364034624475195859997943146305588315939130777450485196290766249612340054354622516207681542973756257677388091926549655162490873849955783768663029138647079874278240867932127196686258800146911620730706734103611833179733264096475286491988063990431085380499075005629807702406676707841324660971173253100956362528346684752959937473852630145893796056675793646430793578265418255919376323796044588559726703858429311784705245069845938316802681575653653770883615525735690306674635167111
c1=20152490165522401747723193966902181151098731763998057421967155300933719378216342043730801302534978403741086887969040721959533190058342762057359432663717825826365444996915469039056428416166173920958243044831404924113442512617599426876141184212121677500371236937127571802891321706587610393639446868836987170301813018218408886968263882123084155607494076330256934285171370758586535415136162861138898728910585138378884530819857478609791126971308624318454905992919405355751492789110009313138417265126117273710813843923143381276204802515910527468883224274829962479636527422350190210717694762908096944600267033351813929448599
c2=11298697323140988812057735324285908480504721454145796535014418738959035245600679947297874517818928181509081545027056523790022598233918011261011973196386395689371526774785582326121959186195586069851592467637819366624044133661016373360885158956955263645614345881350494012328275215821306955212788282617812686548883151066866149060363482958708364726982908798340182288702101023393839781427386537230459436512613047311585875068008210818996941460156589314135010438362447522428206884944952639826677247819066812706835773107059567082822312300721049827013660418610265189288840247186598145741724084351633508492707755206886202876227
e1 = 2767
e2 = 3659
gcd, s, t = gmpy2.gcdext(e1, e2)
if s < 0:
s = -s
c1 = invert(c1, n)
elif t < 0:
t = -t
c2 = invert(c2, n)
m = pow(c1, s, n) * pow(c2, t, n) % n
print(long_to_bytes(m))
# b'BJD{r3a_C0mmoN_moD@_4ttack}'
[HDCTF 2023]Normal_Rsa
这一题,一言难尽,出题人flag忘记删了。
说说知识点,p和q都是小明文攻击,因为e是2,且p的2次方明显小于n,所以都直接对P和Q开方就可以得到p,q了。之后再求phi,求d。
这里有个问题,就是 e 和 phi 互质了,所以演化成了一个有限域开方的问题
AMM算法也还不懂。先记着。
[NSSCTF 2022 Spring Recruit]Vigenere
维吉尼亚密码,网站嗦一下https://www.guballa.de/vigenere-solver
[UTCTF 2020]basics
又套娃
二进制,先转换,根据提示再base64
第一句话提示,这里可以直接字频分析,也可以凯撒(10位)
可以得到 新的密文,翻译一下
最后一次肯定还是字频分析 https://quipqiup.com/
总结:二进制–base64–凯撒–字频分析
[WUSTCTF 2020]佛说:只能四天
与佛论道http://hi.pcmoe.net/buddha.html
核心价值观编码http://www.hiencode.com/cvencode.html
根据hint,下一个是栅栏密码,要先提示信息 doyouknowfence删除,不然解不出来,而且这里用的是加密
之后是凯撒密码。不过这又是解密了。
根据密文,是base32的特征。
直言。感觉这种题,挺没意思的。套娃套娃。一下加密一下解密的,跟原神那题一样,不如放去misc。
[HGAME 2022 week3]RSA attack 3
判断: d很小,e很大。可以利用低解密指数攻击。
攻击脚本在github上有 https://github.com/pablocelayes/rsa-wiener-attack
注意wiener-attack脚本要和EXP放在一起。
EXP:
from Crypto.Util.number import long_to_bytes
import RSAwienerHacker
n = 507419170088344932990702256911694788408493968749527614421614568612944144764889717229444020813658893362983714454159980719026366361318789415279417172858536381938870379267670180128174798344744371725609827872339512302232610590888649555446972990419313445687852636305518801236132032618350847705234643521557851434711389664130274468354405273873218264222293858509477860634889001898462547712800153111774564939279190835857445378261920532206352364005840238252284065587291779196975457288580812526597185332036342330147250312262816994625317482869849388424397437470502449815132000588425028055964432298176942124697105509057090546600330760364385753313923003549670107599757996810939165300581847068233156887269181096893089415302163770884312255957584660964506028002922164767453287973102961910781312351686488047510932997937700597992705557881172640175117476017503918294534205898046483981707558521558992058512940087192655700351675718815723840568640509355338482631416345193176708501897458649841539192993142790402734898948352382350766125000186026261167277014748183012844440603384989647664190074853086693408529737767147592432979469020671772152652865219092597717869942730499507426269170189547020660681363276871874469322437194397171763927907099922324375991793759
e = 77310199867448677782081572109343472783781135641712597643597122591443011229091533516758925238949755491395489408922437493670252550920826641442189683907973926843505436730014899918587477913032286153545247063493885982941194996251799882984145155733050069564485120660716110828110738784644223519725613280140006783618393995138076030616463398284819550627612102010214315235269945251741407899692274978642663650687157736417831290404871181902463904311095448368498432147292938825418930527188720696497596867575843476810225152659244529481480993843168383016583068747733118703000287423374094051895724494193455175131120243097065270804457787026492578916584536863548445813916819417857064037664101684455000184987531252344582899589746272173970083733130106407810619258077266603898529285634495710846838011858287024329514491058790557305041389614650730267774482954666726949886313386881066593946789460028399523245777171320319444673551268379126203862576627540177888290265714418064334752499940587750374552330008143708562065940245637685833371348603338834447212248648869514585047871442060412622164276894766238383894693759347590977926306581080390685360615407766600573527565016914830132066428454738135380178959590692145577418811677639050929791996313180297924833690095
c = 165251729917394529793163344300848992394021337429474789711805041655116845722480301677817165053253655027459227404782607373107477419083333844871948673626672704233977397989843349633720167495862807995411682262559392496273163155214888276398332204954185252030616473235814999366132031184631541209554169938146205402400412307638567132128690379079483633171535375278689326189057930259534983374296873110199636558962144635514392282351103900375366360933088605794654279480277782805401749872568584335215630740265944133347038070337891035560658434763924576508969938866566235926587685108811154229747423410476421860059769485356567301897413767088823807510568561254627099309752215808220067495561412081320541540679503218232020279947159175547517811501280846596226165148013762293861131544331444165070186672186027410082671602892508739473724143698396105392623164025712124329254933353509384748403154342322725203183050328143736631333990445537119855865348221215277608372952942702104088940952142851523651639574409075484106857403651453121036577767672430612728022444370874223001778580387635197325043524719396707713385963432915855227152371800527536048555551237729690663544828830627192867570345853910196397851763591543484023134551876591248557980182981967782409054277224
d = RSAwienerHacker.hack_RSA(e,n)
if d:
print(d)
m = pow(c,d,n)
print(long_to_bytes(m))
# b'hgame{dO|YOU:kNOw!tHE*PRINcIplE*bEhInd%WInNEr#aTTacK}'
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!