2025.11.数证杯

容器密码:GQ7aXryvOC*M8qG*eXa19K9*g&jtHS*Gtrimps@Qx*aYt4oRwwK*HeN0A$#EPv*u

阅读更多

HZNUCTF2024

HZNUCTF2024

ez_encode

cyberchef 一把嗦了

image-20240414204833256

sign-up

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
from gmpy2 import *
from Crypto.Util.number import *
from secret import flag

p=getPrime(1024)
q=next_prime(p+(p>>500))

e=0x10001

n=p*q

c=pow(bytes_to_long(flag),e,n)

print("n=",n)
print("c=",c)

其中q=next_prime(p+(p>>500))指的是:$ q= [p+\frac{1}{2^{500}}p] +r $

即 $ q = [(1+\frac{1}{2^{500}}p] +r $, r是为了将q凑为质数的整数。

$ \therefore n = p\ast q = [(1+ \frac{1}{2^{500}})p^2]+rp$

$ \therefore (1+\frac{1}{2^{500}})n = ((1+ \frac{1}{2^{500}})p)^2 + (1+\frac{1}{2^{500}})rp > ((1+\frac{1}{2^{500}})p)^2 ——①$

q2=[(1+12500)p+r]2=((1+12500)p)2+2[(1+12500)rp]+r2——②\because q^2 = [(1+\frac{1}{2^{500}})p + r]^2 = ((1+\frac{1}{2^{500}})p)^2 + 2[(1+\frac{1}{2^{500}})rp] + r^2 ——②

易知,②式大于①式

经过比较得[(1+12500)p]2<[(1+12500)n]<[(1+12500)p+r]2\therefore 经过比较得 [(1+\frac{1}{2^{500}})p]^2 < [(1+\frac{1}{2^{500}})n]< [(1+\frac{1}{2^{500}})p + r]^2

通过开方缩小范围得

$(1+\frac{1}{2^{500}})p < \sqrt{(1 + \frac{1}{2^{500}})n} < (1+\frac{1}{2^{500}})p +r = q $

所以,(1+12500)n\sqrt{(1+\frac{1}{2^{500}})n}的下一个素数即为q

q = next_prime(iroot((n + (n >> 500)), 2)[0])

ez_rsa

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from Crypto.Util.number import *
from flag import flag

def keygen(nbit = 32):
while True:
k = getRandomNBitInteger(nbit)
p = 3*k**17 + 3*k**11 - 53*k**7 + 12*k**5 - 114*k + 27329
q = 5*k**13 - 7*k**11 + 43*k**5 - 313*k**3 - 14*k + 18869
if isPrime(p) and isPrime(q):
return p, q

def encrypt(msg, n, e = 65537):
m = bytes_to_long(msg)
return pow(m, e, n)

p, q = keygen()
n = p * q
enc = encrypt(flag, n)
print(f'n = {n}')
print(f'enc = {enc}')

根据题目得到一个关于k的多项式方程组

用sage求解多项式

1
2
3
4
5
6
7
var('k')
p = 3*k**17 + 3*k**11 - 53*k**7 + 12*k**5 - 114*k + 27329
q = 5*k**13 - 7*k**11 + 43*k**5 - 313*k**3 - 14*k + 18869

eq=p*q==n

solve(eq,[k])

即可求得k,再求得p,q解一般rsa即可

你知道什么叫第二重要极限吗?

a=limx0(a1x+a2x++anxn)nxa = \lim_{x \to 0} (\frac{a_1^x+a_2^x+\cdots+a_n^x}{n})^{\frac{n}{x}}

你知道什么叫做第二重要极限吗?

其中

1
2
3
a_i = [1,9,9,8,4,6,1,9,9,4,8,1,4]   

flag="HZNUCTF{"+md5(res)+"}"

使用在线工具求得极限后md5加密即可

SICTF-Round3-Crypto-WP

[签到]Vigenere

维吉尼亚爆破密钥

img

签到,确信!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Crypto.Util.number import *
from gmpy2 import *
n = 8361361624563191168612863710516449028280757632934603412143152925186847721821552879338608951120157631182699762833743097837368740526055736516080136520584848113137087581886426335191207688807063024096128001406698217998816782335655663803544853496060418931569545571397849643826584234431049002394772877263603049736723071392989824939202362631409164434715938662038795641314189628730614978217987868150651491343161526447894569241770090377633602058561239329450046036247193745885174295365633411482121644408648089046016960479100220850953009927778950304754339013541019536413880264074456433907671670049288317945540495496615531150916647050158936010095037412334662561046016163777575736952349827380039938526168715655649566952708788485104126900723003264019513888897942175890007711026288941687256962012799264387545892832762304320287592575602683673845399984039272350929803217492617502601005613778976109701842829008365226259492848134417818535629827769342262020775115695472218876430557026471282526042545195944063078523279341459199475911203966762751381334277716236740637021416311325243028569997303341317394525345879188523948991698489667794912052436245063998637376874151553809424581376068719814532246179297851206862505952437301253313660876231136285877214949094995458997630235764635059528016149006613720287102941868517244509854875672887445099733909912598895743707420454623997740143407206090319567531144126090072331
e = 65537
c = 990174418341944658163682355081485155265287928299806085314916265580657672513493698560580484907432207730887132062242640756706695937403268682912083148568866147011247510439837340945334451110125182595397920602074775022416454918954623612449584637584716343806255917090525904201284852578834232447821716829253065610989317909188784426328951520866152936279891872183954439348449359491526360671152193735260099077198986264364568046834399064514350538329990985131052947670063605611113730246128926850242471820709957158609175376867993700411738314237400038584470826914946434498322430741797570259936266226325667814521838420733061335969071245580657187544161772619889518845348639672820212709030227999963744593715194928502606910452777687735614033404646237092067644786266390652682476817862879933305687452549301456541574678459748029511685529779653056108795644495442515066731075232130730326258404497646551885443146629498236191794065050199535063169471112533284663197357635908054343683637354352034115772227442563180462771041527246803861110504563589660801224223152060573760388045791699221007556911597792387829416892037414283131499832672222157450742460666013331962249415807439258417736128976044272555922344342725850924271905056434303543500959556998454661274520986141613977331669376614647269667276594163516040422089616099849315644424644920145900066426839607058422686565517159251903275091124418838917480242517812783383
R = Zmod(n)["x"]
while True:
Q = R.quo(R.random_element(7))
p = gcd(ZZ(list(Q.random_element() ^ n)[1]),n)
if p!=1:
q = sum([p**i for i in range(7)])
r=n//(p*q)
assert n==p*q*r
break
phi=(p-1)*(q-1)*(r -1)
d = pow(e,-1,phi)
m = pow(c,d,n)
print(long_to_bytes(int(m)))

创建n的多项式环循环查找n的因数

得到p,q,r后计算phi解flag

img

SuperbRSA

共模攻击,但e1,e2 不互素,套脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
from Crypto.Util.number import *
from gmpy2 import *
n= 19006830358118902392432453595802675566730850352890246995920642811967821259388009049803513102750594524106471709641202019832682438027312468849299985832675191795417160553379580813410722359089872519372049229233732405993062464286888889084640878784209014165871696882564834896322508054231777967011195636564463806270998326936161449009988434249178477100127347406759932149010712091376183710135615375272671888541233275415737155953323133439644529709898791881795186775830217884663044495979067807418758455237701315019683802437323177125493076113419739827430282311018083976114158159925450746712064639569301925672742186294237113199023
c1= 276245243658976720066605903875366763552720328374098965164676247771817997950424168480909517684516498439306387133611184795758628248588201187138612090081389226321683486308199743311842513053259894661221013008371261704678716150646764446208833447643781574516045641493770778735363586857160147826684394417412837449465273160781074676966630398315417741542529612480836572205781076576325382832502694868883931680720558621770570349864399879523171995953720198118660355479626037129047327185224203109006251809257919143284157354935005710902589809259500117996982503679601132486140677013625335552533104471327456798955341220640782369529
c2= 11734019659226247713821792108026989060106712358397514827024912309860741729438494689480531875833287268454669859568719053896346471360750027952226633173559594064466850413737504267807599435679616522026241111887294138123201104718849744300769676961585732810579953221056338076885840743126397063074940281522137794340822594577352361616598702143477379145284687427705913831885493512616944504612474278405909277188118896882441812469679494459216431405139478548192152811441169176134750079073317011232934250365454908280676079801770043968006983848495835089055956722848080915898151352242215210071011331098761828031786300276771001839021
e1=55
e2=200

g,x,y=gmpy2.gcdext(e1,e2)
m1=pow(c1,x,n)*pow(c2,y,n)%n
x = gmpy2.gcd(e1,e2)
k = 0
while 1:
m11 = m1 + k*n
m,s = gmpy2.iroot(m11,x)
if s:
print(long_to_bytes(m))
break
k += 1

img

easyLattice

格密码 NTRU 由于f的bit大,需要给p,h加上大系数k

1
2
3
4
5
6
7
from Crypto.Util.number import *
h = 9848463356094730516607732957888686710609147955724620108704251779566910519170690198684628685762596232124613115691882688827918489297122319416081019121038443
p = 11403618200995593428747663693860532026261161211931726381922677499906885834766955987247477478421850280928508004160386000301268285541073474589048412962888947
M = matrix([[1,(2**245)*h],[0,(2**245)*p]])
f,g = M.LLL()[0]
flag = abs(f)
print(long_to_bytes(flag))

img

NSSCTF_Round_#17-Crypto-WP

Level_1

题目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#真签到题
from Crypto.Util.number import bytes_to_long, getPrime
from secret import getflag

e1 = getPrime(1024)
e2 = getPrime(1024)
n = e1 * e2
m = bytes_to_long(getflag().encode())
c1 = pow(m, e1, n)
c2 = pow(m, e2, n)
print(n)
print(c1)
print(c2)
print(e1)
print(e2)

# n = 22517647586235353449147432825948355885962082318127038138351524894369583539246623545565501496312996556897362735789505076324197072008392656511657262430676945685471397862981216472634785622155317188784494912316440866051402627470561626691472280850273482836308002341429493460677206562201947000047718275995355772707947408688836667011206588727438261189233517003341094758634490421007907582147392858070623641389171229435187248184443645883661560636995548332475573072064240073037558031928639832259001407585962782698021735648128101459118863015844905452823095147248865104102562991382119836061161756978764495337874807458182581421229
# c1 = 1432393096266401187029059077791766305797845826173887492889260179348416733820890797101745501984437201566364579129066414005659742104885321270122634155922766503333859812540068278962999824043206496595825886026095484801291802992082454776271149083516187121160475839108002133113254134626407840182541809478892306748590016896975053434021666376203540725254480252049443975835307793528287818262102688334515632062552114342619781840154202525919769192765621085008206581226486157149883898548933475155236509073675387541466324512294079413938239828341890576923100769181401944289365386552139418728492565319685207500539721582552448971814
# c2 = 13299679392897297864252207869444022461237574801991239380909482153705185317634241850084078027230394830079554676426505967970943836811048777462696506309466535820372917756458083553031417406403895116557560548183674144457502601887632495739472178857537011190162283185735114683172731936834993707871636782206418680404006299140864001776588991141011500807549645227520128216130966268810165946959810884593793452437010902774726405217517557763322690215690606067996057037379898630878638483268362526985225092000670251641184960698506349245915816808028210142606700394584541282682338561482561343076218115042099753144875658666459825545602
# e1 = 155861690390761931560700906834977917646203451142415617638229284868013723431003139974975998354830978765979365632120896717380895021936387027045347260400512396388028781862427862974453223157509702913026222541667006325100878113871620322023188372501930117363623076837619478555007555970810681502521309925774889678793
# e2 = 144471983652821947847253052623701746810204736865723159569786739658583884214397562204788127484897909964898113250509653721265240138487697822089282456150238116811225975640330930854549232972314642221382625614304415750165289831040623741828600283778523993251940904896081111235859249916040849697146542311990869696453

明显共模攻击,直接套模板

exp:

1
2
3
4
5
6
7
8
9
10
11
12
from Crypto.Util.number import *
from gmpy2 import *
n = 22517647586235353449147432825948355885962082318127038138351524894369583539246623545565501496312996556897362735789505076324197072008392656511657262430676945685471397862981216472634785622155317188784494912316440866051402627470561626691472280850273482836308002341429493460677206562201947000047718275995355772707947408688836667011206588727438261189233517003341094758634490421007907582147392858070623641389171229435187248184443645883661560636995548332475573072064240073037558031928639832259001407585962782698021735648128101459118863015844905452823095147248865104102562991382119836061161756978764495337874807458182581421229
c1 = 1432393096266401187029059077791766305797845826173887492889260179348416733820890797101745501984437201566364579129066414005659742104885321270122634155922766503333859812540068278962999824043206496595825886026095484801291802992082454776271149083516187121160475839108002133113254134626407840182541809478892306748590016896975053434021666376203540725254480252049443975835307793528287818262102688334515632062552114342619781840154202525919769192765621085008206581226486157149883898548933475155236509073675387541466324512294079413938239828341890576923100769181401944289365386552139418728492565319685207500539721582552448971814
c2 = 13299679392897297864252207869444022461237574801991239380909482153705185317634241850084078027230394830079554676426505967970943836811048777462696506309466535820372917756458083553031417406403895116557560548183674144457502601887632495739472178857537011190162283185735114683172731936834993707871636782206418680404006299140864001776588991141011500807549645227520128216130966268810165946959810884593793452437010902774726405217517557763322690215690606067996057037379898630878638483268362526985225092000670251641184960698506349245915816808028210142606700394584541282682338561482561343076218115042099753144875658666459825545602
e1 = 155861690390761931560700906834977917646203451142415617638229284868013723431003139974975998354830978765979365632120896717380895021936387027045347260400512396388028781862427862974453223157509702913026222541667006325100878113871620322023188372501930117363623076837619478555007555970810681502521309925774889678793
e2 = 144471983652821947847253052623701746810204736865723159569786739658583884214397562204788127484897909964898113250509653721265240138487697822089282456150238116811225975640330930854549232972314642221382625614304415750165289831040623741828600283778523993251940904896081111235859249916040849697146542311990869696453

s,s1,s2 = gmpy2.gcdext(e1,e2)

m=(pow(c1,s1,n)*pow(c2,s2,n))%n
print(long_to_bytes(m))

Level_2

题目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 猜猜我是谁 猜对了直接秒出flag喔
from Crypto.Util.number import bytes_to_long, getPrime
from secret import getflag

p = ***
q = getPrime(1024)
e = you guess!
n = p * q
m = bytes_to_long(getflag().encode())
c=pow(m, e, n)
print(q)
print(c)
#p=one of ps
#q=145721736470529261146573065574028992352505611489859183763269215489708531333597694809923949026781460438320576519639268582565188719134157402292313959218961804213310847081787824780075530751842057663327444602428455144829447776271394663729996984613471623158126083062443634493708467568220146024273763894704649472957
#c=17441814714407189483380175736850663249578989775568187792928771544069162420510939242665830363276698262009780462912108642025299275146709817979705069095332726251759039923303627023610865046363171692163473939115438686877494878334016463787558794121885354719336139401336137097548305393030069499625065664884238710759260231321106291200849044147840392021931720902340003746946851806025722944795391356835342258387797980787437188976704677008092850181043891802072500430200735973581081228711070923822341261809453662427341958883142789220800541626034573952425948295446202775198692920613709157662831071515700549093766182579873408465779
#flag=NSSCTF{*}

思路:

根据题目,q已给出,p为ps.txt其中一个素数,那就遍历ps中的素数,判断是否是NSSCTF开头,即可得到flag

exp:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
from Crypto.Util.number import *
from decimal import Decimal
import sys
import gmpy2
sys.set_int_max_str_digits(1000000000)
with open("ps.txt","r") as f:
data = f.readlines()
q=145721736470529261146573065574028992352505611489859183763269215489708531333597694809923949026781460438320576519639268582565188719134157402292313959218961804213310847081787824780075530751842057663327444602428455144829447776271394663729996984613471623158126083062443634493708467568220146024273763894704649472957
c=17441814714407189483380175736850663249578989775568187792928771544069162420510939242665830363276698262009780462912108642025299275146709817979705069095332726251759039923303627023610865046363171692163473939115438686877494878334016463787558794121885354719336139401336137097548305393030069499625065664884238710759260231321106291200849044147840392021931720902340003746946851806025722944795391356835342258387797980787437188976704677008092850181043891802072500430200735973581081228711070923822341261809453662427341958883142789220800541626034573952425948295446202775198692920613709157662831071515700549093766182579873408465779

for i in data:
p = i.strip()
p = gmpy2.mpz(p)
q = gmpy2.mpz(q)
n = gmpy2.mul(p, q)
phi = gmpy2.mul((p-1),(q-1))
d = inverse(65537,phi)
m = pow(c,d,n)
if b'NSSCTF' in long_to_bytes(m):
print(long_to_bytes(m))

总结:

因为p*q后数值太大,需要用gmpy2的大数计算功能

Level_3

思路:

根据题目,需要使用pwntools连接,连接后计算665个共模攻击的计算,得到flag

exp:

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
from Crypto.Util.number import *
import gmpy2
from pwn import *
import re

n_obj = re.compile(r'n=(.*?)e1')
e1_obj = re.compile(r'e1=(.*?)e2')
e2_obj = re.compile(r'e2=(.*?)c1')
c1_obj = re.compile(r'c1=(.*?)c2')
c2_obj = re.compile(r'c2=(.*?)[+]')

io = remote("node1.anna.nssctf.cn",28598)
data = io.recvuntil(':')
for i in range(666):
data = str(data)
n = int(n_obj.findall(data)[0].replace(r'\n', ''))
e1 = int(e1_obj.findall(data)[0].replace(r'\n', ''))
e2 = int(e2_obj.findall(data)[0].replace(r'\n', ''))
c1 = int(c1_obj.findall(data)[0].replace(r'\n', ''))
c2 = int(c2_obj.findall(data)[0].replace(r'\n[', ''))
s,s1,s2 = gmpy2.gcdext(e1,e2)
m=(pow(c1,s1,n)*pow(c2,s2,n))%n
io.send(long_to_bytes(m))
if i == 665:
data = io.recvline()
data = io.recvline()
data = io.recvline()
print(data)
else:
data = io.recvuntil('[+] Pl Give Me flaag :')
print(data)

总结:

刚得到flag发现比赛结束一分钟了[悲伤]

ISCTF-Crypto-WP

Crypto

七七的欧拉

解题人:g0ubu1i
分解n后发现为某数的次方
image.png
根据欧拉定理,phi=p8 - p7,求得d解出题

1
2
3
4
5
6
7
8
9
10
11
12
from Crypto.Util.number import *
from gmpy2 import *

e=8401285423075497989963572888601376313375827722858883767564499066473101615084214973041844878664837606157257039358849583049856161628241418012475432529735909
n=4321524416983780646994834778612486851863709339970595612409550086067211224407144019110798099401660010305645681548980160563216101786447875231976835115531375372678886339587480251211072894186558627897353793098608766868067029578667171419890150599640781594755080391489447462042167529203389236065727274166091741227068469987681083794139925327545810024038937132463518225611578727737940746784891867532498184642892826569777559107609493212332054559366409007685504768163376250281644004067745087899653778023414105973047620041288118404657934689253192043728590231618132716567084621670074256312939305265244486145758609971249077639085204680923108132415216543541472534580414274250979940330459551536830268428508217821060604260805109071534457808355664329902779603050878055690772430842865701249378096775899778255848773171108341331128673249899037133851535556515961699925809139476576825524135111237249709241579903807179252011010794867269715170739895392375920757559721516050680666658719990497863646989338960261844762127142439486275294670858114079687572243312184222126710967744971775585723045524467708387051034760208768956889939050498139189352842087278125173957182804116052402778416216669522309692266036094371308166663738284209615212016564171075874421472070422416318901926525719485991792111414333398004433143751908199358861514725313334333703539239414806773743941986164981642517673117412666430463318509571757766510835600758060976848374353352239044908034501477295696684294816091801944163877509558909040753907584672390823893991672246726026216973013330313971007514064831801564703364591696610900089228302936595848024616691878437618798864186634802647568239526771151323609650598156701595265876736712670677452013054393336294483452480213271032488201259990782289047132105989846972462094302132564809025802421057537091870932014884606863807260521123084423689494401900014232257381801590783735595575258160274248494498550583673688754220860142413631521279464318987425447302135444093663034598455694901199312497459228254746451233078954904159983269585883146959928222698672413648364391121696092287848931565798557217897678221379451042304811449415982434055522599829843482810025780349284547491767219221510351411192251236517341826619338084348136539121415210345488359563985046136632077665460793346345051213014836088333266911684271237227766588616771431226302155269893547077232087387411935345207081799500649921586279416751311277417949192360648342427657867424947189027886922112452681434778850977010752230391327878892161
c=1319666577538961333645698288755316431847498788803191213042970951363587036899021668814931340784440773619019635330248746606532233949080268712626456845590851812018539646705520729734738948568349756255640832936325965096602018372418260009779997764653043892043725224481361578258532294625476542003357969893609762981355267857532927948279737945466285738730414948695579002627741734690862181161919734547857550654813379550806374778412603233570494684223057004866601064851006909940259029023083838730497564657690493780040030061594915385886594845808342023634855913932575150487723897981518504381563064479784253539091893925934095008385592529031453149337783826491324308222762190756839839091742536583068791632135883271750510776330897598323339568926234205068941397524390446254057404779041850572848212437589629794980799894974937730065394307284096622814438575278571743516485062058882794531407454597341604166586040406867868323002258035737328450923576878935675998377134860357842547595516243737449809845708319003744144753130977649201725370898918939022097783844477196723482879094829249203949784703408369396219233552019108990900029123063369670129291960293576115301371071209198455299007327352602249399500334424934488528506773472420414119617828578424633182320749576697196936762283306228974126242434663703609495003656244194067493769815032134577138807799395279843708630774412341952691146906264694889245375545635688534662371202213660012977431598746482601668122679279419039288257069843297770840263002870206849857995148396439717143553611140228607531647245352254251824086797704561756363448681983654454393569932173970943157225527780067126895832370645456372127507057750232257828579628856504832975775855059816283684123444984393171125206440588627925736223222718784319209561804023835238526792966229582251575475514349566824846911411659740321154272534589694497411065971714157409318007179403833025337349924938487211920583780456897879801099476865645416182025930390267064170271613760577949655548949317295792361772032185463678410983568470647837758657058230086368185901572658482084202212103405161775243930901117532775865963215971025744893777631306256061896284125630451368067313753222195227231131526000755922331413457862253392530308284156400411897252674398583100198330007779643967156773216464341590817951828849769679134515304258819218015083183653130972243262400248230445031327719507314015062447355358100770763425336581258193908638241498461735819218673116282476452340137513156421147748432605954889277898079292196216
p = 90043967260093945222624152587689121936371930974666442796337497007806436220933640104101224556701782897110707124711581073042785835680900647501045466519201150330902139448582877574558481499349246396434566916237734745291901204887326075328782341527220826176727297933741479223587035887696689567725839887008586221103

phi = p**8 - p**7
d = gmpy2.invert(e,phi)
print(long_to_bytes(pow(c,d,n)))

image.png

夹里夹气

解题人:dmw
b489aa1f37a1f079f0c1ebcfa9008b59.png
题目提示摩斯密码,看摩斯密码表
143dc4b5d5ee47edf8e766e16f7eaa26.png
根据flag外壳可以推断
嘤嘤?=. 嘤嘤嘤=-
得到
9a8afff99834cc6f54adcb9a9810ce86.png
解密得到flag:ISCTF{HSBDH_SFJ_JDNFJ_DJNFJDM}
a165f1b0cfaf5c2b1921dde084ed1e69.png

easy_rsa

解题人:g0ubu1i
获取附件后nc连接,得到pqec,编写脚本求m

1
2
3
4
5
6
7
8
9
10
from Crypto.Util.number import *
from gmpy2 import *

p=167561191404321668748830155982148128078094297761744585473561597817468679161266224937726777063364341455943741358249714181954186947851755403287400313044668068915799453457253339629929712548154901350977293977396925064084110789695911728228292958713708869220389929513985054498626193204179190043233878936508865839033
q=158850164670351411226854199870571072891191250008284001651273515387478727731321002321763694826236623788860130822650234773829136028319501896718021031170321199126229125742927056311652861918625254681349069189136573855288383606649620226798427177954527952663485539668001819685952435682898253076761435373461926046137
e=65537
c=4242413297580463331572289283614465576920321904916668533268592047566389769615853283522402653147881010365969562119872301345718233952127637191547842532720861202915213183417888317518184193386552827375852739915676012379130542280256557996822960648308856834792396590872307646080450688311758622439062833141968275861674897506922516574551903131353406719045301549179127740987746392700068342699602004118628459557889230235166487708932077823995407170566299934821909316066022781254941124247363837047877775106189816885421001854139347246364493895035678034310316567263582591786939062838380261769117834938911059384946629475006205178429

d = inverse(e, (p-1)*(q-1))
print(long_to_bytes(pow(c, d, p*q)))

得到flag
image.png

rsa_d

解题人:g0ubu1i
nc连接靶机后要求计算d
写脚本

1
2
3
4
5
6
7
8
9
from Crypto.Util.number import *
from gmpy2 import *

p=43625867
q=5050993
e=65537

d = inverse(e, (p-1)*(q-1))
print(d)

image.png

ezRSA(τ)

解题人:g0ubu1i

step1:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def step1(m):
p,q = getPrime(1024),getPrime(1024)
n=p*q
e=getPrime(512)
phi = (p-1)*(q-1)
while gcd(e,phi) != 1:
e=getPrime(512)
d = pow(e,-1,phi)
k = randint(800,1500)
f = factor(k)
# print(f"\n\n\n\n{k=}\n\n\n\n")
leak = (pow(e, 2) + (e*d - 1)*f)*getPrime(256) + k # (e**2 + (e*d-1)*k!)*x + k
print(f"{n=}")
print(f"{leak=}")
e = 65537
c = pow(m,e,n)
return c

根据output.txt我们有n,c,leak,而leak等于
![](D:\blog\hexo-blog\source_posts\ISCTF-Crypto-WP\3011dd7c7fb1be06026dcfd5f4dd1514.svg#card=math&code=leak %3D (pow(e%2C2)%2B(e^d - 1)f)getPrime(256) %2B k&id=ReRjY)
且phi = ed - 1,f为k的阶乘
由于给定的k的范围比较小,所以可以爆破k。
给leak%f后得到


由此确定e
2s为1280位且不是素数
由推导

由此确定e**2
s为1280位且不是素数
由上述条件可得到确定e的条件,写代码

1
2
3
4
5
6
7
8
9
for k in range(800, 1042):
f = int(factor(k))
e2_s = (leak-k) % int(f)
phis = (leak -k - e2_s) // f

s = GCD(tphi,e2_s)
if e2s.bit_length() == 1280 and isPrime(e2s)==False and s.bit_length()>=255:
print(k)
print(s)

即可得到k,s,继续推导可得到phi与e

由此解出第一部分

step2:

首先考察LCG算法,由LCG算法恢复出p

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
from Crypto.Util.number import *
from random import randint,getrandbits
from sympy import factorial as factor
from gmpy2 import is_prime as is_strongPrime
from gmpy2 import gcd
from libnum import s2n

from Crypto.Util.number import *
def gcd(a,b):
if(b==0):
return a
else:
return gcd(b,a%b)
leak2 = [362437850887271063413256292444148642949623196635276044583204094265607936120337004605360832421011, 1932915843524327487337992118762711929552569713433223514001673251237692307587356544615955431611435994003602897830069566867051943572065473955405337889221398, 11222178024143398739150445814520244630341642052876364179793404105841311693968292227072031763726153574031884490677131749512430325919668649359617953965112844, 5408933876805830533113961512210040977462510675785228477646978801328722923647434079128879371684477664804744431834418916837956820965870203842552250165916773, 1447143741705069323823257922715038721270982554690635708441585728089036094805730054505696492295730683300002193478561819037345041940787115528445592303142510, 3707657531268843465369646969917923274507341341483950204025637357600814449263032574496424566705812439915548150679438579110456264431525526309588664326456861, 9263925820149827740182684692442727161206242182976684575667062235695526783971703826794731732152445051579616121306722939129265340347908823003172137299057843, 207494591333501391015462321304802957885928775185602834554977737560856036337667840127810136802887548047878444936730742505483927963807357904024967768148122, 7052936859446617933917872361389151092893299250603966165472023802877016733939957851026719428770748111897050866474067880613419756475700748999497496482278608, 1169538791889404037461397919075674424569430764451305755000680272926397357803359328850780774937432248011264334398346178303234064891680342161511829008635621]
t = []
for i in range(9):
t.append(leak2[i]-leak2[i-1])
all_n = []
for i in range(7):
all_n.append(gcd((t[i+1]*t[i-1]-t[i]*t[i]), (t[i+2]*t[i]-t[i+1]*t[i+1])))

MMI = lambda A, n,s=1,t=0,N=0: (n < 2 and t%N or MMI(n, A%n, t, s-A//n*t, N or n),-1)[n<1] #逆元计算
for p in all_n:
p=abs(p)
if p==1:
continue
a=(leak2[2]-leak2[1])*MMI((leak2[1]-leak2[0]),p)%p
ani=MMI(a,p)
b=(leak2[1]-a*leak2[0])%p
seed = (ani*(leak2[0]-b))%p
plaintext=seed
q = n // p
if plaintext.bit_length() >= 63 and leak1-p-q==0:
#continue
print(a)
print(b)
print(p)
print(seed)

通过得到的a,b,seed重新计算seed

1
2
3
4
5
6
7
a = 77103936782340200964969557381530979461498267151335748569651214009683718895787
b = 80415964905483336441916158760498483436647287707097172421898625062076211518999
seed = 4700640019334050676
leak2 = []
for i in range(10):
leak2.append(seed := (seed * a + b) % p)
seed = (seed * a + b) % p

接着爆破key得到key

1
2
3
4
for key in trange(60000000+1,10**8 //2+1,-2):
if is_prime(key) and not is_strongPrime(key):
print(key)
break

拿到key后可求得base,通过final求得c,求解c得到后半段密文

1
2
3
4
5
6
7
8
9
10
11
key = 56052361
base = key ^ seed
e=0x10001
d = inverse(e,(p-1)*(q-1))
final = [2268617516274900905319941795987877533673889507146326516564545408684476960310333170888941124460992562245780101836116975666368936099249664924148379487909122, 1445275952377746701088629016221431744592935398639655895336779954310077866709012082302847692239730041591520169244063854849129773530127510048494782550102381, 7]
c = 0
u = 0
for i in final:
c += final * (base ** u)
u += 1
print(long_to_bytes(pow(c,d,n)))

image.png

signin

解题人:g0ubu1i
考点:Schmidt-Samoa密码系统

1
2
3
4
5
6
7
8
from Crypto.Util.number import *

c = 29897791365314067508830838449733707533227957127276785142837008063510003132596050393885548439564070678838696563164574990811756434599732001622138564176327233154381380717648392357672642893142367607369679906940371540867456654151408884171467638060523066406441697453971996011548195499549200103123841556085936672833238264876038160712793697159776332101536779874757463509294968879216810485825310481778472384531442206034564488532399171243463881900578407746982324779260941957792455217641883334131366614310644607114128868153897806362954456585661855569432513785225453501792356175649676419772626548071916379318631677869452985829916084336045071072493567871623113923140668031380684940109024609167449291380675124701557542736834722898328082888430566229322840781411336263268594978558564310744076581639469210462567543585251718744340216155557606004995449505782302864725856877289388008819135023371948017425832082773421030256964953984562211638060
N = 3231913372897424708803097969843687520868057190788284975066875241636436021279559026753076528399891936983240045179193386905918743759145596242896507856007669217275515235051689758768735530529408948098860529277921046146065473333357110158008648799207873976745048714516868561754202543130629713461365314627535982379718931633528922076268531363809414255082933615667770491818402126891370106045838695484124212397783571579791558324350069782623908757815983802849109451590357380624488436968737140312471089662428308113246310588336044438265822574558816510054763215983649467009345458480077882624118620789015758507736272402998721366662352794082495441303895025585316667229865533166614969641012195668280586477033200418153345241668242651407009849656745509386158276185301334443855737552801531617549980843398648751032649895403939319648954908487619711555700124294191702406981128355348449748466449951568451135718146828444185238617155432417897711198169
d = 220908195398117048628110042133057032501548264225985823161565460390793825899523662424732910718579350524590368287207857059670558852106434615134645183432670023784725430385048028248108677670095524205518013647694485975996499747580966911259433184798952372110628624294686853944766950244209186984164963987120416687012811346656498861438432610431705868541829977481875385468143747334359481673214618931159403123892213161430602430294790913847722073762999311674428134241956293914716183107414340330449465142849402354034926378025006749405210014879947411570380433942279355488861684317611066949685697268714760755591128598654573304969
l = pow(2,N*d,N)-2
x=GCD(N,pow(2,l))
print(long_to_bytes(pow(c,d,x)))

得到flag
image.png

SHCTF2023

SHCTF2023


Crypto

[WEEK1]Crypto_Checkin

下载附件后得到题目

1
QZZ|KQbjRRS8QZRQdCYwR4_DoQ7~jyO>0t4R4__aQZQ9|Rz+k_Q!r#mR90+NR4_4NR%>ipO>0s{R90|SQhHKhRz+k^S8Q5JS5|OUQZO}CQfp*dS8P&9R8>k?QZYthRz+k_O>0#>

使用CyberChef进行解密,发现为4层解密。分别为base85,base64,base32,hex,得到flag

base85解密结果为

1
R1kzRE1RWldHRTNET04yQ0dVMkRNT0JUR0UzVEdOS0dHTVlUT01aVklZMkRFTVpVRzRaVEdNWlZJWVpUR05TRkdZWlRHTUJXR1FaVEdOMkU=

base64解密结果为

1
GY3DMQZWGE3DON2CGU2DMOBTGE3TGNKGGMYTOMZVIY2DEMZUG4ZTGMZVIYZTGNSFGYZTGMBWGQZTGN2E

base32解密结果为

1
666C61677B546831735F31735F423473335F336E633064337D

hex解密结果为

1
flag{Th1s_1s_B4s3_3nc0d3}

[WEEK1]残缺的md5

1
2
3
苑晴在路边捡到了一张纸条,上面有一串字符串:KCLWG?K8M9O3?DE?84S9
问号是被污染的部分,纸条的背面写着被污染的地方为大写字母,还给了这串字符串的md5码值:F0AF????B1F463????F7AE???B2AC4E6
请提交完整的md5码值并用flag{}包裹提交

拿到题目后发现为根据得到的字符串匹配md5,思路为使用python遍历大写字母后组成字符串,进行md5加密。再得到符合要求的md5值

1
2
3
4
5
6
7
8
9
10
11
12
13
import hashlib

str_value = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"

for i in str_value:
for j in str_value:
for m in str_value:
flag = "KCLWG" + i + "K8M9O3" + j + "DE" + m+ "84S9"
obj = hashlib.md5()
obj.update(flag.encode("utf-8"))
result = obj.hexdigest().upper()
if "F0AF" in result and "B1F463" in result:
print(result)

得到md5值为 F0AF1443B1F463EAFFF7AEBB8B2AC4E6

[WEEK1]凯撒大帝

1
pvkq{mredsrkyxkx}

根据题目提示,加密方式为凯撒加密使用CyberChef解密

位移为16,解密结果为

1
flag{chutihaonan}

[WEEK1]进制

1
2
好熟悉的进制,但不知道加密了几层
3636366336313637376236313638363636623661366336383662363136383764

根据题目怀疑为hex

第一层解密后得到

1
666c61677b6168666b6a6c686b61687d

第二层解密后得到

1
flag{ahfkjlhkah}

[WEEK1]okk

题目:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook.
Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook! Ook. Ook.
Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook.
Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook?
Ook.

通过okk解密后得到

1
flag{123456789}

[WEEK1]熊斐特

题目:

1
2
熊斐特博士发现了一种新的密码。
uozt{zgyzhs xrksvi}

根据题目,加密为埃特巴什码

解密后得到

1
flag{atbash cipher}

[WEEK1]迷雾重重

题目:

1
2
3
4
5
6
7
8
题目描述:

morse?ASCII?


密文:

0010 0100 01 110 1111011 11 111 010 000 0 001101 00 000 001101 0001 0 010 1011 001101 0010 001 10 1111101

根据题目尝试通过摩斯密码解密得到

1
flag{morse_is_very_fun}

[WEEK1]难言的遗憾

1
2
3
4
5
6
7
8
题目描述:
我们本可以早些进入信息化时代的,但是清政府拒不采纳那份编码规则。 (注:flag为中文,使用flag{}包裹提交)



密文:

000111310008133175592422205314327609650071810649

根据题目猜测为中文电码,解密后得到

1
一天不学高数我就魂身难受

[WEEK1] 小兔子可爱捏

1
2
3
题目描述:宇宙的终极答案是什么?
U2FsdGVkX1/lKCKZm7Nw9xHLMrKHsbGQuFJU5QeUdASq3Ulcrcv9
你可能会需要一把钥匙,钥匙就是问题的答案。

根据题目判断为rabbit加密,密钥为42

解码后得到

1
flag{i_love_technology}

[WEEK1] what is m

1
2
3
4
5
6
7
from Crypto.Util.number import bytes_to_long
from secret import flag

m = bytes_to_long(flag)
print("m =",m)

# m = 7130439814059477413771863538044548993245251660073838020411807105607801507451075252124658989164881490641702328395728224520288268685033299812787734568748819610532741806627627101671065156596093

根据题目,将flag由bytes转为long,想获得flag只需将m由long转bytes

1
2
3
4
5
6
7
8
9
10
from Crypto.Util.number import bytes_to_long, long_to_bytes
"""from secret import flag

m = bytes_to_long(flag)
print("m =",m)
"""
m = 7130439814059477413771863538044548993245251660073838020411807105607801507451075252124658989164881490641702328395728224520288268685033299812787734568748819610532741806627627101671065156596093

flag = long_to_bytes(m)
print("flag:", flag)

得到flag为

1
flag{ther3_are_SeVeRA1_a1TeRNat1VES_to_TH3_1ON6_t0_8yteS_fuNc7l0n_24A9B2EF44d1}

[WEEK1]黑暗之歌

题目:

1
⠴⡰⡭⡳⠴⡰⡭⡰⡷⡲⡢⡩⡭⡡⠯⡩⡭⡡⡺⡩⡭⡡⠳⡩⡭⡡⡺⡩⡭⡡⡶⡩⡭⡡⡶⡩⡭⡡⡲⡩⡭⡡⡺⡩⡭⡡⠯⡩⡧⡊⡢⡩⡭⡡⠯⡩⡭⡡⡺⡃⡰⠫⡋⡚⡲⡍⡋⡮⠴⡰⡭⡶⡷⡲⡢⡩⡧⡊⡢⡃⡴⡵⡋⡁⡬⡵⡋⡁⡬⡵⡋⡁⡬⡳⡋⠲⠴⡯⡃⡗⠴⡰⡭⡴⠴⡰⡭⡶⡷⡲⡢⡩⡧⡊⡢⡩⡭⡡⡺⡩⡭⡡⡺⡩⡭⡡⠳⡩⡧⡊⡢⡩⡭⡡⠯⡩⡧⡊⡢⡃⡴⡵⡋⡚⡱⠫⡋⡚⡱⠫⡋⡚⡲⠵⠲⡺⠰⠽

经过盲文解码后(解码网站

1
4pms4pmpwrbima/imazima3imazimavimavimarimazima/igJbima/imazCp+KZrMKn4pmvwrbigJbCtuKAluKAluKAlsK24oCW4pmt4pmvwrbigJbimazimazima3igJbima/igJbCtuKZq+KZq+KZrz0=

base64解密之后

1
♬♩¶♯♬♭♬♫♫♪♬♯‖♯♬§♬§♯¶‖¶‖‖‖¶‖♭♯¶‖♬♬♭‖♯‖¶♫♫♯=

音符密码解密之后

1
flag{b2cc-9091-8a29}

[WEEK1] really_ez_rsa

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from Crypto.Util.number import getPrime, bytes_to_long
e = 65537
m = b''

p = getPrime(128)
q = getPrime(128)
n = p * q
m = bytes_to_long(m)
c = pow(m, e, n)

print("p =", p)
print("q =", q)
print("c =", c)
print("e =", e)
# p = 217873395548207236847876059475581824463
# q = 185617189161086060278518214521453878483
# c = 6170206647205994850964798055359827998224330552323068751708721001188295410644
# e = 65537

题目中给出了qpec,直接写出解密脚本解密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.Util.number import long_to_bytes
import gmpy2


p = 217873395548207236847876059475581824463
q = 185617189161086060278518214521453878483
c = 6170206647205994850964798055359827998224330552323068751708721001188295410644
e = 65537

phi = (p-1)*(q-1)
d = gmpy2.invert(e,phi)
m = gmpy2.powmod(c,d,p*q)

print(long_to_bytes(m))

得到flag为

1
flag{Y0ung_meiyou_xiaojj}

[WEEK2] 哈希猫

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
46
47
48
49
50
51
import hashlib
from secret import flag

assert flag[:5] == "flag{"
assert flag[-1:] == "}"
flag = flag[5:-1]
assert len(flag) == 43


print(hashlib.sha224(flag[0:2].encode()).hexdigest())
print(hashlib.sha256(flag[2:4].encode()).hexdigest())
print(hashlib.sha1(flag[4:7].encode()).hexdigest())
print(hashlib.sha1(flag[7:10].encode()).hexdigest())
print(hashlib.sha512(flag[10:12].encode()).hexdigest())
print(hashlib.md5(flag[12:15].encode()).hexdigest())
print(hashlib.sha256(flag[15:17].encode()).hexdigest())
print(hashlib.sha384(flag[17:19].encode()).hexdigest())
print(hashlib.sha256(flag[19:21].encode()).hexdigest())
print(hashlib.sha256(flag[21:23].encode()).hexdigest())
print(hashlib.sha256(flag[23:25].encode()).hexdigest())
print(hashlib.sha512(flag[25:27].encode()).hexdigest())
print(hashlib.sha224(flag[27:29].encode()).hexdigest())
print(hashlib.sha384(flag[29:31].encode()).hexdigest())
print(hashlib.md5(flag[31:34].encode()).hexdigest())
print(hashlib.sha512(flag[34:36].encode()).hexdigest())
print(hashlib.sha224(flag[36:38].encode()).hexdigest())
print(hashlib.sha256(flag[38:40].encode()).hexdigest())
print(hashlib.sha512(flag[40:42].encode()).hexdigest())
print(hashlib.md5(flag[42:43].encode()).hexdigest())


# 705460fa432983620cfdf55397e43161edf3367cdafe157ca0b46bc6
# ec61c8382b2d371090060b081d3c567f022bb6defd91e9defcbbe0787f080882
# 2b3e56ece4f0b1dadf21c5f01c1cd1124bdbbe45
# d309bebf43d3cdf7dfd1bc7e1de16f8b5b12deac
# e91e6821acdad6a65eff85d9d0b11df30392ce5f1c424058bce0029bf390d923d43d6d1ab3d84a638712bba566cbb18743ed372aa1c95ec7c83177d74e60cb20
# 90f80fa3a342375d71f427bf2fd61cd2
# ef2a3319810f3ae9cd5948f3229bc195d7b1558846487473b21a842f9d1b503b
# b655988f676a1494a400c8acead965a04b828e9538887e471a7985a12523cbe8027b838b49e7c548b43a633dfa81b010
# 688c5a4a65af33d6ddb7a8cb8e0d934e42d0f417a1b0fb6f755e050aa15a9dae
# fdee4726c2847c8788b39cb69f2777cf672711bb11d9622b07f0fe23fac1480e
# 051603900bc7a27051b385299b0ef6c3dd2da3c6216845df7f501d9e4337cbcd
# 38f3476fe78a5ac95ed2e2da792de22645c92f1466b30704c6d8d5d725325da9c742c5e8a3704caaea8b19d4b211780d32b7658958b6bb3f58f6f868f86e522c
# b162f6c91e9d02b7eba0c8dc0d4b0ac20002d47bcafa29699a54a682
# 34cfd54dcf443a572cbfa7c1cb90af1b580b98d4d42274ea3c99c25390065a985c81354ddc2e54e243f5be21b90f435b
# 50680fbb1bc80ff7ac8d5cdd0bee77fd
# 5b1fac8ceb254baeb8a794c105ef61f99b59d592ad1803b614be85fe12311a9b68307570f4e996fb20dbe82e2fcd65b0da16ecfa5577cebf178e0beabe271112
# a715591d887d66ed248ae4cc5aea34995d2feeb1130de534a7ecfdde
# 472e73d796e20aa8ff9059e6316f218e0322548f661ec4dc267507ed66317404
# d364a863110f07538a9f0e6b1e42b382979a7b26a53a554ecd35b8f08634ee8067119c4ddc48b9b1a0f6c266fdaeb698dfda95f122b2314e55700aa244fbe138
# 45c48cce2e2d7fbdea1afc51c7c6ad26

根据题目,由于flag被分为多组进行加密,所以每次hash加密是明文的长度很小,所以考虑进行爆破

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import hashlib
str_list = "0123456789!#$%&'()*+-/=<>?@ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_"
str_listt = []
for i in str_list:
for j in str_list:
strw = i + j
str_listt.append(strw)
for i in str_listt:
if hashlib.sha224(i.encode()).hexdigest() == "705460fa432983620cfdf55397e43161edf3367cdafe157ca0b46bc6":
a1 = i
else:
pass
for i in str_listt:
if hashlib.sha256(i.encode()).hexdigest() == "ec61c8382b2d371090060b081d3c567f022bb6defd91e9defcbbe0787f080882":
a2 = i
else:
pass
for i in str_list:
for j in str_list:
for m in str_list:
n = i + j + m
if hashlib.sha1(n.encode()).hexdigest() == "2b3e56ece4f0b1dadf21c5f01c1cd1124bdbbe45":
a3 = n
else:
pass
for i in str_list:
for j in str_list:
for m in str_list:
n = i + j + m
if hashlib.sha1(n.encode()).hexdigest() == "d309bebf43d3cdf7dfd1bc7e1de16f8b5b12deac":
a4 = n
else:
pass
for i in str_listt:
if hashlib.sha512(i.encode()).hexdigest() == "e91e6821acdad6a65eff85d9d0b11df30392ce5f1c424058bce0029bf390d923d43d6d1ab3d84a638712bba566cbb18743ed372aa1c95ec7c83177d74e60cb20":
a5 = i
else:
pass
for i in str_list:
for j in str_list:
for m in str_list:
n = i + j+ m
if hashlib.md5(n.encode()).hexdigest() == "90f80fa3a342375d71f427bf2fd61cd2":
a6 = n
else:
pass
for i in str_listt:
if hashlib.sha256(i.encode()).hexdigest() == "ef2a3319810f3ae9cd5948f3229bc195d7b1558846487473b21a842f9d1b503b":
a7 = i
else:
pass
for i in str_listt:
if hashlib.sha384(i.encode()).hexdigest() == "b655988f676a1494a400c8acead965a04b828e9538887e471a7985a12523cbe8027b838b49e7c548b43a633dfa81b010":
a8 = i
else:
pass
for i in str_listt:
if hashlib.sha256(i.encode()).hexdigest() == "688c5a4a65af33d6ddb7a8cb8e0d934e42d0f417a1b0fb6f755e050aa15a9dae":
a9 = i
else:
pass
for i in str_listt:
if hashlib.sha256(i.encode()).hexdigest() == "fdee4726c2847c8788b39cb69f2777cf672711bb11d9622b07f0fe23fac1480e":
a10 = i
else:
pass
for i in str_listt:
if hashlib.sha256(i.encode()).hexdigest() == "051603900bc7a27051b385299b0ef6c3dd2da3c6216845df7f501d9e4337cbcd":
a11 = i
else:
pass
for i in str_listt:
if hashlib.sha512(i.encode()).hexdigest() == "38f3476fe78a5ac95ed2e2da792de22645c92f1466b30704c6d8d5d725325da9c742c5e8a3704caaea8b19d4b211780d32b7658958b6bb3f58f6f868f86e522c":
a12 = i
else:
pass
for i in str_listt:
if hashlib.sha224(i.encode()).hexdigest() == "b162f6c91e9d02b7eba0c8dc0d4b0ac20002d47bcafa29699a54a682":
a13 = i
else:
pass
for i in str_listt:
if hashlib.sha384(i.encode()).hexdigest() == "34cfd54dcf443a572cbfa7c1cb90af1b580b98d4d42274ea3c99c25390065a985c81354ddc2e54e243f5be21b90f435b":
a14 = i
else:
pass
for i in str_list:
for j in str_list:
for m in str_list:
n = i+j+m
if hashlib.md5(n.encode()).hexdigest() == "50680fbb1bc80ff7ac8d5cdd0bee77fd":
a15 = n
else:
pass
for i in str_listt:
if hashlib.sha512(i.encode()).hexdigest() == "5b1fac8ceb254baeb8a794c105ef61f99b59d592ad1803b614be85fe12311a9b68307570f4e996fb20dbe82e2fcd65b0da16ecfa5577cebf178e0beabe271112":
a16 = i
else:
pass
for i in str_listt:
if hashlib.sha224(i.encode()).hexdigest() == "a715591d887d66ed248ae4cc5aea34995d2feeb1130de534a7ecfdde":
a17 = i
else:
pass
for i in str_listt:
if hashlib.sha256(i.encode()).hexdigest() == "472e73d796e20aa8ff9059e6316f218e0322548f661ec4dc267507ed66317404":
a18 = i
else:
pass
for i in str_listt:
if hashlib.sha512(i.encode()).hexdigest() == "d364a863110f07538a9f0e6b1e42b382979a7b26a53a554ecd35b8f08634ee8067119c4ddc48b9b1a0f6c266fdaeb698dfda95f122b2314e55700aa244fbe138":
a19 = i
else:
pass
a20 = '9'

flag = a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10 + a11 + a12 + a13 + a14 + a15 + a16 + a17 + a18 + a19 + a20
print(flag)

Misc

[WEEK1]请对我使用社工吧

根据给到的图片,我们可以发现的信息有,万达东厅,一家幸运好玩的点,以及商城的部分装饰

1

前往搜索引擎搜索一家幸运好玩的店找到一张图片如下

其中发现彩票店后的楼梯与题目中给出的类似,确定社工的地址为山东东营,东营只有一所中国石油大学,所以flag{山东省____东营市____东营区_中国石油大学}

[WEEK1] 也许需要一些py

打开题目压缩包后得到摩斯电码,解密后得到

1
this1sy0ukey

作为密码成功解压压缩包

得到无后缀文件与txt文件

使用010打开flag文件后发现文件头损坏改为png文件头后成功打开

结合flag.txt文件后

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import hashlib

def letter(s:str):

res=[]
def dfs(idx,n,s:str):
if idx ==n:
res.append(s)
return
if s[idx].islower():
dfs(idx+1,n,s[:idx] +chr(ord(s[idx])-32) +s[idx +1:])
if s[idx].isupper():
dfs(idx+1,n,s[:idx] +chr(ord(s[idx])+32) +s[idx +1:])
dfs(idx +1,n,s)
dfs(0,len(s),s)
return res

for s in letter("pNg_and_Md5_SO_GreaT"):
if hashlib.md5(s.encode(encoding='UTF-8')).hexdigest() == "63e62fbce22f2757f99eb7da179551d2":
print(s)
print("su")
exit()

得到flag为

1
flag{Png_AnD_md5_so_GReAt}

[WEEK1] ez-misc

打开01game文件后发现841个0和1,841为29x29,判断为二维码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from PIL import Image

strings = open(r"01game.txt",'r').read()

pic = Image.new("RGB",(29,29))
num = 0
for x in range(29):
for y in range(29):
if strings[num] == '1':
pic.putpixel((x,y),(0,0,0))
else:
pic.putpixel((x,y),(255,255,255))
num +=1
pic.show()

得到二维码

扫描后得到

1
hit_k1sme4_4_fun

得到压缩包密码,成功解压出flag文件,使用010打开后发现为zip文件,更改后得到带密码的压缩包,并带有hint

1
01110010011011110110001101101011011110010110111101110101

解密为

1
rockyou

联想到kali的rockyou密码本,使用密码本爆破得到密码为

1
palomino

得到flag.txt中为

1
ksgeylalssgSlHffgS{{gHklesgg{afkH{lHalSkgygf{{kfgslg1l11Ss{ellal{f{fka{l{gllaHf1elSsa14Hyl}f}Slmyfg4gleSlk1k{Sfggga4aHg}SlllgHHfgy1Sgaakfga1HmH{sylgs{ffkHyyaals{S{almklagfskyg{f1a1yffe{{SSSylHagf1{S{Ham{Sf}ga}fHlgl{aSl1{lkyfff}flkHffaagHegSaHSkafgH{ymaykSylS{{1llf{efeHfaalaSafflmSlylaslfk}mlllaaHSfk{SyH{yayyf{lyy1ylaff{aaygfl2333amSaeHy{fms{ySamkSga{ffylaalHlfgfglafHSSH{algmff1SSHHflSkSeygff14sgSl1ff41HkHaaal{k553klgfffmslk{Haylam{{llfggSlggaya{SaSg{lya{fflyaafk{aflkgay{kHg{fgkff1{akefeSlfmySkgglka{mSfmSemgykSSl1gfgHllgkygmfafmfakaaegafHgklSklaaH1HglgfeS41lgkS{ggaHmmSlfykfas4f{afgHaa{ylaf{{eHS4lHf{gfg{eSlSf{gsaSgyfSyHfHHagkSaS{{fa1yalsf{flf1f{{{fafakfsmaef4amHsyfSaH56789gfl{{{1yySlkael41Say{faffaSHy4Ss{eHyfmlykSm}{{ygaalgg{kHlHelffHasfaaf{SykfS666l{SS1{SygfgaHgSllf4effgHHykklSl1ga1lHafsy{f{141yaakllla1al4SaffgflalkSS1llg1{af{SyygsSSseHffemfHlaflfgkeag{gfSgmlkmflSlgHkSfylffllHya{ksgySlHHglg{H1lyf{f1gggHaffS{afalafg7825fakaSfyfg11gfHkfySsaaafff1{mfgalfa{gay1ySf{asHgg1HaHfkl1la11fsg{S11all{g{lyfHeala{f1agg{fHHglH1{SSfaSleyayaSy{yHylyHHl{ggayf}f11a{asf{gmf{{{SykHk1sSm1l}sgmSSff11a}SaSfHsmg}g{kallf{llHssl{ffsffagHgkHaa{f{f{alfglgaaS4sgHmkgSagl1lfSslfHyf{fglH{llfsaaSaglslgy11yfykHygf{lyfyfg}gafgSfaeg4fka{SaHllk{{fks{1f1S1gyl{fflkyllafHl1Sslgyga{llkHlHyaylgaf{skSH1yyfgf{Sflg{4aHSa{kkekH{yygmygl{gf1aleglfm{ygHSHHykSH{Hl{y{{Sa{k{gg1ayfayg{gSg{ffg1llHsa{Hls1Slfg{m{fHHf{mm{l1llk{fffeyH4falla#s1{lyggaykeffS{lkgls{gkeak{l1gS{kH4f{lglgkSagS1yfem11{ml1fsklyllSlgfseag{glkSSfl1ylffalmgfsfaHly4k{saSSkkSH{malf{{g{gSm1lafyy{lsall}aHg1aafaS1klSaHHa{llfSesaySgafgeySllaH1s{gygHHSfy{HSa{l{ffka1alkfagsge{lfgflgk{Slfl{ya{gff1aHmfSgHSsf1SalS5656alfyyllfa{yk{s{{lfaSay{{gaH{HS{aSly1slyHfgaHm{S{ggffmSHakafaSHmSHS{alkggfkHHgy{eS1g{HklfHgH{a41a{gsflgfaygSsfaglygl1ffHlysllsSsf{HlHaaSl{kgflkH{sgykyHfsyHly{klHgSfSal4f1lya4lkala{f(SH{laf1kffyylfflgffg}Sa1HsllSSS1aHgglHl{alHffg1eylsffsysllkSfllgylS{fHSSmlagHflSH1Hmalsg{af{SlySleyfHfasH}SeyalslkagySHaffaffmfggaam1kal{Sff{{alg{s{lsgHmaHSmllgHfaHSl11sHlgygskgHmkaaa1fllfggf{ggygffygfyfkgS1sgS{gfflHa1lagSe{fffga1sS{{H{gSsfHSg}Ha{Slf#$%1asa1gyfllS{yflyg1sSSmkfyykfggaHfHHkSfa{fSleskmagslgeflllayff{ySslySl}kf{agsgkkmHklHSs{k}glllmys1fSll1fSgyy{{sa{mga{gaka1lH1malfklSHaaklfklf1fglakalyaHas1ff4HfffSayg{{gH1kse{gage{skHaSHy1fekHgayk1gkgmS{g{1glgSfy{mg{asg{fkafalfygf{l1SHSl1ka{{ayHkS1g{ay1glSaSHa{Hsff1lfS4H{{ae1lHSlllSmafHSH{kak{ggy1H{fagSH4a1HfSgl{a}a{Sf{lHHf{kayl1l{flSfglfelySggfal{a}{aa{S1gf1SaHfaf{SmaSgHl{falHyggHg{ggglff{klfkSfyllSgk}gfafayHHygaflkS{als{SflkSls1fSgygygf4fHHge}flyggafS{fmafl{fyykHafSHH{14af1ysaH{lkfk{kSS1{fafH{1mHall{sflffa1fl1llf1SkyfafeHa{gfkSlggfsgmSlH{gSllHaSHa1{faSyllyysa{1sfla{1SmfSgy1lslayfaya1agHl4a{fSmmaklHkafkfHfgyHSS{{ay{ylaH1ylHH{gsyHHflfSyg2^%efSlfygg{Sfa{{kSfy{fHlaag{lllagl{aSfkHkgaSfafSfSafl1yss1ymHSSseafk{{a{f{Sa{Hsffffyam4HmmkSakfagyHkglgSefsagmHSaa{lSlykH{lSlHagysgak{llfys{4{Sl4gyamfa{yllf{SSgf{{4g{{alfkg{yklaSgyklyHglsalgfaS4aH4llk{Sl{gkyH{kgsSg{kgkma}kya{sgf{Hfll1ay@gk4sSgeHg{4fHlsskaSaaffffHHSgakSmS1lsa{gsSf{gfylH{l1{gHSaga{lgkkHHH{mfkgHaf1{SlSkHffggsH{HlHmSyfylHSg1SlgggafSHSalfgfae1S1amHfele{lyf11SgSsS{fSs1g{S1yyfSylS{sgSlg{lflSSeaSSgsHSegllygylaflag{}fglgHlSaH{SsaalyHfgkalfyfHmly1fsyyySS4SasagflaS{{yfayl4HHlksl{lHkfSlfyaaff}HkffgSyHl{a1{gSglsafSmfegsgsHfkafSg{falmgf}{llHHkHkHyslagHyfg{f{{lSe{gaSmfH1y{{g{}as1{{af{flH{gaglSSaSaSffg1afgallggyaa{{yalS4ykSySk1gky{gs{g{ll1lSlyafykgg1fs{4{1fslfS{slkSy4mskHkflyf{lk4f1aS2359afall1kk{eg1fyH{l1agylyf{HkSyg{mall{l1g1f1laayfHslalykkylslma{4s{HagSka1Hsal1kHkSSfSy1{Skyags{kHmfglglf{lg{fa1fgSmllmffksgafgl1aa{lmmay{ySglHfH4l4Hf{{{gllylgSafHgfHllSefgaSlf{fgf{lgSS@syl{gkSmkaykllHSy1ffkSS1aSfeggSgsyflHaHHlkklHaslf{}Ss{laaHalHSHyskSgkySl{{Sgsaf1Hlfaykg{Hkll{sasl1ffe{{kkkfgy1ffHflsglfgSfHffy11y{fffly1yklk{fHHmagalfygHaglfSfSSakfflaHffl{ffglfaHg{skaal{fHfSSfy1Hfffmy{llllffma{eaS{s{lgHHlSaef1glSfgH4esaSyHy{aSfagHlkll1fkfHf{m1SsSk}ygfylgS11{flkflkaksflafk{llsfafsfay{1lfgygHSgfH4gSfS{mySHasf1aSkffsykkS1lfHagffa{fHlyaHe{SSfS{}S{gyykefkl{{afl1ffykSkyH{klSsgfSk{g1{f1klffSsa1{afaagH{s{a{1agafa1sfgmkf1gfylggSfkaSalHffHgf{gHSfgHsglmllsllyfmH{sySSgHSaa1flSfgkglms4{HffHgfgSaglafg{yakgg{algfyl{HH1feaagllgsHlfglaHkfkfglfy1{mHlmgfkSay1fHkfskmsyklsyska{{1HagHSySkHleflakkH{Sgfy{faff{Hgmk1fky1lffag{fSggySamlyfgffHgll{lfkSfHafyfal@@@ffllkmylf{yklH{aya{14yla{SlllyaHaaa{e1gamamaSskmkaafyalgffle{aHym{s1lf{l1aaSe{lgHf{klkHH{{{HlfyHaHaa1Sa{SSggHl1{magf11kH1kHsyg{{g1{afySmy111klykagHSksgflesggggleg{aalSm{asgfg1{ylHfa{alSllg{HkggksHlfml{a1HafamflHaa1alfygHSgS1l1fHaa1maSa{lfalalkSyaa{f

使用字频分析得到flag

1
flag{SHyk1sme4}

[WEEK1]签到题

题目:

1
Wm14aFozdDBhR2x6WDJselgyWnNZV2Q5

使用两次base64解密后得到

1
flag{this_is_flag}

[WEEK1]Steganography

解压后得到两张图片,压缩包。先对careful.jpg分析

使用010打开后发现结尾有

1
MTJlcmNzLi4uLi45MDlqaw==

解密后为

1
12ercs.....909jk

对careful1.jpg分析,查看属性后发现

1
xqwed

替换之前得到的字符串中的五个点后得到

1
12ercsxqwed909jk

解压压缩包得到

1
flag{4d72e4f3-4d4f-4969-bc8c-a2f6f7a4292c}

[WEEK1] 可爱的派蒙捏

将图片使用binwalk分离后得到两端文本,对比两段文本的不同

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def read_file(file_path):  
with open(file_path, 'r', encoding='utf-8') as file:
return file.read()

def compare_files(file1_content, file2_content):
flag = ''
for i in range(len(file1_content)):
if file1_content[i] != file2_content[i]:
flag += file2_content[i]
return flag
if __name__ == "__main__":
file1_path = r"C:\Users\g0ubu1i\Desktop\SHCTF\Misc\WEEK1\可爱的派蒙捏\_1.jpg.extracted\txt1.txt"
file2_path = r"C:\Users\g0ubu1i\Desktop\SHCTF\Misc\WEEK1\可爱的派蒙捏\_1.jpg.extracted\txt2.txt"
file1_content = read_file(file1_path)
file2_content = read_file(file2_path)
flag = compare_files(file1_content,file2_content)
print(flag)

得到flag

1
flag{4ebf327905288fca947a}

[WEEK1] message

题目

1
0001000D91683106019196F40008C26211002072B975915730671B54114F60000A000A592982B15C065265843D8A938A00000A000A5E8A9AA453D883525730000A000A91527CBE518D6E1751656CEA75D5000A000A6C899ED852305BF94E0D8D77000A000A8FD94E0053CC624B535191195230002062B14F4F4F6000530048004300540046007B00620061003900370038003400300035002D0062003100630038002D0038003400370063002D0038006500360039002D006600360032003100370037006500340063003000380037007D

直接进行hex解码后得到

1
S H C T F { b a 9 7 8 4 0 5 - b 1 c 8 - 8 4 7 c - 8 e 6 9 - f 6 2 1 7 7 e 4 c 0 8 7 }

[WEEK1] 真的签到

关注公众号

[WEEK1] 远在天边近在眼前

下载压缩包后发现flag在文件夹名中间并反向

1
}\d\1\f\a\9\1\7\c\4\a\d\4\_\?\t\H\9\I\R\l\A\_\y\S\a\E\_\y\1\I\A\e\r\_\5\I\_\5\1\H\T\{\g\a\l\f
1
2
3
4
5
6
strr = r'}\d\1\f\a\9\1\7\c\4\a\d\4\_\?\t\H\9\I\R\l\A\_\y\S\a\E\_\y\1\I\A\e\r\_\5\I\_\5\1\H\T\{\g\a\l\f'
flag =''
for i in strr:
if ord(i) != 92:
flag += i
print(flag[::-1])

处理后得到

1
flag{TH15_I5_reAI1y_EaSy_AlRI9Ht?_4da4c719af1d}

[WEEK1] 奇怪的Screenshot

猜测为CVE-2023-28303,使用工具对截图修复

得到

百家姓密码,解密后得到

1
flag{CVE-2023-28303-Win11-Snipping-t00l-is-n0t-Secure}

[WEEK2] 表里的码

修改sheet.xml文件,确保表格为29x29,令s=4的为1,其余为0。使用pillow得到二维码

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
from PIL import Image
import os
from xml.dom.minidom import parse

xml_file = r"sheet2.xml"
strings = ""
domtree = parse(xml_file)
rootNote = domtree.documentElement
row = rootNote.getElementsByTagName('c')
for i in row:
c = i.toxml()
if 's="4"' in c:
strings += '1'
else:
strings += '0'
pic = Image.new("RGB",(29,29))
num = 0
for x in range(29):
for y in range(29):
if strings[num] == '1':
pic.putpixel((x,y),(0,0,0))
else:
pic.putpixel((x,y),(255,255,255))
num +=1

pic.show()

扫码后得到

1
flag{j0k3r_1s_my_wif3}

[WEEK2] 可爱的洛琪希

下载压缩包后存在伪加密,使用010修改09为00

得到roxy.txt

1
/9j/4AAQSkZJRgABAQEAYABgAAD/4REYRXhpZgAATU0AKgAAAAgABwEAAAMAAAABA+gAAAEBAAMAAAABBkAAAAESAAMAAAABAAAAAAEyAAIAAAABAAAAAIdpAAQAAAABAAAIepyfAAEAAABOAAAQwuocAAcAAAgYAAAAYgAAAAAc6gAAAAgAAAAAAAAc6gAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

通过base64解图片得到图片

通过010打开得到密文与key

1
2
密文:33736c6e6f7b52626b795f71696966686b76217d
key:nanian

首先使用hex解密密文,再使用维吉尼亚密码得到

1
flag{Roxy_daisuki!}

[WEEK2]图片的秘密

将题目通过binwalk分离后得到图片

使用盲水印工具fft得到flag

[FINAL]问卷

关注公众号进入问卷获得flag

PWN

[WEEK1] nc

使用nc连接后cat flag得到flag

[WEEK1] 口算题

nc 连接后提示需要计算,使用pwntools编写脚本得到flag

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from pwn import * 
p=remote('112.6.51.212',31745)
p.sendafter('start...',b'\n')
p.recvuntil('\n')
s=p.recv()
s = s.replace(b"\xc3\x97", b"*")
s=s.replace(b"\xc3\xb7",b"/")
answer=eval(s[:-4])
p.sendline(str(answer))
for i in range(199):
p.recvuntil('\n')
p.recvuntil('\n')
s=p.recv()
s = s.replace(b"\xc3\x97", b"*")
s = s.replace(b"\xc3\xb7",b"/")
answer=eval(s[:-4])
p.sendline(str(answer))

Web

[WEEK1] babyrce

首先使用ls查看路径

再绕过过滤cat flag

[WEEK1] 1zzphp

首先通过数组绕过n的过滤,再通过回溯次数限制绕过c_ode,通过python获取flag

1
2
3
4
5
6
import requests
url = 'http://112.6.51.212:30662//?num[]=m'
payload = {'c_ode':'1111'*260000+'2023SHCTF'}

response = requests.post(url=url, data=payload)
print(response.text)

[WEEK1] ez_serialize

payload:

1
O:1:%22B%22:1:{s:1:%22q%22;O:1:%22C%22:2:{s:3:%22var%22;N;s:1:%22z%22;O:1:%22D%22:1:{s:1:%22p%22;O:1:%22A%22:1:{s:5:%22var_1%22;s:57:%22php://filter/read=convert.base64-encode/resource=flag.php%22;}}}}

得到flag.php通过base64加密的内容

解密后得到

[WEEK1] 登陆就给flag

通过弱口令admin/password登陆后得到flag

[WEEK1] 飞机大战

查看main.js得到

解密后得到

1
flag{e6cc550d-2a12-47a5-a890-0d522755548e}

[WEEK1] ezphp

[WEEK1] 生成你的邀请函

1
2
3
4
5
6
7
8
9
10
11
12
13
import requests
from PIL import Image
import io
url = 'http://112.6.51.212:32990/generate_invitation'

Body = {
"name": "g0ubu1i",
"imgurl": "http://q.qlogo.cn/headimg_dl?dst_uin=1738327323&spec=640&img_type=jpg"
}
re = requests.post(url=url,json=Body)
image_content = re.content
image = Image.open(io.BytesIO(image_content))
image.save("avator.jpg")

得到邀请函上的flag

[WEEK2] EasyCMS

通过默认密码admin/tao登录后台

通过任意文件读取漏洞获得flag

进入后台后任意点击一个下载后抓包,将下载地址改为…/…/…/flag

成功下载到flag

[WEEK3] 快问快答

使用python获取的计算式后将答案提交,最终获得flag

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
import re
import requests
import time
s = requests.Session()
url = 'http://112.6.51.212:31025/'
r = s.get(url)
r.encoding = 'utf-8'
for w in range(50):
num = re.findall(re.compile(r'<h3>题目:(.*?)='), r.text)[0]
time.sleep(1)
temp = ''
for i in num:
if i == "÷":
temp += "//"
elif i == "与":
temp += "&"
elif i == "x":
temp += "*"
elif i == "异":
temp += "^"
elif i == "或":
pass
else:
temp += i
num = temp
r = s.post(url, data={'answer': eval(num)})
print (r.text)

RE

[WEEK1]signin

使用ida打开题目后得到flag

[WEEK2] pycode

通过题目得到py文件,再编写解密脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import base64
value = ''
flag = ''
obfuscated_output = '==AeAF3M-tzO-giQ-AUQosDQ9tGK7MDPuhC47tDNB5Tb8Yn4sdW4'
obfuscated_output= obfuscated_output.replace('t','0')
obfuscated_output = obfuscated_output.replace('4','c')
obfuscated_output = obfuscated_output.replace('-', '+')
output = base64.b64decode(obfuscated_output[::-1]).decode()
for i in range(len(output)):
temp = output[i]
temp = chr(ord(temp) - 3)
value += temp
for i in range(len(value)):
temp = value[i]
temp = chr(ord(temp) ^ 8)
flag += temp
print(flag)

NTACTF2023

NTACTF2023

Crypto

sign_in

题目:

1
佛曰:冥藝涅呐遮奢都除哆悉冥心罰所諳娑隸呼哆朋俱特哆漫梵姪罰帝大伽侄地彌梵遮娑皤道罰度奢。冥輸以諳怛密皤礙多以耨奢迦哆漫南冥數參曰怯竟怯吉冥智羯等缽陀侄涅故遠呐老諳穆梵栗有梵呼怯盧俱盧若盧度俱怖者夜一皤藝跋

使用与佛论禅解密得到

1
flag{fochan_Welcome_to_NTA2023}

我不是猪,我是佩奇!哼唧!

题目

使用猪圈密码解密后得到

1
xiyounetyyds

new_base64

题目

1
[5, 11, 0, 6, 62, 61, 57, 0, 53, 56, 56, 58, 0, 59, 53, 54, 52, 4, 56, 0, 5, 57, 2, 52, 2, 60, 60, 59, 60, 0, 1, 1, 59, 4, 58, 3, 54, 63]
1
new_base64 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}'

判断题目列表为字符串的索引,使用python脚本解密

1
2
3
4
5
6
listt = [5, 11, 0, 6, 62, 61, 57, 0, 53, 56, 56, 58, 0, 59, 53, 54, 52, 4, 56, 0, 5, 57, 2, 52, 2, 60, 60, 59, 60, 0, 1, 1, 59, 4, 58, 3, 54, 63]
new_base64 = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789{}'
flag = ''
for i in listt:
flag += new_base64[i]
print(flag)

flag为

1
flag{95a1446a7120e4af5c0c8878abb7e6d2}

我吃两碗base

题目:

1
ZmxhZ3s1NDQ4Njk3MzIwNjkzNDVGNkU1NDYxNDM1NDQ1NTIyMDU5NTk0NDUzMjB9IApUcnkgaXQgYWdhaW4sIGJ1dCB0aGlzIHRpbWUgaW4gYSBkaWZmZXJlbnQgd2F5

使用base64解密得到

1
flag{544869732069345F6E546143544552205959445320}

使用hex解密得到

1
THis i4_nTaCTER YYDS 

米斯嘎,木斯嘎,神奇的阿斯克码

题目:

1
flag = [102, 108, 97, 103, 123, 48, 56, 97, 97, 102, 55, 98, 53, 100, 51, 98, 102, 49, 57, 55, 57, 99, 49, 102, 100, 49, 56, 51, 53, 49, 55, 99, 101, 99, 98, 50, 51, 125]

使用python脚本得到

1
2
3
4
5
flag = [102, 108, 97, 103, 123, 48, 56, 97, 97, 102, 55, 98, 53, 100, 51, 98, 102, 49, 57, 55, 57, 99, 49, 102, 100, 49, 56, 51, 53, 49, 55, 99, 101, 99, 98, 50, 51, 125]
a= ''
for i in flag:
a += chr(i)
print(a)
1
flag{08aaf7b5d3bf1979c1fd183517cecb23}

where is my key

题目

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
flag = "******"
m = "flag{" + flag + "}"
c = ""
key = "***"
key_list = []
j = 0

for i in range(len(flag)):
key_list.append(int(key[j]) ^ i)
j += 1
if j == 3:
j = 0

for i in range(len(flag)):
c += chr(ord(flag[i]) + key_list[i])

print(c)

根据题目猜测密码为130

使用python

1
2
3
4
5
6
7
8
9
10
11
12
13
c= "5:fch7@:>m>lC>pDtwLDHKxHQ}MMQMV}"
key = "130"
key_list = []
j = 0
flag = ''
for i in range(len(c)):
key_list.append(int(key[j]) ^ i)
j += 1
if j==3:
j=0
for i in range(len(c)):
flag += chr(ord(c[i]) - key_list[i])
print(flag)

得到

1
48daa2966e5a60b6af9447c18c33207a

I am Julius Caesar

题目

1
lsip{Gpxpcbu_kg_Gyoslpj}

判断凯撒加密,若lsip对应flag,则偏移量对应为6,7,8,9,偏移量应该为依次递增,

脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
strt = r"lsip{Gpxpcbu_kg_Gyoslpj}"
key = 6
flag = ''
for i in strt:
if i == "{" or i == "}" or i == "_":
pass
else:
if ord(i) < 97:
index = ord(i) - 64
if key > index:
move = 26 - (key - index)
i = chr(64 + move)
if key <= index:
i = chr(ord(i)-key)
if ord(i) >= 97:
index = ord(i) - 96
if key > index:
move = 26 - (key - index)
i = chr(96 + move)
if key <= index:
i = chr(ord(i)-key)
key += 1
flag += i
print(flag)

得到

1
flag{Welcome_to_Network}

麻辣兔头

题目:

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook?
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook.
Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook.
Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook.
Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook?
Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook.
Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook.
Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook?
Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook!
Ook. Ook? Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook?
Ook! Ook. Ook? Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook!
Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook.
Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook. Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook?
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook! Ook. Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook.
Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook.
Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook!
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook!
Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook.
Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook!
Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook.
Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook!
Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook?
Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook.
Ook. Ook. Ook. Ook. Ook? Ook. Ook? Ook! Ook. Ook? Ook. Ook. Ook! Ook. Ook?
Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook? Ook! Ook! Ook. Ook? Ook! Ook!
Ook! Ook! Ook! Ook! Ook? Ook. Ook? Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook. Ook? Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook. Ook! Ook?
Ook! Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook? Ook. Ook?
Ook! Ook. Ook? Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook! Ook!
Ook! Ook! Ook! Ook. Ook? Ook.

okk解密解得

1
2
U2FsdGVkX18vD9yXN6V+1NjYFYFCgymFJQA91d7PSK1IdDacrXsNp4jEe3kCqRla
CoMbCTH1

开头为U2Fsd,为rabbit加密,解得

1
flag{21232f297a57a5a743894a0e4a801fc3}

Railfence Cipher

题目:

1
fi9vlno1s1_}ascadwa?gaa58ass{69d 

根据提示使用栅栏解密,W型栏数4

1
flag{asnioca65a19sd89aw1v_asds?}

Misc

trip

题目:

查询Z86列车的时刻表得到

所以为苏州站

010 上图

根据题目使用010打开图片得到

解密后得到

1
flag{This_the_flag}

Seni0r h1gh school

从题目中,茶餐厅的电话搜索到

![](NTACTF/senior high school/QQ截图20231024193411.png)

根据地图搜索到附近的高中

![](NTACTF/senior high school/QQ截图20231024193544.png)

zip两连击

从题目提示猜测zip密码为8为密码,且为199开头,使用工具爆破得到密码

打开文件夹后发现压缩包存在伪加密,使用010修改

打开压缩包后得到flag

好好用功读书

打开图片后,发现图片明显下方缺少,使用CRC工具恢复得到

扫描二维码后得到

1
flag{4av8s6dvasdadfa?svasdV_Asdv45v}

EXCEL

将表格中为1的格子涂黑后调整表格大小得到

扫描后得到

1
ZmxhZ3tZb3VfZkluYWwxeV9mb1VuZF9NZS4xMTF9

解密后得到

1
flag{You_fInal1y_foUnd_Me.111}

explosion

打开后得到动图,抽帧后得到二维码,修复定位孔后得到

扫描得到

1
R1kzRE1ZWldHRTNET04zQ0daU1RNWlJYR1EzRFNOUlJHVlRETU5KWEhBM1RBTlRER1pURE9NWldIRTNHTU5URkc1U0E9PT09==

使用base64,base32,hex解密后得到

1
flag{notia_explosion}

裂开的flag

下载附件后发现文件格式头损坏,使用010修复后得到

under the moonlight

使用Stegsolve发现存在lsb隐写

Web

君子协议

打开网站后根据提示进入robots.txt,提示进入/FlAag.pHp,进入后下载文件得到

1
MZWGCZ33GIYTEMZSIYZDSN2BGU3UCNKBG42DGOBZGRATARJUIE4DAMKGIMZX2===

解密后得到

1
flag{21232F297A57A5A743894A0E4A801FC3}

302 jump

打开题目后根据提示需打开demo.php,但存在302跳转,使用curl绕过

![](NTACTF/302 jump/QQ截图20231024200053.png)

功德+1

打开后ctrl u 查看源代码,进入main.js文件,得到密文

1
ZmxhZ3tPME8wSyFCMHVkbGU1c19CZW5lXmYxY2VuY2V9

解密后得到

1
flag{O0O0K!B0udle5s_Bene^f1cence}

奇怪的按钮

打开后查看元素发现按钮被禁用,删除注释后得到flag

NTAuser

进入网页后提示需要user为NTAuser,来自Network.com,在本地请求,使用burp拦截后修改请求

upl0ad

题目提示htaccess 文件上传

构造.htaccess文件上传

1
2
3
<FilesMatch "\.jpg">
SetHandler application/x-httpd-php
</FilesMatch>

构造木马图片并上传至服务器得到路径

1
/uploads/1.jpg

使用蚁剑连接

PWN

瑞士军刀

nc 连接后cat flag 得到flag