Tags: rsa crypto 

Rating:

# 4096 [490]

Here's the challenge:

![](https://raw.githubusercontent.com/ozancetin/CTF-Writeups/master/2019/SwampCTF-2019/4096/4096.png)

Here's given challenge zip: [4096.zip](https://github.com/ozancetin/CTF-Writeups/blob/master/2019/SwampCTF-2019/4096/4096.zip?raw=true)

4096.zip

inside 56 ciphertext and 56 publickey

but reality not at all actually there is only 1 key correct which is public0.pem

I recognized that with RsaCtfTool multiple crack mod give a padding error. Then create private key from public0.pem.

```python2 RsaCtfTool.py --publickey public0.pem --private > private0.key```

then find N and d from private key with openssl

```openssl rsa -text -in private0.key```

then I try to decrypt first ciphertext which is c0.txt its obvious base64 and I decode base64,

ciphertext as a decimal format now we can calculate it using with pow(c,d,N)

when I calculate ascii result is : ```c44 c50 c55```

Then I quickly go for c44, c50 and c55 and here's the
flag: ```flag{R1v35t_Sh4m1r_Adl3m4N}```

Here's the code:

```python

#python2
n= int("00a289d3f27fcbdfbce2cdbae653ec6c38b911cb045be55a750222a6f4e7c86c2e3e29d3de1b4c8f597ad8d9d2741d6ab3b6551d14cfa934fd8c35226546244a88f993db7d422c780aa63bb98a49a88e1755a63c958634294618e1659c8560f4b605240dfd9a6b76d1eff1da92a933bab3b82f22685a57a17eba2258128e3a020be9c65104d0d6454181c98bc6eea4fa7b3908258e8a5ad8a6ef655118fa08772402d0acce6c74f81983919f5ec09df2095577c9dba6c070fee3e9d915606ed6bbe22dd40d1fb5b2960cdd38703a6677a2aa02d881af323874c94e3eada05e4b679069077f1c40227da7a4dca15297f28a9da1a6e46e99acf73dc1d65a5c02b26a3c5363bb69b27bcd974cca29553ac03729924873fd18a4161a8823c3b0cacad3280b38d2718cfb4e3a554718719bf4d7b57c950f99146307a8fed21339bc037ce52e722d9ce48d3c04e319c7559ecb27964586af6d81d2174a55bb67e4f220f0a52da7997917743b37579829963f5e8c3ac3554829b3cf1f599a72dcfbecdb388a9bef6e0b5bce13a4f268b8bc18aa637936e8298bece63d7d7d7aa01b38636717d80fcee034914d384dec035c5eed2434280be7b03b44c9b37165f62b205acbb13bf5fe8582f1cd7ce362832aabfe24bbdba4544f06cc5f3f87b66c32160ced7353b19ebde52bcf262e8e0cb5d5bc3653bbf3ea75d1fc08e3a945775d4edf88f10a55696f6022e2df1253a31b587c0c2599591621182fe5c82b5a50966702bfc14773b5928c089227830dc00700987ab33c7394ae1596d6bde34423969360a0dbbc525aa508bf9630cca7f30e517fc16b91f935d0884a0941d7ad25ba8ea08f694917b9f6eebac8a68032bd0173c096e526b729a71be26c1b8d026931afa25553cfbbd20a6d26cc7c757b89cc285f090707701f60dc960d66e56ef036687f1567196914f8577e7635e0fd7d034d82b42ebbfc5b19ded36042dede56620c95192a984a6026c9cbe0bd7d04408541fccd298c0ccc70940284fc4ea55fe0832d8d9d5b0544093f07070adfcb362940ec06791ba9544f54f1d24bf42e417c5460b39a6d028d592d4750bddd942588937815f0c018dade92213d27c3b56ab5a2472a9c5bf9bea8e0f60d6bf157ae8a68622cfb86f72942f944ad2d312801f18477d3e9d380c1f77b6d54c369ac945d19d8854e7234340e9f28b2f68f0492445ea58c8dc32d80d553eb2734a0e3c3d392de88dbab1441c450e4ae7c8cfda0bb47d5cff424ef8d6e3a9dd6bc8a8112161a42178543e6a545e624660a2af55b63e901eef6bf00a75209c099aa77cbce050e080af3a9dd976c24ccfb3e4b8e591c9dc031fab282ae8631c15d03fc6634a98a4e0bcff1e75a678ccfd43f5ac0f5d13a575cbd8bc825c833adfbe454d23c9134c781da79ba23cb341e7407dd30e5e58445a3358d", 16)
d = int("123bbdb24e4c7f9e52562f8fe31418ae30ed545d090ba284a1475f953229a02bf3c5b962f96663bf9d08de65b678c95f313ba7a381ad1c3218889b46a6209a0dfdc25133c7009a84999a2cd5068c35137e52e06d2e2fc855b2740cadbd9d981300ec45bd76634c3e19792e50e337480d435b5bdf09de11103759457605120f21a1472f133368fc23bca084db632080377b23a0d8fad5516156c6abdce4ac61670ba28e6c8ff0935f1040b266dbeae746af3fb7b2f9f64c83aaece9d450cb6ccd1af4b308b58331eca6e511cad13ffab809a3ea53a1a44f24080129249ac0b3f10cb8b8f344d11fca83abf055f6d4c28520f4c489483accbfa4fba3beab0b50632ba1074af320e13aeaa2e618d272f152667d4d5514d4075e7d225c8839646fcc701dc1288c6c227e7c7298e6bf4862c29b4d0dc0e3b3944cebae32983ba82a415d43091351016eec6af860436bee5f53bafb3f1ab4087d6751985835952bae79b37d9dcf0eaa760d9bb7c3fcfff89ed7d7c311fa33f54fc55b6654970717cb0c70b973eb2568207c239deafadd229e37bfa194a916245e30f0339e26e9e2b00af4eba61d89d3a7d676d5759f86a53df7b021b062b2f4e75c1dbce7024f0235119a281ef73678a7a773044f8285e5fe414cc7a595ba2f8d8ffc7aac52294c1b1ac31914252be328ce101f6566b126c20aa40d93f8042f3efc931aacaf47fb0ada11912b99451fbc4e04bf2cd9f758c4a1740249a1c131c980eb87badffecf78b29a35f7931b6c1691c5880aad7de0c800b3d6d74b48bafd00b77e9b3774152b082e9d6cbfd664e218ca523f1f9342681f82c34478e814536d5e08cca945ec724ee9ea098dda17f7ea09f86e34eeb8fe75776f2246209f3a9b192c3ab83e2d009815845343125d9a26f6764cb2f5ec4ce03f7936bff7c149fac890dcf15dcb9d8b089d018cf2e7a93c7988f8103277267b9962230505fb83a382d08b4d5107523d5a81e546c44578540090b6b3ebd155d27cedf282c77113eb5ceca44cdc49336a2c9188bcbd8e4bd6e9f5d939cefe2a7db055fe08fcb50058e4c993ff16423d657fa82745108266b25f18108252427f3411e20dffbfa600050549a5dbb6634afaea60624bb02e4ff81e98b98448866ec1ac3a0f55bbe8331f83f24e09860dfad3a92ed6d50164bda9241ab4a2c3d8ceb7b67ce39981f31ce6412e1b933ce5de8e61270b163ea627106fc172b2feff85e92f8bd02f42997fff5b0b23be331c21aa80353e4b1d28e0aadd75044c5d3cb73dd56de88c56c4f50e579b2fc9b2c1b96bf4b00d98853a485ffebefa983ebddbc46b5ec186282b8641f85aaa6cff9810099f604c736d0c94d057f9ac9afffa30cbfe90aa7a1339bf34518bd962952f50e33f37c830331131b4fb17927a14e38dfd4bd9e29a124fbbb451f210e1610c688f4c01",16)

c0 = 8373654770076681234620488112607583962389119878057372058639619828286058613295360356703003993540424057401481387045788778435018056656801419092579596728900976864160971700023478312075815990858013140473700206202071969692839495972175009026410104200868457297097206976992416585642891353531914036266129825310309541729241170569948781525946375521450661857505283428289722717169864449032704264512249516128149274774703977905392541799824023026842903413079664467817404367951410568573317016254352098915934767828591001000574792238984082892885355491130543051121451883309709573426068120137359216765973135662498129338260155086103490683750361880121511023827665043217724022451173679841591397560900038036880067639634670041235066564932533152108528203888282166794188677962415812495701821535792491292670532260876793304488405462431216033279216630154857976435503297066140527730383990042710254275799907700756124808855574967305873095736024971621714497099881253580196457527160285900824731005866469643425007921844990099735932686958842047377856177069955226431075168700415085297844425814889695173104563150868397575431082862272770172873797956805535655250517746731890933630667933430673467311731484481048515564958029327585703102056773073823339330595117411052850696062079711595354283813670199352642452496476029815442905457655146858846707020211123446512194744777776625273704123626274240449161985314379445090501806736200020279009861306386270735546037346407989908672625798391372646101911548735035596346411588588101927212186711366025008441434246768408337621345865981074120656001618790585176463704202269107936685660465387366892419545583531948252972525745203459644989311683149833461290388234459798402069182262189131048978113628002004564549001116282517635836362279586732049844310234387225279901107403377032628394716273120650361214391133732961065130187753616420603718561562545059107986597566993476395345177030572337785859747860214383871541533454965880248916138621805355514060979323656192066727459964696396337180115530305521587611210707955809600383705271035885277940859805492980270728408098180057637014141697033155105233809856250087622203979661045939415842351991877976309128796749907090671335128930554877870232660419063060292739799307072468448351848917806796565545339158966339594004497088916499138584220234167815965209828681675773081117358125866648213818180506332110735266457365893434590775755124218908549417224337235580258875198416267738892014661653411632637333574128727668398568539415961845053430966872329384642626141
plain = str(hex(pow(c0, d, n)))[2::]
print(''.join([chr(int(''.join(c0), 16)) for c0 in zip(plain[0::2],plain[1::2])]))

c44 = 10907493225452212309562759208131865445822417041284821898301772399587813164657883746952598216043776865540377826575305135701940711127374163361244865869834935614837884290834594296997821308950669838371906526289001567164785199100489475177285819593811699323872812538421204316735947019578811028155665911467402134181673883625976126336094507239396909124600510163632913319749340229911752012241156721015782073088293978734571765483148568880419274450441322286436754323882954084901913242787804267231181525956690668882550856696088853358322720877734147807158022794421917348420966523990510636352676711475315126028904505956359158725758769622776636967756386877014353486576650754171454894696349931012213949979371712638374601862622840560982716696811893853356795459587492227550513608463568174031829375410368538228920838706339106247178797574768838947945653229750400043617067179093372003228421760203031619677297146103690508925313668529698022578003742970541618102736158560943360873546454120830456434175060705354924497277472197999061875448168840913468729473936544780383669324775183194780819804032617224495722533161900117256361162834492125803180492657637636007417592125460855908701097403837093540927678753726299210703875218874882191316679042958409286897002985602564180659833700957251571108427752910310531374123634656114931247045701922964451666874667776434564721099051570979719273597012227936787939516067411806974541078819451741601620622516943005789881894024931693537334199652134129051417101643081242099236569482413962614286879666418250294494459946188672896805767408070132208669575191857998930419667620467905674081322162837456600172169105364563667605696500988224756093511268455348056775346604208023312938043509845716684665975437705536093135013992202261104559026907458898441203592644631821953523822900015672127154586208118435306224607875403691099365188139090912514882012460586777693051220819753901286405611086792594321768846070735726392575538769626006473023216733271891425720775975326857435087142020566289007395817231560679623344818989566003179687166219856909850895463733908793120947424481452319059966483224071876161545023294624172717486884972583452989505894625940524805985020684047364709582451253336463183697017865341617738712519936708084864639537775288141641891142228281725611001568778448187117224056514873235057028162506111723017297030421533664045803067778459351381908552537294996285533793118684256720883340483325814621810019063616392286251873407532108736800234361373392694943510006108316538784228
c50 = 21674649589383029037835428630646723964667219385299646798247254374115160253342068167856754949564749757431252945169365464085036628760521213441915720646981945623908562226081602245782478475785921190569329096737277942673994585126659148732240437815033697672940696388905038725889455241605642386562166385882209786905738661392038855246057139255470445480978996169717414642407311071569920888526888397692751965433545743937410807376405290213392994513806511630814522995208836328416178449051568564593349003860856299433225632456276695523396731940183567169231018589578474681523660427363687454069529249897160901299258750132758223109504116005452112680226900753070705144444841920621279274896803874005261281336177913787125363769690454185046634891664231495235550077199464641290249743886224642678507312454978083526094783978483910318510967584854631467806516857011912134975817664611407680269169471824800902679239779226650394152783881233692072482745090718249459187233843701044124104928946096072456931526382290050149267999812333122738585632178999909093892510686979648053065706413500578905139065326870252336931382349110329825156000335548173213186902497853783398674920569263896068739436826635282137475650541108780823463655114337982769543958640119953440518111272374438818791420282103450039957181663288233472183329751724160366673128548189770208829037291472907326450541310460414699270949127276192113874279840029697380616603903629511370468320565974709520963992110729122921000089703339791387885183303954068154867147655121174995015564366243545190667849700840698508959500398044815111223175823449397688718461622793676934750467003902152786336103722791695414037573101564128349045675926684760623595783558010771615629116150595252040945214185470975553497050430566865846465433060410144727844251389184917354544638799757638628107696480620482239584796705567165301469693188652921229278901458573281691934580405076195436968164700153202431472718844033389973150164591312335978880563659909780537774620162460038689051552611779141056575552077521552474030749987169687672366966967275933080652240028743096280095488184573558384168475446385626703917456637598890572691701560721844529995606219675990129527104240243358375818574900307083343091223432059522633897169619105434655615349504514114442095127276221374525019457816419888361682792996757065836579763192023132552229896874436814490887459479026683613459793997600910895579246765252836033501759127921661779525466700349174934169585083804411222612830226930924197409815565154373309523151
c55 = 39132741160763793883989657414422681177524150627171931622223841637867592418289412402153067451770700336968063552832877593242056817499949738057996235964132087955566378132927679222561467057966085201159159200803125279310827214224248619591669040124716496001617803980639139295536453482055651980843818630004576888245610266174505862055273970497980206902343425821223374882255667248924243561489853863696179703634546217711076874250254173173150488616380702636627018104201015641606197969423608052099777216141419794982868535853399324384153358930516587906022619080795370636861616226109826677314456938605748688617210837587781345885825614769789244567853904428726470583527659567671620306867402697136979400781098805756154978813003400048344038112761597466551231058402247703999489468079277326665741747820179949037263783680586223955448125160458708997028272009781697539845786456125658883163852327768451977377552562926914947243015500873618230611987400466226404001380229930797499161442370969606015989079986222221045320785430800308430704974633884298343196718607627241246363467130533318495801687685480039842795886309260057596657147603045566677076425958917149044713408877183002283134433524593775799601637319317238075335328266377922671839068555087804338765849542402772149103614124721878334456301436963938423617415144160320803706310488691310172965156530844880005524580747198127429801084917150870745584996651853659915749725035063514473978568354924272599471358982713923475973575060017535571658100602071409007170178334295997229955396101002974505339517738606316778472414444545773440940530130523916315588113750742088390796694754504761897310989088932904249070125337497376739523168284952288229894985160928895870869192362296041126065391572328273739126921024638360562447691902449811638599827733614517156082547874082949482043970332488085943885048193519089153869792100247371399300430829211734609186173413288630179811627089665410729434760369570049769040011212741979874870575489912255540410589408295760792497078422088359080075221049832566857654077606234465410714923628280686590965152966066971618498192985106547212447735998718119134859521980056510707604930553688895093802983885945746493888301848452251083729071174225335452308641232093714256783385074679937734768277633577194883251918510060829758404628676241672359375358203860029415659927562430711995833912910231941031412523989907457021413719900870497066061615155547308915951776432949966154113142326808950013970326241176118227500868306799845240520574129341863148093656

ciphertexts = []
ciphertexts.extend((c55,c50,c44))
result = []
for ct in ciphertexts:
pt = pow(ct,d,n)
pt = str(hex(pow(ct, d, n)))[2::]
result2 = ''.join([chr(int(''.join(c), 16)) for c in zip(pt[0::2],pt[1::2])])
result.append(result2)
result_final = ''.join(result)
print 'flag{' + result_final + '}'
```

Original writeup (https://github.com/ozancetin/CTF-Writeups/blob/master/2019/SwampCTF-2019/4096/README.md).