『CTF』一道题目赛后分享

admin 2024年12月16日22:02:54评论10 views字数 9894阅读32分58秒阅读模式
『CTF』一道题目赛后分享

点击蓝字,关注我们

日期:2024年12月16号

作者:jgk01

介绍:泰山杯一道c组密码题。

0x00 前言

分享一道泰山杯c组的密码题,场内出了前半段,后半段当时没想到,结束以后复盘题目的时候做出来了,分享一下做题思路。

0x01 题目

题目脚本:

import gmpy2from Crypto.Util.number import *from secret import flagflag = long_to_bytes(flag1) + long_to_bytes(flag2)p1 = getPrime(1024)q1 = getPrime(1024)p2 = getPrime(512)q2 = getPrime(512)n1 = p1 * q1n2 = p2 * q2e = 65537hint = pow(1024*p1 - 197*q1, n1-p1-q1, n1)c1 = pow(flag1,e,n1)c2 = pow(flag2,p2,n2)c3 = pow(flag2,q2,n2)print(n1)print(c1)print(hint)print(n2)print(c2)print(c3)"999309517449186172213690374829829770941290227930252013923307858172895534109235981257638294591772103021889172186286672709153342254038309305782248998050785040103562413983880170050355506360066515474908842548268818974826522294186135459426932286577904479436272606301684767032563889724258276781616044773524870221138525332883002463336402324371120448117198724486213195020780684991978414258500998424825370850246462906831198399093463100137684471133708454378414558424753561225512261668083414319871107494956539335271840219408369607463241095506573851437193418299434666252458710500349278853123025560415414699746187554944943535261364916457955737172948179717181191974258885634608200527400429212508363877375417673300287748319226324215916442896958523678803603450218558902708187646035530591757780828989403494417673066662701792994109958245360106402258778260682546873574899658943614067199285805415394746580094617467071090549051956630382488964545749123301933971084001508734152698290881687474649202895416486187531958639505143460807642330879800739887457557440141933666529738300049937944126579410511637129105680053667248829427418390479401653716694833946244533746132624757115259464664935132679144094652061319765992596721085573877398016395440738662747843569777529903766593789743203875105811805590623403238134744358069916057185419385329205467611860033764294674989772542073704729511422796271394307069883815525621236738350503410660419587759413356127716975834456703488074104519089921283629702825586315080664842218066710642563785449929868455613767740965885508578869787571827611317007683871913598070468433776708525736366268459334720410018972959397204686070137997198646315659212528936425343257899533854439580019931764644057337591761642720389438391799239426602950793694656030045650827200916728845532896403874871702260897080640969380062568182811783431664452646773160530412795171867089488965337718659401724084822694958412135738042806677693219167637811707144891714133608304369039025147648944572031629747965373611360220417504887257607412334318880064221300652074272059554324772334644923195819241974218926193232457631884520307659726860311200423420883915578183611643773530802154402243986157084579792776192514071839462367743104129350532849090550555951510289321991957863630215882271953012300654624182031351267344758858957935887528250086592775928409390546714466400911720132681576304339022226049990890163392858764558384467561892796314555474514688729695120597021542005245607608900269671292461763820973774451087043715978264074536089998502714696599120075311927007160736414403690767258228182302094211457982694002328282904586924034286237416150152638683498883249396452385100627664897623012777387817004904719999424014002347489403727189155676320600693899241470529282521488819279690007581921187455397776348749923718168574660987"

题目很明显是把flag分成了两段,所以是要解两个题。

0x02 第一段求解

第一段比较简单,给了hint,我们可以发现这个:

『CTF』一道题目赛后分享

开方以后我们两式相加得到2048倍的p1,这样p1q1就出来了,然后得到flag1

import gmpy2from Crypto.Util.number import *n1=9993095174491861722136903748298297709412902279302520139233078581728955341092359812576382945917721030218891721862866727091533422540383093057822489980507850401035624139838801700503555063600665154749088425482688189748265222941861354594269322865779044794362726063016847670325638897242582767816160447735248702211385253328830024633364023243711204481171987244862131950207806849919784142585009984248253708502464629068311983990934631001376844711337084543784145584247535612255122616680834143198711074949565393352718402194083696074632410955065738514371934182994346662524587105003492788531230255604154146997461875549449435352613c1=6491645795573717294817971718119197425888563460820052740042921250836387737541767330028774831922632421591644289695852367880360345021855890270818764603553059175778082898940349441767306666270179299410995824536010640225877826068254687357489965894361406719928580541539474658009461746707109054905195663038248896454574912330193397108400150873415269829088168747464920289541648618753195863950514346080764233087980073988745755744014193366652973830004993794412657941051163712910568005366724882942741839047940165371669483394624453374613262475711525946466493513267914409465206131976599259672108557387739801639544073866274784356977hint=7529903766593789743203875105811805590623403238134744358069916057185419385329205467611860033764294674989772542073704729511422796271394307069883815525621236738350503410660419587759413356127716975834456703488074104519089921283629702825586315080664842218066710642563785449929868455613767740965885508578869787571827611317007683871913598070468433776708525736366268459334720410018972959397204686070137997198646315659212528936425343257899533854439580019931764644057337591761642720389438391799239426602950793694656030045650827200916728845532896403874871702260897080640969380062568182811783431664452646773160530412795171867089n2=48896533771865940172408482269495841213573804280667769321916763781170714489171413360830436903902514764894457203162974796537361136022041750488725760741233431888006422130065207427205955432477233464492319581924197421892619323245763188452030765972686031120042342088391557818361164377353080215440224398615708457979c2=27761925140718394623677431041293505328490905505559515102893219919578636302158822719530123006546241820313512673447588589579358875282500865927759284093905467144664009117201326815763043390222260499908901633928587645583844675618927963145554745146887296951205970215420052456076089002696712924617638209737744510870c3=43715978264074536089998502714696599120075311927007160736414403690767258228182302094211457982694002328282904586924034286237416150152638683498883249396452385100627664897623012777387817004904719999424014002347489403727189155676320600693899241470529282521488819279690007581921187455397776348749923718168574660987e = 65537m1=gmpy2.invert(hint,n1)sub=m1qiuhe=sub**2+((4*1024*197)*n1)qiuhe2=gmpy2.iroot(qiuhe, 2)[0]p=(m1+qiuhe2)//2048q=n1//pd = gmpy2.invert(e,(p-1)*(q-1))flag1 = pow(c1,d,n1)print(long_to_bytes(int(flag1)))

0x03 第二段求解

然后再来处理flag2,这里需要用到coppersmithflag2

我们的已知条件是:

『CTF』一道题目赛后分享

两式相乘:

『CTF』一道题目赛后分享

利用flag1的长度来确定一下flag2的长度,最后总结代码:

import gmpy2from Crypto.Util.number import *n1=9993095174491861722136903748298297709412902279302520139233078581728955341092359812576382945917721030218891721862866727091533422540383093057822489980507850401035624139838801700503555063600665154749088425482688189748265222941861354594269322865779044794362726063016847670325638897242582767816160447735248702211385253328830024633364023243711204481171987244862131950207806849919784142585009984248253708502464629068311983990934631001376844711337084543784145584247535612255122616680834143198711074949565393352718402194083696074632410955065738514371934182994346662524587105003492788531230255604154146997461875549449435352613c1=6491645795573717294817971718119197425888563460820052740042921250836387737541767330028774831922632421591644289695852367880360345021855890270818764603553059175778082898940349441767306666270179299410995824536010640225877826068254687357489965894361406719928580541539474658009461746707109054905195663038248896454574912330193397108400150873415269829088168747464920289541648618753195863950514346080764233087980073988745755744014193366652973830004993794412657941051163712910568005366724882942741839047940165371669483394624453374613262475711525946466493513267914409465206131976599259672108557387739801639544073866274784356977hint=7529903766593789743203875105811805590623403238134744358069916057185419385329205467611860033764294674989772542073704729511422796271394307069883815525621236738350503410660419587759413356127716975834456703488074104519089921283629702825586315080664842218066710642563785449929868455613767740965885508578869787571827611317007683871913598070468433776708525736366268459334720410018972959397204686070137997198646315659212528936425343257899533854439580019931764644057337591761642720389438391799239426602950793694656030045650827200916728845532896403874871702260897080640969380062568182811783431664452646773160530412795171867089n2=48896533771865940172408482269495841213573804280667769321916763781170714489171413360830436903902514764894457203162974796537361136022041750488725760741233431888006422130065207427205955432477233464492319581924197421892619323245763188452030765972686031120042342088391557818361164377353080215440224398615708457979c2=27761925140718394623677431041293505328490905505559515102893219919578636302158822719530123006546241820313512673447588589579358875282500865927759284093905467144664009117201326815763043390222260499908901633928587645583844675618927963145554745146887296951205970215420052456076089002696712924617638209737744510870c3=43715978264074536089998502714696599120075311927007160736414403690767258228182302094211457982694002328282904586924034286237416150152638683498883249396452385100627664897623012777387817004904719999424014002347489403727189155676320600693899241470529282521488819279690007581921187455397776348749923718168574660987e = 65537m1=gmpy2.invert(hint,n1)sub=m1qiuhe=sub**2+((4*1024*197)*n1)qiuhe2=gmpy2.iroot(qiuhe, 2)[0]p=(m1+qiuhe2)//2048q=n1//pd = gmpy2.invert(e,(p-1)*(q-1))flag1 = pow(c1,d,n1)print(long_to_bytes(int(flag1)))flag1=long_to_bytes(int(flag1))n = n2P = c2Q = c3PR.<m> = PolynomialRing(Zmod(n))f = P*Q-m^2-m*(P-m+Q-m)f = f.monic()m = f.small_roots(X=2^(len(flag1)*2*8), beta=0.7)print(m)m=148183572893420514528542102387605309781817285502077flag2 = long_to_bytes(int(m))print(flag1+flag2)

0x04 后记

时间不是很足,还有做其他方向题目所以没时间看全部的题,等有时间再做做剩下的题。

『CTF』一道题目赛后分享

免责声明:本文仅供安全研究与讨论之用,严禁用于非法用途,违者后果自负。

点此亲启

原文始发于微信公众号(宸极实验室):『CTF』一道题目赛后分享

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

发表评论

匿名网友 填写信息