web
ez_picker
这题的考点
capoo
Misc
ezflag
这题涉及到kali的工具使用,binwalk或者formost
1.将压缩包拖进010,发现包含flag.zip文件,想到使用工具进行分离
命令:binwalk -e .... --run-as=root
分离流量包
得到一个文件,里面还有flag.zip文件,但是不能打开,于是又拖到010进行分析
在010中发现明显的图片头
直接将flag.zip文件修改后缀名为png,最后打开发现得到flag
XOR
1.根据题目可得,这是一道Xor异或加密的密码题
解密脚本
# 密文
ciphertext = "0b050c0e180e585f5c52555c5544545c0a0f44535f0f5e445658595844050f5d0f0f55590c555e5a0914"# 将十六进制字符串转换为字节
ciphertext_bytes = bytes.fromhex(ciphertext)# 假设密钥为 'Key',可以根据需要更改密钥
key = b'mimic'# 对密文进行异或解密
plaintext_bytes = bytes([a ^ b for a, b in zip(ciphertext_bytes, key * (len(ciphertext_bytes) // len(key) + 1))])# 将解密后的字节转换为字符串
plaintext = plaintext_bytes.decode('utf-8')print(plaintext)
在线工具
异或 加密/解密 - 锤子在线工具
Pvz
将附件下载解压后可以看到里面有一个文件夹和压缩包,压缩包需要密码才能打开,看来密码应该是在文件夹中有线索,文件夹名也提示了是md5
根据提示密码是价钱的md5值,且附有游戏的截图
这里可先写一个脚本跑个字典再爆破
附上大佬的脚本:
import hashlibdef generate_md5(number):return hashlib.md5(str(number).encode()).hexdigest()md5_dict = {str(i): generate_md5(i) for i in range(1, 1000000)}file_path = './dic.txt'
with open(file_path, 'w') as file:for key, value in md5_dict.items():file.write(f"{value}\n")
运行得到一个字典
接下来就可以爆破了,这里注意要将字典的后缀设为.dic才能用
打开压缩包,发现有一个倾斜的缺失定位角的二维码和一张定位角的图片,这时候思路就是恢复二维码
这里使用PS工具
将修复好的二维码进行解密,再使用工具进行解密,得到flag
工具:Malbolge - interpreter online
Find way to read video
1.解压后是一个文字文档,上面说amili0721放了他的邮件模版放在了一个公众平台上
2.可以在gitcode中找到一个和amily0721有关的邮件,上面的名称是邮件模版,那应该就是这个了
3.邮件解码(spammimic解码)垃圾邮件隐写
解码可得
BV1P62EYHEZd
eyJ2IjozLCJuIjoiZmw0ZyIsInMiOiIiLCJoIjoiZGExMTcyNSIsIm0iOjkwLCJrIjo4MSwibWciOjIwMCwia2ciOjEzMCwibCI6NDMsInNsIjoxLCJmaGwiOlsiMjUyZjEwYyIsImFjYWM4NmMiLCJjYTk3ODExIiwiY2QwYWE5OCIsIjAyMWZiNTkiLCIyYzYyNDIzIiwiY2E5NzgxMSIsIjRlMDc0MDgiLCJlN2Y2YzAxIiwiMmM2MjQyMyIsIjI1MmYxMGMiLCI1ZmVjZWI2IiwiZWYyZDEyNyIsIjM5NzNlMDIiLCJjYTk3ODExIiwiNGIyMjc3NyIsImU3ZjZjMDEiLCI3OTAyNjk5IiwiMzk3M2UwMiIsIjRiMjI3NzciLCI3OTAyNjk5IiwiZWYyZDEyNyIsIjI1MmYxMGMiLCIzOTczZTAyIiwiY2E5NzgxMSIsImVmMmQxMjciLCJkNDczNWUzIiwiMjUyZjEwYyIsIjM5NzNlMDIiLCI2Yjg2YjI3IiwiM2UyM2U4MSIsImQ0NzM1ZTMiLCJlN2Y2YzAxIiwiMmU3ZDJjMCIsIjJlN2QyYzAiLCI0YjIyNzc3IiwiNWZlY2ViNiIsIjI1MmYxMGMiLCIyZTdkMmMwIiwiNGIyMjc3NyIsIjNmNzliYjciLCJkMTBiMzZhIiwiMDFiYTQ3MSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiNmUzNDBiOSIsIjZlMzQwYjkiLCI2ZTM0MGI5IiwiMDg0ZmVkMCIsIjE4ZjUzODQiLCIxODlmNDAwIiwiZWY2Y2JkMiIsIjI3OTUyMTciLCJhOTI1M2RjIiwiNGM5NDQ4NSIsIjI1MmYxMGMiLCI4NWY5N2UwIl19
"v": 3
- 键:
v
- 解释:这个键值对可能表示版本号(version),这里的版本号是3。
"n": "flag"
- 键:
n
- 解释:这个键值对可能表示名称(name),这里的名称是"flag"。
"s": ""
- 键:
s
- 值:
""
(空字符串)- 解释:这个键值对可能表示状态(status)或字符串(string),但这里值是空的,可能表示默认状态或未设置状态。
"h": "02555ef"
- 键:
h
- 解释:这个键值对可能表示哈希值(hash)、十六进制值(hexadecimal)或其他某种标识符。
"m": 90
- 键:
m
- 解释:这个键值对可能表示一个度量值(metric)、数量(magnitude)或其他数值型属性。
"k": 81
- 键:
k
- 解释:这个键值对可能表示另一个度量值或特定的键值,具体含义取决于上下文。
"mg": 200
- 键:
mg
- 解释:这个键值对可能表示毫克(milligrams)或其他以"mg"为单位的度量值。
"kg": 130
- 键:
kg
- 解释:这个键值对可能表示千克(kilograms)或其他以"kg"为单位的度量值。
"l": 43
- 键:
l
- 解释:这个键值对可能表示长度(length)、数量(level)或其他以"l"为缩写的值。
"sl": 1
- 键:
sl
- 解释:这个键值对可能表示序列号(serial number)、层数(story level)或其他以"sl"为缩写的值。
"fhl": <未知值>
- 键:
fhl
- 解释:由于原始片段中未给出"fhl"的值,我们无法确定其具体含义。它可能表示某种特定属性或标识符。
4.base64解码
5.大佬脚本:
```python
import hashlib # 导入hashlib库,用于生成哈希值
import string # 导入string库,用于获取所有可打印字符# 获取所有可能的字符
possible_chars = string.printable # 包含所有可打印字符# 建立哈希前缀到字符的映射
hash_prefix_to_char = {}
for char in possible_chars:sha256_hash = hashlib.sha256(char.encode()).hexdigest() # 对每个字符进行SHA-256哈希计算prefix = sha256_hash[:7] # 取哈希值的前7个字符作为前缀hash_prefix_to_char[prefix] = char # 将前缀和字符对应起来存入字典# 给定的哈希前缀列表
fhl = ["252f10c", "acac86c", "ca97811", "cd0aa98", "021fb59", "2c62423", "4e07408", "4e07408","ca97811", "2e7d2c0", "6b86b27", "3f79bb7", "4e07408", "3973e02", "d4735e3", "4b22777","7902699", "e7f6c01", "3973e02", "4b22777", "4b22777", "6b86b27", "2e7d2c0", "3973e02","ca97811", "3f79bb7", "4e07408", "d4735e3", "3973e02", "3f79bb7", "3f79bb7", "252f10c","3f79bb7", "6b86b27", "18ac3e7", "5feceb6", "4e07408", "18ac3e7", "18ac3e7", "19581e2","3f79bb7", "d10b36a", "01ba471", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9","6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9","6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9","6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9","6e340b9", "6e340b9", "6e340b9", "6e340b9", "6e340b9", "77adfc9", "de7d1b7", "44bd7ae","bb7208b", "83891d7", "2a0ab73", "fe1dcd3", "559aead", "f031efa"
]# 重建消息
message = ''
for prefix in fhl:char = hash_prefix_to_char.get(prefix) # 根据前缀从字典中获取对应的字符if char:message += char # 如果找到对应的字符,则添加到消息中else:message += '?' # 如果找不到对应的字符,则添加问号表示未知字符print("重建的消息:", message) # 输出重建的消息
```
6.得到flag