江苏省第三届数据安全职业技能竞赛初赛wp

which 发布于 24 天前 1637 次阅读


江苏省第三届数据安全技术应用职业技能竞赛初赛wp

通过网盘分享的文件:江苏省第三届数据安全职业技能竞赛初赛附件
链接: https://pan.baidu.com/s/1K3bbqlQejtRBbXI-9vsiJw?pwd=8yu7 提取码: 8yu7
--来自百度网盘超级会员v6的分享

数据安全(500pt)

1.ds_re_j02(100pt)

base32加密

799090202130037769

2.wm(100pt)

题目描述:下载附件并分析获取水印信息,提交小写md5(水印),如水印为123-abc,则提交9f4e93a0beb91038f711f7e73e909398。

解压发现是sql文件进行分析

发现是base32,提取后面的数据进行解密,可以看到是乱码可以看到二进制应该是0开头

我们加上0进行解密

6b8cd6a63b9a8a66db7886dc4905de24

3.奇怪的加密文件(100pt)

题目描述:某公司使用国产商用密码加密保护员工考勤数据,因管理员意外离职未交接密码,导致考勤文件无法解密。这直接影响了公司财务部对员工的薪资核算。公司邀请你,专业的数据安全高手,请发挥你的技能特长,运用已知的线索来破解这个难题,解密考勤文件获取flag。

直接拖进随波逐流发现base64直接解码发现key:02001010120231025

国密解码,iv:0123456789abcdef

4.公司机密(100pt)

题目描述:某上市公司CE0李总,惊悉公司重要商业机密遭到泄密,这可能给公司带来巨大经济损失和声誉危机。经过初步排查,李总怀疑与自己的心腹小赵有关。据了解,小赵有个特殊癖好,喜欢用一些看似莫名其妙的文件创建时间作为密码,可关键文件目前已被删除。在报警后,警方介入调查后,运用专业的数据恢复工具,成功找回了部分相关文件,其中包含一张奇怪的图片,图片上是一些杂乱无章的几何图形和颜色色块,但文件创建时间却难以确定,仅能推断其肯定早于文件修改时间。此外,调查发现有个客户曾给小赵发送过一个秘密文件,而该文件的密码正是这位客户的名
字。现在,摆在你面前的任务是:通过技术手段,找到恢复文件中的flag,帮助公司

题目描述:文件创建时间作为密码

20250624000000

首先R-Studio工具恢复disk,对business进行破解密码为:20250624155509

在word客户信息根据电话号找到王小天,使用拼音wangxiaotian解压得到flag

flag{Mr_Wang_is_BOSS}

5.不安全接口(100pt)

题目描述:本题没有附件!无需下载!某公司开发过程中未能严格遵循数据安全规范,导致系统存在严重的安全漏洞。请获取card进行提交。

Admin, 修改为true

然后登录框注入,sqlmap跑

350500198502279894

数据分析(300pt)

日志分析(100pt)

1.找出企业业务高峰时间段

题目描述:以小时为单位,分析一天工作时间(9:00-17:00)内各小时的访问量分布,找出企业业务高峰时间段。其中,访问高峰时段定义为:该小时的访问量超过9:00-17:00全时段内平均每小时访问量的时间段。
【评测标准】请提交访问高峰时段的小时数(24小时制),多个小时按照从小到大排序,用英文逗号分隔。
import pandas as pd
import numpy as np
from datetime import datetime

def analyze_peak_hours():
    """
    分析api_logs.csv文件中9:00-17:00时间段的访问量分布,
    识别访问高峰期(超过平均访问量的时间段)
    """
    print("正在读取api_logs.csv文件...")
    df = pd.read_csv('场景附件/api_logs.csv')

    df['访问时间'] = pd.to_datetime(df['访问时间'])
    df['小时'] = df['访问时间'].dt.hour

    working_hours_df = df[(df['小时'] >= 9) & (df['小时'] <= 17)]

    print(f"总记录数: {len(df)}")
    print(f"工作时间段(9:00-17:00)记录数: {len(working_hours_df)}")
    hourly_counts = working_hours_df['小时'].value_counts().sort_index()
    print("\n各小时访问量统计:")
    for hour, count in hourly_counts.items():
        print(f"{hour:2d}:00 - {count:4d} 次访问")
    avg_hourly_visits = hourly_counts.mean()
    print(f"\n平均每小时访问量: {avg_hourly_visits:.2f}")
    peak_hours = hourly_counts[hourly_counts > avg_hourly_visits].index.tolist()
    peak_hours.sort()

    print(f"\n访问高峰期(超过平均访问量 {avg_hourly_visits:.2f} 的时间段):")
    for hour in peak_hours:
        count = hourly_counts[hour]
        print(f"{hour:2d}:00 - {count:4d} 次访问 (超过平均值 {count - avg_hourly_visits:.1f})")
    result = ','.join(map(str, peak_hours))
    print(f"\n【答案】: {result}")

    return result

if __name__ == "__main__":
    try:
        result = analyze_peak_hours()
        print(f"\n最终答案: {result}")
    except Exception as e:
        print(f"分析过程中出现错误: {e}")
        import traceback
        traceback.print_exc() 

11,14,16

2.找出访问量前三的系统

题目描述:统计各个业务系统在一天中的访问量,找出访问量前三的系统。
【评测标准】请提交访问量前三的系统名称,按访问量从大到小,使用英文逗号连接。转换为小写md5提交。举例说明,若统计到前三访问量的系统,详情参考附件赛题说明
import pandas as pd
import re
from urllib.parse import urlparse
import hashlib

def extract_system_name(url):
    """从URL中提取系统名称"""
    try:
        parsed = urlparse(url)
        path_parts = parsed.path.strip('/').split('/')
        if len(path_parts) >= 3:
            return path_parts[2]
    except:
        pass
    return None

def analyze_logs():
    """分析日志文件,统计各系统访问量"""
    print("正在读取日志文件...")

    df = pd.read_csv('场景附件/api_logs.csv')

    print(f"总共读取了 {len(df)} 条记录")

    df['system_name'] = df['请求URL'].apply(extract_system_name)

    system_counts = df['system_name'].value_counts()

    print("\n各系统访问量统计:")
    print(system_counts)

    top_three = system_counts.head(3)

    print(f"\n访问量前三的系统:")
    for i, (system, count) in enumerate(top_three.items(), 1):
        print(f"{i}. {system}: {count} 次访问")

    top_three_names = top_three.index.tolist()
    result_string = ','.join(top_three_names)

    print(f"\n结果字符串: {result_string}")

    md5_hash = hashlib.md5(result_string.lower().encode()).hexdigest()

    print(f"MD5哈希值: {md5_hash}")

    return md5_hash

if __name__ == "__main__":
    result = analyze_logs() 
4d59f036fc099f213a1e2c71584e94f1

3.请提交检测到的异常IP数量

题目描述:检测高频访问行为,识别可能的恶意IP。高频访问行为定义为:同一P在任意一个自然分钟内(即每连续60秒且起始时间为整点或整分,如08:05:00-08:05:59)对同=个接口的请求次数超过30次。
【评测标准】请提交检测到的异常IP数量。若检测到3个异常IP,则答案为:3
import pandas as pd
from datetime import datetime, timedelta
from collections import defaultdict
import re

def parse_timestamp(timestamp_str):
    """解析时间戳字符串"""
    return datetime.strptime(timestamp_str, '%Y-%m-%d %H:%M:%S')

def get_minute_boundary(timestamp):
    """获取时间戳所在分钟的开始时间(整分钟边界)"""
    return timestamp.replace(second=0, microsecond=0)

def analyze_high_frequency_access(csv_file):
    """分析高频访问行为"""
    print("正在读取CSV文件...")

    df = pd.read_csv(csv_file)
    print(f"数据行数: {len(df)}")

    df['访问时间'] = pd.to_datetime(df['访问时间'])

    ip_minute_counts = defaultdict(int)

    print("正在分析访问模式...")

    for _, row in df.iterrows():
        timestamp = row['访问时间']
        ip = row['访问IP']
        url = row['请求URL']

        minute_boundary = get_minute_boundary(timestamp)

        key = (ip, minute_boundary, url)
        ip_minute_counts[key] += 1

    abnormal_ips = set()

    print("正在检测高频访问行为...")

    for (ip, minute_boundary, url), count in ip_minute_counts.items():
        if count > 30:  
            abnormal_ips.add(ip)
            print(f"检测到异常IP: {ip}, 时间: {minute_boundary}, URL: {url}, 请求次数: {count}")

    print(f"\n检测到的异常IP数量: {len(abnormal_ips)}")
    print("异常IP列表:")
    for ip in sorted(abnormal_ips):
        print(f"  {ip}")

    return len(abnormal_ips)

if __name__ == "__main__":
    csv_file = "场景附件/api_logs.csv"
    result = analyze_high_frequency_access(csv_file)
    print(f"\n答案: {result}") 

25

4.请提交使用恶意User-Agent的1P数量

题目描述:为了保障数据安全,公司内部仅允许正常用户的浏览器的User-Agent和开发使用的postman、curl requests等工具对API进行访问。请检查User-Agent,.找到使用其他工具访问API的IP地址。
【评测标准】请提交使用恶意User-Agent的1P数量。若检测到23个使用恶意UserAgent的P,则答案为:23
import pandas as pd
import re

def is_legitimate_user_agent(user_agent):
    """
    判断User-Agent是否为合法的(正常浏览器或开发工具)
    """
    if pd.isna(user_agent) or user_agent == '':
        return False

    user_agent = str(user_agent).lower()

    browser_patterns = [
        r'mozilla/5\.0', 
        r'chrome/',       
        r'firefox/',      
        r'safari/',       
        r'edge/',         
        r'opera/',        
        r'msie',          
        r'trident/',      
    ]

    dev_tools = [
        'curl',
        'postman',
        'requests',
        'python-requests',
        'wget',
        'httpie',
        'insomnia',
        'apache-httpclient',
        'okhttp',
        'axios',
        'fetch',
    ]

    for tool in dev_tools:
        if tool in user_agent:
            return True

    for pattern in browser_patterns:
        if re.search(pattern, user_agent):
            return True

    return False

def analyze_api_logs(csv_file):
    """
    分析API日志文件,找出使用恶意User-Agent的IP地址
    """
    print("正在读取CSV文件...")

    df = pd.read_csv(csv_file)

    print(f"总记录数: {len(df)}")
    print(f"列名: {list(df.columns)}")

    if 'user-agent' not in df.columns:
        print("错误:未找到user-agent列")
        return

    malicious_ips = set()
    legitimate_count = 0
    malicious_count = 0

    print("\n开始分析User-Agent")

    for index, row in df.iterrows():
        user_agent = row['user-agent']
        ip = row['访问IP']

        if is_legitimate_user_agent(user_agent):
            legitimate_count += 1
        else:
            malicious_count += 1
            malicious_ips.add(ip)

        if (index + 1) % 1000 == 0:
            print(f"已处理 {index + 1} 条记录...")

    print(f"\n分析完成!")
    print(f"合法User-Agent记录数: {legitimate_count}")
    print(f"恶意User-Agent记录数: {malicious_count}")
    print(f"使用恶意User-Agent的IP数量: {len(malicious_ips)}")

    print(f"\n恶意IP地址列表:")
    for ip in sorted(malicious_ips):
        print(f"  {ip}")

    return len(malicious_ips)

if __name__ == "__main__":
    csv_file = "场景附件/api_logs.csv"
    result = analyze_api_logs(csv_file)
    print(f"\n答案: {result}") 

63

流量分析(200pt)

数据分析 1

题目描述:分析提供的流量文件,找到哪些研究成果只上传了成果文档,但是没有上传哈希文件。
【评测标准】将找到的研究成果编号按照数字部分从小到大进行排序,使用“”连接,最后转为32位小写md5提交,注意计算md5时,输入字符应为UTF-8编码且行尾不带换行符,详情参考附件赛题说明。

使用CTF-NETA 分析流量包,提取所有文件后手动查找没有sha256的文件,然后按照要求md5加密即可。

RES115756-RES157171-RES266128-RES317032-RES326054-RES364261-RES509894-RES554600-RES618293-RES636474-RES750741-RES794870-RES884672

数据分析 2

题目描述:科研成果在提交到平台之前,都会进行审核并记录哈希,现在检查发现有些成果上传的和提交审查的文件存在区别,请使用提供的aes256密钥解密文件,并校验哈希,找到哪些科研成果存在区别。
【评测标准】将找到的研究成果编号按照数字部分从小到大进行排序,使用“”连接,最后转为32位小写md5提交,注意计算md5时,输入字符应为UTF-8编码且行尾不带换行符,详情参考附件赛题说明。

no

数据分析 3

近期在平台上发现了一些.eml后缀的垃圾邮件,检查流量,找到登录并上传这些eml垃圾邮件的用户名数量。
【评测标准提交上传垃圾文件的用户名数量。若找到了24个用户名上传垃圾文件,则提交答案为:24

使用CTF-NETA工具对文件进行扫描,搜索所有带有eml关键词的流量上下文, 手动查找所有用户名:

wangyulan
leiyu963
sunrui573
maguilan685
liaoming724
leiyu963
sunhui
maguilan685
leiyu963
sunhui
wangyulan
leiyu963
wangyulan
leiyu963
leiyu963
liaoming724
wangyulan
maguilan685
sunhui
sunrui573
lijuan863
sunhui
leiyu963
lijuan863
sunhui
lijuan863
maguilan685
sunhui
sunhui
maguilan685
maguilan685