好久没做题了,做的一塌糊涂,很多题还是差了几步,最终没有获取 Flag。这里简单记录一下 WGB 的部分解题记录。

1. encoding-wgb

wgb-题1.png

题目仅提供一个字符串,根据字符判断,符合Base64编码字符集,通过尝试,可使用Base编码解码得出flag。

wgb-题1-base64解密.png

Flag: flag{177866231757458008567510428387177127}

2. php-wgb

wgb-题2.png

wgb-题2-题目代码.png

由题目内容可看出,该页面请求包含多种参数检查。首先是要求$a和 $b不等,但需要进行Md5全等比较,所以需要两个不同的输入具有相同的MD5哈希值。这里使用了已经公开的碰撞字符串进行绕过,两者近似但有微小区别,如下:

1.TEXTCOLLBYfGiJUETHQ4hEcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak

2.TEXTCOLLBYfGiJUETHQ4hAcKSMd5zYpgqf1YRDhkmxHkhPWptrkoyz28wnI9V0aHeAuaKnak

wgb-题2-MD5.png

随后参数$c需等于0但本身不能为0使表达式为假,由于使用“==”进行松散比较,所以可利用PHP弱类型比较,使用科学计数法如 $c=0e1 绕过该条件判断。

结合以上,绕过参数$a、$b、$c的校验,成功绕过如下:

wgb-题2-绕过1.png

随后进入到cmd参数校验,由于仅进行长度检查,故可直接执行ls命令,发现flag.php文件如下,仍需读取文件内容。

wgb-题2-绕过2.png

由于存在长度为4的限制,故不能直接读取文件。需利用Linux相关特性进行读取,构造cmd=>cat 可创建cat空文件。此时再提交cmd=ls 可发现cat文件已创建,如下。

wgb-题2-绕过3.png

随后,使cmd=* 进行提交,利用该命令特性使终端主动构造“cat flag.php index.php”命令并执行,获得输出如下。

wgb-题2-绕过4.png

发现内容输出并不完整,排除报错可能性,猜测包含特殊符号如注释导致未显示,进一步查看源码,发现flag已输出。

wgb-题2-flag.png

Flag: flag{04ec4810-7a2d-431b-8a0a-508c3ea131cc}

3. Ledger Leak

wgb-题3.png

根据题目提示,存在加密文件。由附件pcap文件可判断文件存在于流量通信中。通过追踪HTTP流发现,存在2项文件下载传输行为。

第1个文件为Python程序,根据内容判断主要功能为对bill.xlsx文件进行XOR加密,对应密钥流为b‘bank_secret_key’。

wgb-题3-通信1.png

第2个文件根据第一个文件以及请求文件名可直接判定为题目中加密文件,将文件字节流直接导出保存为aaa.txt。

wgb-题3-通信2.png

根据加密程序代码可直接判断类型为xlsx文件,由于XOR加解密运算一致,所以只需读取密文转换字节流再进行一遍XOR运算并保存为xlsx文件即可。完成编写解密代码如下:

import binascii

with open(aaa.txt', 'rb') as f:
encrypted_data = f.read()

key = b'bank_secret_key'

decrypted_byte_data = bytearray()
for i in range(len(encrypted_data)):
    decrypted_byte_data.append(encrypted_data[i] ^ key[i % len(key)])

with open('decrypted_bill.xlsx', 'wb') as f:
    f.write(decrypted_byte_data)

尝试打开文件,发现文件存在加密。尝试使用passfab-for-excel 及常见弱密码字典进行爆破,最终发现文件密码为 “password1”。

wgb-题3-excel加密.png

wgb-题3-excel爆破.png

输入密码打开后,可见flag内容。

wgb-题3-flag.png

Flag: flag{143536bf-f17e-4c7f-87b3-3435451dabf4}

4. music-wgb

wgb-题4.png

附件提供一段音频1.wav和一个密文文件ciphertext.txt。由题目内容可直接判断,密文使用SM2加密,密钥存在于音频文件中。

通过播放音频,以及使用Audacity查看其波形图,可以判断为摩斯电码。

wgb-题4-摩斯电码波形.png

通过波形,手工提取摩斯电码为:.“- ..--- ..-. -... -.. ...-- ..--- ....- ---.. --... -.... .- -...”,解出为“A2FBD324876AB”。

wgb-题4-摩斯电码解码png.png

由于密钥不足64位,填充0补足尝试解密。这里使用Python gmssl 库尝试进行解密,完成编写代码如下:

from gmssl import sm2, func

private_key = "A2FBD324876AB".rjust(64, "0")  # 补0
sm2_crypt = sm2.CryptSM2(
private_key=private_key,
public_key=private_key #随意,避免报错
)

cipher_hex = "4466165fc3a93d3834273deabeb375aad33f59bb358d84e81febe3a12fb8760b822a1a12e4435de14a1e6c9ccdaf5f0797306226f7c6b9ac79ade49d2808abfcabc8efde8a757bef3ad7cc495eecd039e073c8ab379060d353453f64ddd5867c0f9919f45625f979ca5ed049c980391312c52000bdb79fc558eef16d"

plain = sm2_crypt.decrypt(bytes.fromhex(cipher_hex))
print(plain)

运行代码,顺利解密出flag。

wgb-题4-flag.png

Flag: flag{sm2_encryption_success}