본문으로 바로가기

HackTM CTF 2020

category CTF/CTF Playground 2020. 2. 2. 00:59

 

crypto :: RSA is easy #1

주어진 소스를 보면, 평문 전체가 아닌 글자 하나에 대해서 pow 연산을 한다. 공개키가 주어져 있으니 printable 한 글자에 대해서 암호화를 진행한 다음 같은 값을 찾아서 하나씩 가져오면 된다.

 

1
2
3
4
5
6
7
8
9
= 28150970547901913019901824364390497053600856369839321617996700606130553862041378369018779003752433356889118526332329074054728613209407037089320809898343953157935211086135010436283805891893636870991411236307901650696221491790470635225076251966300189483160148297407974155121570252648252906976186499329924342873
flag = [2460393140618707186160249734539409769298977319403973574576218158662849940780282598390164303423144850473811318447003586382412803144301207383052023361393548519280410469899976328738876521563431497799198858004822154156035341828029440269166198070583259096049758781051429564281171468062776826870489987416468171844911226318059664066669163529308725576208632153806776762372429671026861927737060205604020741904348343722215670471225630839065129589767356765848271000166982882271636977663052775953958080543340165408211633442938366994031562890034541604362383645601883118173819506187865617998294930587997187071040181458961091560176156452905949951808158653977491368001260807046848842964048073448705551868233502167057960639222784195854846622342100016615785495604118649524623800964947817663945422476096487436733128239467835171155424044747863959348866677956922102872830393164181267969345351508327095003061536019871211721781839708414983310597322434586355895940773824912756882013836211573421114654919453421931191303229021660685938593470867596283585780456604960071087503536697311042226213133193231052489171331935867667395873877664422975762552395535499640275026502257884363752518370418749819448964583849064052984118270966137149901308225919363300075362726196206792242974881750283679247647229827893331944460635772214773597041806382946028487410355856561135434977764156357707484687258149169945773980231542245639209365237178841168802233452040615984382917400075180259980414494067260840426817980538634955423924810592815880201053137910460173564937392445553772178664967341681724029430984846089508679185107538104072555994133932050319175633667369916570440070548756805254789524599169177371471218251246349461689959989338169394649813424706418737543924129213419625988100326558802566046751879531469160120914735332858786199496335523515150741728027296830843112416558460932541777024522279206298547688567985370624260425703340976513289556656984299799544106311131604922011976901923248815081051725952162296245235725955899206951658765010269938109363925107209681593059648324496808890412785328071738595794191977802949845192228305724131802377767978001764624923843181205464955397287323661107822150712623077440918084186181327822271261394344901791253526257166181264874776746516620936925799031445704193589071453959493392065321806281801023425299535553522582376879027448581379760896052013060957519595664095702210758316558762834545655992756483227787274192094065257224706388623944855362716578806372564148647945479173348509786784377703407627139709520152835178469337202799861543644541091213114188222557757725353039633341357975639488409631843410038250918997424035735142547419055845625675074273109001282206484048114352808102710684312303027542021513630413032101360503126137266563636637716266647673729602860845522935741600577306424210420107412794383499391199999666100864853724770814620968725971207705900061273163202891569477729023724554388008575891113425781557296798472693974759813058067631655217722786373465395279381307973425004404348124524059844749313287030234750535347511172780349725636807760402334957881556461382950021814486095167001394208951984461926978250028906366506243618637595209444943912401914544439213455780438735848848387723341637488834761040110305923299484545310530248732637860170450830524439244037695423241233238343383913611497679138309982189515747847777857395660461397423095575360252143348313725097892465223255229829452418153881334771122631805966406666916352930872557620863215380677676237242967102686192773706020560402074190434834372221567047122563083906512958976735676584827100016698288227163697766305277595395808054334016540821163344293836699403156289003454160436238364560188311817381950618786561799829493058799718707104018145896109156017616657126895659048065404729920028465477385009450133540950695155983380795627778054526133891673615252510518969355629562948102050307259107355106086468465392660721567070464708776158039303608428552547481825035736610837329720474688421062759594907620576318249542577396722737724172954532394471909440668625218820801756111137773569107314134240232995826486182583762220284502544786721481198896175575635767049326351314208458681650149826657176208455780398805277015939637198934670688201078113840415112956648339045045112103421052423305223754764827060446958389575916857817038942445616077644765556305734465894087687806593781280826337692089519844619269782500289063665062436186375952094449439124019145444392134557804387358488483877233416374888347610401103059232994845453105302487326378601704508305244392440376954232412332383433839136114976791383099821895157478477778573956604613974230955753602521433483137250978924652232552298294524181538813347716817240294309848460895086791851075381040725559941339320503191756336673699165704400705487568052547895245991691773714712182512463494616899599893381693946498134247064187375439241292134196259881003265588025660467518795314691601209147353328587861994963355235151507417280272968308431124165584609325417770245222795237767970074646857079948735567615361735616179074197239639640947679550920349684166643572837235712904929824521258264241503059989875517915784117038966236672390569320206379357882906463342282254405974383459878863044723383164329146669331810709270455492110346838097216174137176255793792848357953314563364460847842208951984461926978250028906366506243618637595209444943912401914544439213455780438735848848387723341637488834761040110305923299484545310530248732637860170450830524439244037695423241233238343383913611497679138309982189515747847777857395660461397423095575360252143348313725097892465223255229829452418153881334772141625583250052666579569568613448089970148215959031795439930595139028085767825695294403905882459409861220995951141855281841435481587946825079031782977651718402048988278639212978854590412709087674713750292922397103941195760574072700517109381299788645871729355745594573785064162048047595009933642068871994670278354276293884030290100330445865286604723740111170856624965259573282278044823323212960304154629174664076141280100412502135750130875356944835909175355370317285768658282746817782130476757714384697086179400629156643250500432197002583758692394681401772203578628635926749457621478296182304772136118691761841359603966759560123308255207161048704839834632470502142317642348462370537613335853913455836249989195409143168757830562310672690065538401124174271573578616629033113615324070282254422190340487099271377842316786766394808366262008785909670738162005126674515654521372621408004976438210744215982561031069554367347554221353765873487781085375016306418205544750755310255410963646737671193146222650262290683259548572190880304009015662963424520575937651278866672082973874806201031606257157229306007587966460187818647603633973019548401357989358306250139692325474674826791149726161678649996852062656272851387461089863388359261125336112263180596640666691635293087255762086321538067767623724296710268619277370602056040207419043483437222156704712256308390651295897673567658482710001669828822716369776630527759539580805433401654082116334429383669940315628900345416043623836456018831181738195061878656179982949305879971870710401814589610915601762057638859888614009532520458479930238445437837220468334825246372952584958373494810576508799143842326069062324657957044040561657232605753624814802073781076613408379505007663668677680946927164318856248292154649707140287340570650477334562171642851148159870463145146339977860248641784046698589181564971117881396317347447662661486040040289855519394974371562320877472776529836975445205017304164550202099250096382852783253959549113036367974281750823938616836362593312254792770954856762797438690474329666549947795964992533463700161635382925555835347885819042031312006167190561233042383984087765920275010577545908085026177611117886282146847382466956329019922500757589590598584746451661256858611570464660646929802367347396342988024738948782680298602030262389251422583037274385700518227633303387447743007578882627473140935110135625457385713267713454955094347618537425695094806193800004242155271531182310845738513770499214569619162787612089519844619269782500289063665062436186375952094449439124019145444392134557804387358488483877233416374888347610401103059232994845453105302487326378601704508305244392440376954232412332383433839136114976791383099821895157478477778573956604613974230955753602521433483137250978924652232552298294524181538813347721416255832500526665795695686134480899701482159590317954399305951390280857678256952944039058824594098612209959511418552818414354815879468250790317829776517184020489882786392129788545904127090876747137502929223971039411957605740727005171093812997886458717293557455945737850641620480475950099336420688719946702710029303357232932696197225263692040597986927359269224740812600224998707144266259851604978553286889767425982708691908438984279442981540971935737617354609856642312100797081348174935195638083002333058089328102430432526612805955273581245352312630845237670744276402867230550537275379675828467791243032108754996199811072335933509294479535140065014584664792601516601851539997990856574679210979407518607173093774985016380750021366373441489558116173998507183224975724213118076293296425515192847136388820255000745654755696186915169514497646805554471853641656875961610536842995890539092339846172448861857288116519677130245303975884358027162862622932959187611984655247354547659825042810425039322096401899672988989768997134724085482147901304365437476311647149733392577446833370358728610677436154877051592307539990184750467273668379065865808900410057533079113476991204462719784464847498582643056503810805516315622314948257403761762299603966759560123308255207161048704839834632470502142317642348462370537613335853913455836249989195409143168757830562310672690065538401124174271573578616629033113615324070282254422190340487099271377842316786766394808366262008785909670738162005126674515654521372621408004976438210744215982561031069554367347554214296542628093736444815382636071360035549021313467366701986569710120268508807886041986007828960248665683292143486565404978073122476968882030310174125355932205646388813061197657253533595700948593692407928813318978600474254105007396254987998953819782624738628334271910759242195864082910860797444993756044746481208951984461926978250028906366506243618637595209444943912401914544439213455780438735848848387723341637488834761040110305923299484545310530248732637860170450830524439244037695423241233238343383913611497679138309982189515747847777857395660461397423095575360252143348313725097892465223255229829452418153881334777983594351048693624291138893287137601848867970873700373034058935656045095987011116108642350616654713531373295621458596238107660073931212524833777531450461876588350132328332972361857441613098452082271331281504722310376573085001395356078670960667878342134517577992585442881605030717788248137764480486762452442798359435104869362429113889328713760184886797087370037303405893565604509598701111610864235061665471353137329562145859623810766007393121252483377753145046187658835013232833297236185744161309845208227133128150472231037657308500139535607867096066787834213451757799258544288160503071778824813776448048676245244223267174349531278768420819619439317179083929128083924515569762521057285892931325108327037262091624670335579302436476096123152288550738706103166820604983405317430467198343871458522070337902643863890959573514405066297449924638838605501211486861582957963752388608487593217237563529201436917108304692859773404548]
enc = {}
 
for i in range(32127) :
    enc[pow(i, 65537, N)] = i
 
for c in flag :
    print(chr(enc[c]), end='')

 

Flag: HackTM{why_ar3_MY_pR1va7es_pu8l1C_??}

 

crypto :: RSA is easy #2

#1 과 같지만 공개키를 알려주지 않는다. 원문을 \(m\), 암호문을 \(c\)라고 하면, 각 글자에 대해 아래 식이 성립한다.

$$ \begin{align}m_{i}^{e}&\equiv c_{i}\ (\mathrm{mod}\ N) \\ m_{i}^{e}-c_{i}&=k_{i}N \end{align} $$

\(32\leq m\leq126\) 이므로, 첫 두 글자에 대해서 가능한 \(m\)의 조합을 모두 시도할 수 있다. \(k_{i}N\)의 최대공약수를 구해서 만약 그 값이 \(2^{512}\)가 넘는다면, 그 값이 \(N\)이 된다.

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/sage
from sage.all import *
 
= 53361144550014053166721365196980912889938802302767543436340298420353476899874610747222379321544658210212273658744624182437888528301817525619324262586755752560722184172889301780332276353612167586294259101340749155939404015704537471927068307582449663907783314406726655255040519664154112497941090624585931831047
enc = None
table = {}
 
def FindMod() :
    global N
    if N != None : return
 
    P2 = Permutations(list(range(32127))*22)
 
    for m1, m2 in P2 :
        g = gcd(m1**65537-enc[0], m2**65537-enc[1])
 
        if g > 2**512 :
            N = g
            print('N = {0}'.format(g))
            break
 
def Decrypt() :
    for i in range(32127) :
        table[pow(i, 65537, N)] = i
 
    flag = ''
 
    for c in enc :
        try :
            flag += chr(table[c])
        except :
            flag += '?'
 
    print(flag)
 
def solve() :
    FindMod()
    Decrypt()
 
if __name__ == '__main__' :
    with open('./c''r') as f :
        for _ in range(4) : f.readline()
        enc = eval(f.readline().rstrip())
 
    solve()

 

Flag: HackTM{when_it_comes_to_crypto_or_carpet_never_roll_your_own}

 

misc :: Romanian Gibberish

Flag: HackTM{Welcome_To_HACKTMCTF_2020!}

 

misc :: The dragon sleeps at night

드래곤을 공격하는 건 18시/0시에만 가능하다.

4번 메뉴의 Go home에서, 쉬는 시간을 음수로 설정할 수 있다. 레벨 1 검을 창고에 넣은 뒤에 -5일 동안 쉬면 검이 6레벨이 되고, 그걸 꺼내서 저녁에 용을 잡으러 가면 플래그를 얻을 수 있다.

또 다른 허점으로, 일을 하고 나서 Inf를 입력하면 돈이 무한대가 된다. (풀이에는 필요 없지만 여기에 빠져서 결국 못 풀었다.)

 

Flag: HackTM{g3t_m0re_sl33p_and_dr1nk_m0re_water}

 

 

 

 

 

'CTF > CTF Playground' 카테고리의 다른 글

riftCTF  (0) 2020.03.21
ångstromCTF 2020  (0) 2020.03.16
Rice Tea Cat Panda #cat-chat  (0) 2020.01.24
Rice Tea Cat Panda  (0) 2020.01.22
Christmas CTF  (0) 2019.12.25