WEEK 5

XYCTF CRYPTO

由于比赛没打完,故先不发wp

一.Sign1n[签到]

题目:

from Crypto.Util.number import *
from tqdm import *
import gmpy2
flag=b'XYCTF{uuid}'
flag=bytes_to_long(flag)
leak=bin(int(flag))
while 1:
    leak += "0"
    if len(leak) == 514:
        break

def swap_bits(input_str):
    input_list = list(input_str[2:])
    length = len(input_list)

    for i in range(length // 2):
        temp = input_list[i]
        input_list[i] = input_list[length - 1 - i]
        input_list[length - 1 - i] = temp
    
    return ''.join(input_list)

input_str = leak
result = swap_bits(input_str)
a=result

def custom_add(input_str):
    input_list = list(input_str)
    length = len(input_list)
    

    for i in range(length):
        input_list[i] = str((int(input_list[i]) + i + 1) % 10)
    
    result = ''.join(input_list)
    return result


input_str = a
result = custom_add(input_str)
b=result
print(b)
#12345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567891134567780113445678012235667900134456899012456678001344577891223467780112355788901235667900134456780122355788001235578890133566799023445688902335578800133456899023346778011245567991223557880012346788911245667890234456889122355788001234578891133566780112455689912234677900133467889112456678901344578801233467789112355779912234577990233556780113

二.happy_to_solve1

题目:

from Crypto.Util.number import *
import sympy
from secrets import flag


def get_happy_prime():
    p = getPrime(512)
    q = sympy.nextprime(p ^ ((1 << 512) - 1))
    return p, q


m = bytes_to_long(flag)
p, q = get_happy_prime()
n = p * q
e = 65537
print(n)
print(pow(m, e, n))
# 24852206647750545040640868093921252282805229864862413863025873203291042799096787789288461426555716785288286492530194901130042940279109598071958012303179823645151637759103558737126271435636657767272703908384802528366090871653024192321398785017073393201385586868836278447340624427705360349350604325533927890879
# 14767985399473111932544176852718061186100743117407141435994374261886396781040934632110608219482140465671269958180849886097491653105939368395716596413352563005027867546585191103214650790884720729601171517615620202183534021987618146862260558624458833387692782722514796407503120297235224234298891794056695442287

三.factor1

题目:

import gmpy2
import hashlib
from Crypto.Util.number import *

p = getPrime(512)
q = getPrime(512)
d = getPrime(512)
e = gmpy2.invert(d, (p**3 - 1) * (q**3 - 1))
flag = "XYCTF{" + hashlib.md5(str(p + q).encode()).hexdigest() + "}"
print(e)
print(p * q)
# 172005065945326769176157335849432320425605083524943730546805772515111751580759726759492349719668775270727323745284785341119685198468883978645793770975366048506237371435027612758232099414404389043740306443065413069994232238075194102578269859784981454218948784071599231415554297361219709787507633404217550013282713899284609273532223781487419770338416653260109238572639243087280632577902857385265070736208291583497988891353312351322545840742380550393294960815728021248513046077985900158814037534487146730483099151396746751774427787635287611736111679074330407715700153025952858666841328055071403960165321273972935204988906850585454805923440635864200149694398767776539993952528995717480620593326867245714074205285828967234591508039849777840636255379730281105670496110061909219669860172557450779495125345533232776767292561378244884362014224844319802810586344516400297830227894063759083198761120293919537342405893653545157892446163
# 99075185389443078008327214328328747792385153883836599753096971412377366865826254033534293886034828804219037466246175526347014045811852531994537520303063113985486063022444972761276531422538694915030159420989401280012025249129111871649831185047820236417385693285461420040134313833571949090757635806658958193793

2023-SICTF-#Round2 CRYPTO

一.古典大杂烩

题目:

🐩👃🐪🐼👅🐯🐩👈👇👭👟👝🐺🐭👉👙👤👋👚🐪🐫👍👢👮👱🐼👢👨👠👭🐽🐰🐻👚👂👧👠👥👛👮👯👮👬🐾👐👛👌👚👞🐨👏👉👆🐿👆👘👇🐺👦🐸👃🐭👟👑👪👃👁🐻🐻👜🐧👇👊🐧🐾🐼👇🐫🐺👐👆👪🐼👋👌👧🐻👐🐩🐺👥🐽👋👉🐰👎👠👠👣🐧🐫👧🐭👢🐯👑👑🐮👂👏🐻👥👚🐮👋👬👌👥👁👣👅👧👯👦👌👌👍👠👌🐽👉👃👊🐫👉🐨🐮👩👆🐪🐯👘👏👏🐼👩👍👊👍👡👀👰👋👣👨👧👍👜👐👛🐮👘👅👠🐿👂👰👄👈👝👠👤👃👛👘🐭👅👱👆👬👫👥👆🐽👁👐👥👊👇👉👊👩👌👭🐫🐫👬👱🐯👇🐺👁👞👑👙🐮👜👋👘👪👩👚👦👨👀👩👐👉👃🐾👥👀🐫👝👍🐩🐧👰👆👇👨🐪👃🐭👦🐫👱

首先观察题目可知这道题为古典密码,然后再思考之前所学的,可知这个为**base 100 **编码

获得解码内容为:2L3EN82QPvhfC6RbmTc34VkwzEkqivF9DcKpindwxwuGYdUcg1XROHOaPCoAL6hZsLJDDe0PS0GEP4CYOsETUpDY2CnFTR9Wiil04p6k8ZZ7KXDnc7TuUnJlNpxoUUViUFRLS4R17rO38aXXErVSVjIyTlqpVeYd7aNiHKyMQfimLda6NzOutnOFJYnSPRSrUv44uz8PCJgZb7eTasrcoqIrYRLGnI4fV20yOPq3L6o4z

观察可知这个是base 62编码

获得解码内容为:

UlhoYUdxZTdaY1FCbXFyaWl5S0ZKaW4yN2ZiWkpTZHhOd2hBVk1wNzRvUWE0VWs2RXVqTlpkTHNvYVpxNHRMUDd3dXk4OGJiSlhlTGJnN2dxR2RkTm15dGs1S1RGdlk3TmpRR0wzenFrQ3BCM3lmUTFTUkY0OU13Z0JjZkFxWjFhNng=

同理可得这个为base 64编码

获得解码内容为:RXhaGqe7ZcQBmqriiyKFJin27fbZJSdxNwhAVMp74oQa4Uk6EujNZdLsoaZq4tLP7wuy88bbJXeLbg7gqGddNmytk5KTFvY7NjQGL3zqkCpB3yfQ1SRF49MwgBcfAqZ1a6x

同理可得这个为base 58编码

获得解码内容为:

G53XC4LIK5DWQ53UIFSGCUTCJFCGM4DSM5UXOYTILBUXU6TXJ5SUUT2DONHTQZ3GJNCFSUDINRXE6MTEINUXOQLVLI4VU===

同理可得这个为base 32编码

获得解码内容为:

7wqqhWGhwtAdaRbIDfprgiwbhXizzwOeJOCsO8gfKDYPhlnO2dCiwAuZ9Z

同理可得这个为base 62编码

获得解码内容为:

SICTF{fe853b49-8730-462e-86f5-fc8e9789f077}

二.Radio

题目:

from Crypto.Util.number import *
from flag import flag
m = bytes_to_long(flag)
p = getPrime(1024)
q = getPrime(1024)
n1 = p * q
p = getPrime(1024)
q = getPrime(1024)
n2 = p * q
p = getPrime(1024)
q = getPrime(1024)
n3 = p * q
e = 17
c1 = pow(m,e,n1)
c2 = pow(m,e,n2)
c3 = pow(m,e,n3)
print("n1 =",n1)
print("n2 =",n2)
print("n3 =",n3)
print("c1 =",c1)
print("c2 =",c2)
print("c3 =",c3)

提示:

树木新开发了一个加密系统,这个系统会把他的秘密加密很多次然后发送给不同的用户,你能找到其中的漏洞吗?

观察题目可知这道题考察的是中国剩余定理,由于之前在BUUCTF NEWSTAR 和 CNSS夏令营做过类似的题目,故即可得出flag

from Crypto.Util.number import *
from sympy.ntheory.modular import crt

N = [14628911682936716611458501697007036859460044243525290515096052103585430459755335375005202100114469571371360084664887335211277585652711111523095037589648375630146039444071400098427638768750755153219974194380355807078158427824557754939604018020265955042573660474772006646525311705184431094905718137297923127124517126579859336516891364853724635334011666814712424599592662398013241607855160919361308195967978220182785816761656927836373944699635667244275310680450562446433724968942835275279255823144471582249379035668825437133182865600026935116686574740844588839352146024513673500770611055698030333734066230166111140083923 , 16756694748293603983474688536179571665757862433174984877308316444468003022266277794769268134195205510197588585566270416339902269736376811449830775290335951504698137924773942880807921752691668522662285163130340474205633998154849689387759453003838730282756734975490180702422176361373516245372635401939755527017589503572550811648345570775428936487145892225736625411540461653083957762795820510109891180906709827194217045059033312564525916136573856999724346161896146703174418039344166251503310869772735585554127509732135494936119159784702673291794381095696332128950979288440758815310482211285712819274848744478643590996499   , 12023158079717019193506148537498877243668782424904061914991928068483879707115315968983829360560644394409575645736275352836086080024994045582242629571839276759393418303915955798990522990081795218822313146157773272844272865701134880180795342597049645358985187689813369428579614193015028249821853347208001645148169449968882591709833452960545988520048722323580338213590245476892223967673180144525106292453573842357322398199104132677638909964034937501684668442732786408572501007756270725934445316827054687741612177409932320532825182104820899546084015733164816993674100635828218335112393003462442685677115798304835391938681  ]


C = [786426913645332991929803636719878643130489430090701482974255190570111407517277263761161970232982615374753982050075781017755721714929721429185828101898786972242994012456972241276851428750970754773002966788642795040933520662931514953660571657013642671173456750800960592586345219252277575624120271330470724245201080094330964145796872211627254805407394764183615099525852600855622089361965086460279057625205099471122036599934609091062009161119885692567925924978687256063116915630947838112126347748759078024890458539541208153526564434483654508834147071166870006117573542198238493913144419569943131642262575848786399020602     , 14269311999815379511888097227418748728398011595172649708273598243317106830139061994801598925448165045032084910971094414749744701731066555194159863759072739031915833091715422787808666326235589236328864675164322734119047182014621724868200908222400504845559290620275973427127376594365043386362821355037781568524903149101953873768462097165128186788759111090267131443645126715520994688945363059795513931799317608292977574376954729552861360597103229877031117089231816770880909815561950691603994439997197261395452797893557057320175747162837857668062550646101714062365530246698404923128445182100334335447738834779014705114350   , 3204718091370324153305164801961074660508922478706979436653573192321723216725523523538914956544950802616295043619768261075799875855502834749045520466140056621489305006966280527055668378303630674311102581232313032585389907028715671091914904062961720585667564982641321454541632782484415075257140508738041786400512095949826279576159569786734978545737717138115729502475357594151593143140355121154223614868465202149338507796306863351134218879326031985027900678671697876083351974546516576983143592764763925335805465720148057651958521255276602933604064541840892578409973858867533575728482926007556060584654853884046046420855  ]

M = crt(N,C)[0]
flag = long_to_bytes((iroot(M,17)[0]))

print(flag)

三.MingTianPao

题目:

import binascii
from Crypto.Util.strxor import strxor
from secret import flag, message
\# message is a Classic English Story

for i in range(10):
    tmp = (message[i*30:(i+1)*30].encode())
    print(binascii.hexlify(strxor(tmp,flag)).decode())

\# 1f2037202a1e6d06353b61263d050a0538493b3018544e14171d2b1c4218
\# 3769373b66142f31297f291126410e042b01162d59103a0c005221075013
\# 37242c202e1e3f743c36371130410c1e2b491a31574406014505291a550e
\# 7f6922742e1a213270372e01264105193004532b1f554e120c1e2a145618
\# 7d69143c23156d18392b35183141310e3b49213613590003453a291a555d
\# 36273731341e297424372454230e0c0f2c49127f005f020245112718545d
\# 26396320295b2531227161273c04430f360d533118444e0f0b1d31554615
\# 323d6335660c24373b3a2554350f0a063e05533712101905165e66145f19
\# 733e222766152220703e27063508074b300f53371e5d40444735291a555d
\# 37283a7432146d2d3f2a6d541808171f330c530d12544e360c162f1b565d

提示:
这个题目名充分表现了作者由于学CTF导致吃不上饭,明天就打算跑路的心里想法。

观察题目可知这个题目为MTP用flag加密一段明文,因为它是重复进行的异或,所以过滤掉非可见字符爆破也没几个叉路,然后猜单词

再根据题目中的message is a Classic English Story可知这个是个英文故事,然后我们还知道了flag的前几位为:SICTF{

所以**INPUT:Little Red Riding Hood **,就会得到:SICTF{MTP_AtTack_is_w0n

合理猜测这个最后一个单词为:wonderful

那么再把flag串搬上来逐个尝试即可:(因为可以变的其实就大小写、以及形近数字,一个字符一个字符增加,试几次就出来了)

最后获得flag:SICTF{MTP_AtTack_is_w0nderFu1}

四.Easy_CopperSmith

题目:

from Crypto.Util.number import *
from flag import flag
p = getPrime(512)
q = getPrime(512)
n = p * q
e = 65537
leak = p >> 230
m = bytes_to_long(flag)
c = pow(m,e,n)
print(n)
print(leak)
print(c)
'''
114007680041157617250208809154392208683967639953423906669116998085115503737001019559692895227927818755160444076128820965038044269092587109196557720941716578025622244634385547194563001079609897387390680250570961313174656874665690193604984942452581886657386063927035039087208310041149977622001887997061312418381
6833525680083767201563383553257365403889275861180069149272377788671845720921410137177
87627846271126693177889082381507430884663777705438987267317070845965070209704910716182088690758208915234427170455157948022843849997441546596567189456637997191173043345521331111329110083529853409188141263211030032553825858341099759209550785745319223409181813931086979471131074015406202979668575990074985441810
'''

提示:

你知道CopperSmith吗?

P的高位泄露,之前在BUUCTF NEWSTAR 做过类似的题目,直接使用Sage Math脚本

P.<x> = PolynomialRing(Zmod(n))
f = (lead<<230) +x
v = f.monic().small_roots(X=2^230, beta=0.4, epsilon=0.02)
p = int(f(v[0]))
m = pow(c, inverse_mod(65537, (p-1)),p)

bytes.fromhex(hex(m)[2:])
  • 13
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值