import hashlib str = 'Tenshine' md5 = hashlib.md5(str.encode('utf-8')).hexdigest() flag = '' for i inrange(0,len(md5),2): flag += md5[i] print('NSSCTF{%s}'%flag)
p = remote('43.143.7.97',28967) playload = '' list = [0x72,0x40,0xe,0xdc,0xaa,0x78,0x46,0x14,0xe2,0xb0,0x7e,0x4c,0x1a,0xe8,0xb6,0x84,0x52,0x20,0xee,0xbc,0x8a,0x58,0x26,0xf4,0xc2,0x90,0x5e,0x2c,0xcb,0xc8] for i inlist: playload += chr(i) p.sendline(playload) p.interactive()
from functools import reduce from Crypto.Util.number import * import gmpy2
defCRT(cipher, n): N = reduce(lambda x, y: x * y, (i for i in n)) result = 0 data = zip(cipher, n) for ci, ni in data: Ni = N // ni di = gmpy2.invert(Ni, ni) result += ci * Ni * di return result % N, N withopen("output.txt",'r') as f: data = f.readlines()[::-1] flag = b'' flag_bin='' for t in data: c_list = [] n_list = [] tmp = t.strip("\n").split(" ") c_list.append(int(tmp[2])) c_list.append(int(tmp[3])) n_list.append(int(tmp[0])) n_list.append(int(tmp[1])) x, N = CRT(c_list, n_list) print(int(x),long_to_bytes(int(x))) ifint(x) <618357700: flag += long_to_bytes(int(x) + int(tmp[0])*int(tmp[1])) else: flag += long_to_bytes(int(x)) print(flag)
XXXOOORRR
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
from flag import flag from Crypto.Util.number import * import os
randBytes = [bytes_to_long(os.urandom(64)) for _ inrange(3)] m = bytes_to_long(flag)
''' a = 1215421974111272707828609697064234072332368362928440865251897449605952163161176359366553487776268706107760670434157083936287598207881176904763353849369234 b = 10533604054267448009117468094542127075826310122733511023911022436253583775790861879410728001403728088545946257902341417532648419689212361977221573357292618 c = 6401236597601556248960570084212025183497657335932789785351897915858852832577623776212842429736547820800219382515052263929074210010546149322465536545021479 d = 5711309307698496426409561761492698639489294806611133698231840146911562848869711567477706456972659368849642409039245400981517493100724067475248620536111560 '''
一道异或题,d^c^a就是flag。
exp.py
1 2 3 4 5 6 7
from Crypto.Util.number import * a = 1215421974111272707828609697064234072332368362928440865251897449605952163161176359366553487776268706107760670434157083936287598207881176904763353849369234 b = 10533604054267448009117468094542127075826310122733511023911022436253583775790861879410728001403728088545946257902341417532648419689212361977221573357292618 c = 6401236597601556248960570084212025183497657335932789785351897915858852832577623776212842429736547820800219382515052263929074210010546149322465536545021479 d = 5711309307698496426409561761492698639489294806611133698231840146911562848869711567477706456972659368849642409039245400981517493100724067475248620536111560 m = d^c^a print(long_to_bytes(m))
baby_rsa
1 2 3 4 5 6 7 8 9 10 11 12
from Crypto.Util.number import bytes_to_long, getPrime from gmpy2 import * from secret import flag m = bytes_to_long(flag) p = getPrime(128) q = getPrime(128) n = p * q e = 65537 c = pow(m,e,n) print(n,c) # 62193160459999883112594854240161159254035770172137079047232757011759606702281 # 17331436837911040930486942133359735652484926528331507431552667656734821231501
n可以直接用factor分解出p,q,然后一把梭就行。
exp.py
1 2 3 4 5 6 7 8 9 10 11
from Crypto.Util.number import * from gmpy2 import *
n = 62193160459999883112594854240161159254035770172137079047232757011759606702281 c = 17331436837911040930486942133359735652484926528331507431552667656734821231501 p=234560843346150602519484260867514743467 q=265147241000574873803071047177766359643 e = 65537 d = inverse(e, (p - 1) * (q - 1)) m = pow(c, d, n) print(long_to_bytes(m))
爱妃
1 2 3 4 5 6 7 8 9 10 11 12
from secret import flag from random import getrandbits from string import *
defencrypt(message,a,b,m): returnbytes([(i*a+b)%m for i in message])
from Crypto.Util.number import * import string from random import getrandbits ls1 = [] ls2 = [] for i inrange(16): ls1.append(i) for i inrange(256): ls2.append(i)
flag = b"NSSCTF{" cipher = b'y\xba\xba\xea\xc7\x11\xc2\xc7\xcb\xd8ZV\xd8ZVp\xb1\xb1\xd8\x19\xa4V\xa4\x19\x8aM\xa83g\xd8&\x19\xdc' for a in ls1: #爆破a和b for b in ls2: s = 0 for i inrange(7): if (a*flag[i] + b) % 0x100 == cipher[i]: s += 1 if s == 7: print(a,b) #13 131 a,b = 13,131 table = string.printable.encode() #取ascii表 res = "" for c in cipher: for i in table: #爆破flag if (a*i + b)%0x100 == c: res += chr(i) print(res)
defde(c, e, n): k = 0 whileTrue: mm = c + n*k result, flag = gmpy2.iroot(mm, e) ifTrue == flag: return result k += 1 n= 19920284552214772740140135352548541831031690920425912140961436065508824546041514076016684238261995522677433833330399269923572993489681770913908642529489382472548548664350078176417366141695108301338793624641102311886122714705781923892243561473766978666116035403145672686443197319003393949350402512739343998236331447680561106899174404316265329944969786438022711742891334905159259854026408058542492105569778656883811323759583727586331462200020945101286801110840081277963013591342157754264111051785385892113635682519079401538045775697382691195557344630571694510115674941400112478156619785019370731073096018975390492287333 e= 3 c= 1752041777918702842605810950957832076618830231626916748933875881505173164404519153781007066742915517004902508987841695668088780745675304779496841107726530280651344357647334690721873124324358539328142005709830859468027528835981960873390785515876157664035579935532043154959183555353553164481674735512873428044452976229459806219115571797514157279125
from Crypto.Util.number import * from secret import flag
pad = lambda x:x + bytes([16 - len(x)%16] * (16 - len(x)%16)) m = bytes_to_long(pad(flag)) p = getPrime(100) q = getPrime(100) n = p*p*q*q e = 0x10001 c = pow(m,e,n)
''' n = 564070152909085514893862673848191100242629745476416876533996976389897932324860687952230733393080567203972999049426141761 c = 269509453821913281608300827585653465889617103481995203776655691658799441157871331220899710463748827149644657719450056013 e = 65537 '''
from Crypto.Util.number import * from gmpy2 import *
n = 564070152909085514893862673848191100242629745476416876533996976389897932324860687952230733393080567203972999049426141761 c = 269509453821913281608300827585653465889617103481995203776655691658799441157871331220899710463748827149644657719450056013 e = 65537 p = 709662686105519282917793669093 q = 1058314117179226194777612760717 phi = p*(p-1)*q*(q - 1) d = gmpy2.invert(e,phi) m = pow(c,d,n) flag = long_to_bytes(m) print(flag)
solve_the_equation
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
from Crypto.Util.number import bytes_to_long, getPrime from gmpy2 import * from flag import flag m = bytes_to_long(flag) p = getPrime(2048) q = getPrime(2048) n = p * q e = 65537 gift = 2022 * p + 9 * q + 28 * e c = pow(m,e,n) print(n,c,gift) # 559013759419746202691240598235115105126834606071307611491891982898293133657843987454339580258031532272691584368719342942404675509580909313170933925796189789232538297110756754383546447669571766593521267667716779348776308179675709803388978100416839504625045239819627379469827980589668625084314985969634985583431058156810528172627873121320455715399011186280324236548934145366222271636328254497851289112650375015433741699898290781472376090171361276557886637892800404830030548291487615566596504234212554381817510798554015481259307992175226543595948798873846335558746933940683482819439715578130806800536423771482474206047548549237879025655562739463111822524633757040958223066367993671472508367287181357997804485542311011003871312708995599690715923692968372474814753669031805664070760705148563294700043336457334028810890271434599241312612447640877347296648737167576464851763570272180801042067934843953206083053874624644994067168364645748243999074053494066054657595233970985982095621265309066132852511490426399921749091156312387594448586826952283581592003247165562367202134878625798756167825941929996806801073247649667626854029875184014003650020610359836971629737204456239324237077361643697429780638179887750984791035339697744210904151734797 # 73407318923483936681380982096598838839602514018601041044571793373013418096970487001956204920233481604663088115926046001478564679328045899017826536373925483312496867862798918521256833686293905627264784839084309695013473729502056597198558911052248943918139429481528120149662544426266704140382476129564563832751550189116712164319522536680400998100426969878312141399338984622535922004572374724499994480294086487511972287034778386491943792466926044305651852709046949243652756946391206931252732067537917128777152678266816232179411054474713462051435447023851233892017069674808619784767176865947753180156093197684363218543237706358137237603822953178987601908200096630034921280599733190041134038060644827637374731999991143342404380959195318030935855850625849684867326087432054830971960076859722417639414733054394674533018860606074648324450983897579183842853010968597034663149214229791831193351337193195298921766564073265470525286769595835642479920483047959570057149110246705969802722576770273329236163660486942433423522588321736639231667766680582482974393228214947178327111783901303686854030864244720750585928819691608599558058859371899416709995780300197269497143959726959313506292966639680257096421491364629690813416340577056873916752193925 # 63829120016023768052886024054478552450378183173692549289836790500844466624984770449526584263524969873611417764466777251459739549064993441916734929304056657281688756040121378172997367361118927461471925755841160032723693319039128805185488328610549652307644061769088611063117016010827595409949224043526660999362737741312450095192593608666286680915796697255817583078927076945852260612453896867746751729217633935143780193497702898684210698859292191506586139420497299988065973759272644964857853100511651254633164029275099534568064491202987945733565755982565356202756330311841048849063747767451397616638500281324618902190280761
解方程,直接sympy库解非线性方程组,有俩解,取整数解那个即可。
1 2 3 4 5 6 7 8 9 10
from sympy import * n = 559013759419746202691240598235115105126834606071307611491891982898293133657843987454339580258031532272691584368719342942404675509580909313170933925796189789232538297110756754383546447669571766593521267667716779348776308179675709803388978100416839504625045239819627379469827980589668625084314985969634985583431058156810528172627873121320455715399011186280324236548934145366222271636328254497851289112650375015433741699898290781472376090171361276557886637892800404830030548291487615566596504234212554381817510798554015481259307992175226543595948798873846335558746933940683482819439715578130806800536423771482474206047548549237879025655562739463111822524633757040958223066367993671472508367287181357997804485542311011003871312708995599690715923692968372474814753669031805664070760705148563294700043336457334028810890271434599241312612447640877347296648737167576464851763570272180801042067934843953206083053874624644994067168364645748243999074053494066054657595233970985982095621265309066132852511490426399921749091156312387594448586826952283581592003247165562367202134878625798756167825941929996806801073247649667626854029875184014003650020610359836971629737204456239324237077361643697429780638179887750984791035339697744210904151734797 c = 73407318923483936681380982096598838839602514018601041044571793373013418096970487001956204920233481604663088115926046001478564679328045899017826536373925483312496867862798918521256833686293905627264784839084309695013473729502056597198558911052248943918139429481528120149662544426266704140382476129564563832751550189116712164319522536680400998100426969878312141399338984622535922004572374724499994480294086487511972287034778386491943792466926044305651852709046949243652756946391206931252732067537917128777152678266816232179411054474713462051435447023851233892017069674808619784767176865947753180156093197684363218543237706358137237603822953178987601908200096630034921280599733190041134038060644827637374731999991143342404380959195318030935855850625849684867326087432054830971960076859722417639414733054394674533018860606074648324450983897579183842853010968597034663149214229791831193351337193195298921766564073265470525286769595835642479920483047959570057149110246705969802722576770273329236163660486942433423522588321736639231667766680582482974393228214947178327111783901303686854030864244720750585928819691608599558058859371899416709995780300197269497143959726959313506292966639680257096421491364629690813416340577056873916752193925 gift = 63829120016023768052886024054478552450378183173692549289836790500844466624984770449526584263524969873611417764466777251459739549064993441916734929304056657281688756040121378172997367361118927461471925755841160032723693319039128805185488328610549652307644061769088611063117016010827595409949224043526660999362737741312450095192593608666286680915796697255817583078927076945852260612453896867746751729217633935143780193497702898684210698859292191506586139420497299988065973759272644964857853100511651254633164029275099534568064491202987945733565755982565356202756330311841048849063747767451397616638500281324618902190280761
e = 65537
p,q = symbols('p q') resture = nonlinsolve([p*q - n, 2022 * p + 9 * q + 28 * e - gift], [p, q]) print(resture)
p,q出了,RSA一把梭就行了。
1 2
p = 31488299927163782375594305784598354985055343576902151378139638110290196067918972709864013036909993584566357500427488971564319756822589646977081872239028723217808372250207143372686512583814138881980368846428364451724191019810210583450208745323418623199057207740178726519465136933610452840086315545766227500114368026151391214297362847972215483754128409704386255997220347329566039222555930464490406419002226257326118774942404683970363544788642504594073256844610344691049585870560973659315882902006631997716334351866723219577903275769313404136367236735062099234386473703566068495328080598914833401280780692803508570349879 q = 17753062588733343270481973113408741177364273466266578137604693537521130628067514464616655876995871735360322066932727884076111196635241747675042626304508770586691927800281585936137657405193182456402216484778567926375452998098111716574027285177466244350043079827469560084278792340806640810521556665260999347942843603815228875925103340718552529438783648172063716949726071718858811605089496505238883332792493647818670062684514188459512366295227468596668231188353669195967903222039580635681985850471261694526218866731687175727118621937360285536800367141087950091875609247828705723374310716178275472084635608436063660110043
for i in strlist: data=i[0]+i[1]+i[2]+i[3] data_sha=hashlib.sha256((data+str(tail)).encode('utf-8')).hexdigest() if(data_sha==str(sha256)): xxxx=data break
print(xxxx)
Chaos
Little Lattice
S1mple_ECB
了解ecb的性质,是拼接的,取前32位和后32位,分别解密就行了
NSSCTF{ECB_m0de_1s_qui4e_s1mple}
md5太残暴了
题目描述:
小明养成了定期修改密码的好习惯,同时,他还是一个CTF爱好者。有一天,他突发奇想,用flag格式来设置密码,为了防止忘记密码,他还把密码进行了md5加密。为了避免被其他人看到全部密码,他还特意修改了其中部分字符为#。你能猜出他的密码吗? plaintext = flag md5 = ac7f4d52c3924925aa9c8a7a1f522451 PS: 第一个#是大写字母,第二个#是小写字母,其他是数字。
Dic = [chr(i) for i inrange(97,123)] #小写字母 dic = [chr(i) for i inrange(65,91)] #大写字母 num = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'] for i inrange(len(Dic)): for j inrange(len(dic)): for a inrange(len(num)): for b inrange(len(num)): for c inrange(len(num)): m = 'flag{' + Dic[i] + '00'+dic[j] + '_P4ssw0rd_N3v3r_F0rg3t_63' + num[a] + num[b] + num[c] md5 = hashlib.md5(m.encode('utf-8')).hexdigest() if md5 == 'ac7f4d52c3924925aa9c8a7a1f522451': print(m , md5)
n = 76236418318712173274495941060488893810931309177217802334230599201457092723011685048556311576262486371987147895332408646920500226769161418792142565209634495797142268681403865426056588605013602625268553194169434049817172340173907696496945054049859221379092764811535206778031226535614731731322630330166833765943 e = 65537 c = 7207616060389865156270906240837846478541820008527247539698331406253371238674590766101711421196342768182325013873320402422918804780590951789425587131632422554819735000106070325708057225062376701298825910565526713270553888227235612227223162695870584803109353377288421750982913226189395526612487664144379690552 h = 130285072635228037239175162118613869214302695058325046962039091162567931492116336918638092534964417960274466351834311039222269165021532950982276262717322395682559639859781516047319178212473103057947426886870612637975024605166325017663998263834789814181250953051730859433354534450232382414565421858172075431133498326501045697132640582932453817599366612200146802110424409285814189125929844293789544163802323048780585398714263586547670912817768592459281775837372982750626103047573532664320692775783627129463700810934670066747044799514243631607384814191188276380589420289084574680852618867732847029105400406874790675559126905078326495799755425006555539699119063191489852930421412630857588890593040420277938268954008973405431053073576987401154763326417551463323055736754390446 temp= gmpy2.iroot(h,5)[0] while n % temp !=0: temp =gmpy2.next_prime(temp) p = temp q = n//p phi = (p-1)*(q-1) d = gmpy2.invert(e,phi) m = pow(c,d,n) print(long_to_bytes(m))
Week3
pnearq
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
from Crypto.Util.number import * from gmpy2 import next_prime from flag import flag
p = getPrime(1024) q = next_prime(p) n = p*q e = 0x10001 c = pow(bytes_to_long(flag), e, n) print(f"n = {n}") print(f"c = {c}")
""" n = 19421904767367129549329507820147867763064747101931314714173717122035977491291441314433180813343755107381230481007143328156292096871675328839756035726106037229325380698967544660649710464634698425387682458721466040894830503881966355435442651493212040443436714597490121865537266815247879839020846287255634123530517095030752832857842819836940083915495464712363169428825344678729929317207583197980607919720642725221740680718976635305544368542563503440076036727388062097647374046378854873864505267644315352602271587283702733779081805129429479541906613334092422428543951370065910195162721686773383508480268145903016615151713 c = 16430654037742749931837577925393394466626615745270895225352757745284038922799868617243616416116392338428121605256850230862894296244375242336599929497221079420665154174930054597666915358687410522457846003186806053368237783147731665147575913322026626738697036282908055611350347494310666532700194563684837580022875526378181343082801716942536163583090541294011987732281942148455345223347021675781368596340860151253774597168954881987520338304516390785094435356412111780768446904948045448510663589654475221029009283144829902553888829840193614048967712676048740814622290029846433107762872806981599110271586325156855299974310 """
defisqrt(n): x = n y = (x + n // x) // 2 while y < x: x = y y = (x + n // x) // 2 return x
deffermat(n, verbose=True): a = isqrt(n) # int(ceil(n**0.5)) b2 = a*a - n b = isqrt(n) # int(b2**0.5) count = 0 while b*b != b2: # if verbose: # print('Trying: a=%s b2=%s b=%s' % (a, b2, b)) a = a + 1 b2 = a*a - n b = isqrt(b2) # int(b2**0.5) count += 1 p=a+b q=a-b assert n == p * q return p, q fermat(n)
smallRSA
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
rom Crypto.Util.number import getPrime, bytes_to_long import uuid
flag = "flag{"+str(uuid.uuid4())[:13]+"}" p = getPrime(100) q = getPrime(100) n = p*q e = 0x10001 m = bytes_to_long(flag.encode()) assert(m < n) c = pow(m, e, n) # print(f"flag = {flag}") print(f"n = {n}") print(f"c = {c}") """ n = 625718246679843150194146350359795658237410693353450690028041 c = 118795719073790634455854187484104547013000179946116068066473 """
n很小,factor爆破出p,q。
exp.py
1 2 3 4 5 6 7 8 9 10 11
from Crypto.Util.number import * from gmpy2 import *
e = 0x10001 n = 625718246679843150194146350359795658237410693353450690028041 p = 768780063730500942699787302253 q = 813910604866037851538498611597 c = 118795719073790634455854187484104547013000179946116068066473 d = gmpy2.invert(e,(p-1)*(q-1)) m = pow(c, d, n) print (long_to_bytes(m))