小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译

#知识点:

1PYC 文件反编译

2Python-Web-SSTI

3SSTI 模版注入利用分析

各语言的SSIT漏洞情况:

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第1张图片

SSIT漏洞过程:

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第2张图片

https://xz.aliyun.com/t/12181?page=1&time__1311=n4fxni0Qnr0%3DD%2FD0Dx2BmDkfDCDgmrYgBxYwD&alichlgref=https%3A%2F%2Fwww.baidu.com%2Flink%3Furl%3Dxzkjf9x2jM5-hdX-jJhGSyVYqNrH1jEYt9WhW4TlMDot3yoBSI43ZbwS-Ylyj9m1%26wd%3D%26eqid%3Dd46bd7a8000144420000000665b26349

一、PY 反编译-PYC 编译文件反编译源码

pyc (pyd、pyo都是一样的)文件是 py 文件编译后生成的字节码文件(byte code)pyc 文件经过 python 解释器最终会生成机器码运行。因此 pyc 文件是可以跨平台部署的,类似 Java .class,.jar文件,一般 py 文件改变后,都会重新生成 pyc 文件。

python反编译 - 在线工具

对pyc文件进行反编译

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第3张图片

 SSTI 入门-原理&分类&检测&分析&利用

SSTI:

漏洞成因就是服务端接收了用户的恶意输入以后,未经任何处理就将其作为 Web 应用模板内容的一部分,模板引擎在进行目标编译渲染的过程中,执行了用户插入的可以破坏模板的语句,因而可能导致了敏感信息泄露、代码执行、GetShell 等问题。其影响范围主要取决于模版引擎的复杂性。

网站更改模板后,界面会改但数据不会;在界面修改过后的数据接受,传入类似的数据一般就会被接受和执行。  针对于模板

from flask import Flask
from flask import request
from flask import config
from flask import render_template_string
app = Flask(__name__)

app.config['SECRET_KEY'] = "flag{SSTI_123456}"
@app.route('/')//连接路由
def hello_world():
    return 'Hello World!'

@app.errorhandler(404)//404报错,并进入以下的结构
def page_not_found(e):
    template = '''
{%% block body %%}//html的界面
    
       

Oops! That page doesn't exist.

       

%s

//%python的参数变量    
{%% endblock %%} ''' % (request.args.get('404_url'))//输入的参数,获取     return render_template_string(template), 404 if __name__ == '__main__':     app.run(host='0.0.0.0',debug=True)//执行的访问地址

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第4张图片

输入错误的地址

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第5张图片

查看源代码

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第6张图片

对404_url——get获值进行传参

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第7张图片

这时可得知此网页存在着SSIT漏洞,原因是:错误的页面中将变量进行接受并执行了

传入的数据会变成py代码去实行,所以可以进行shell反弹,将服务器的权限直接提到自己的电脑里

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第8张图片

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第9张图片

Web应用是有很多的模板,

        

Oops! That page doesn't exist.

        

去数据的变量(可控变量)

可控值需留给数据库语句去操作取出数据(标题)并显示,方便了报错后的界面样式,如果这里是不固定的则可以进行注入,输入攻击代码

SSTI产生的场景:

存在模版引用的地方,如 404 错误页面展示

存在数据接收引用的地方,如模版解析获取参数数据

Ø SSTI 考点-CTF 靶场-[WesternCTF]shrine

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第10张图片

由题得知,此题中的flag是在FLAG的文件中,索引会打开文件进行读取,并且shrine作为变量,被进行过滤”()”(这里是限制了python的函数);flask.render_template_string模板解析函数

测试ssti,2-2执行了,故存在

绕过:可运用一些特殊的函数

url_for.__globals__:获取当前脚本里的全局变量

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第11张图片

url_for.__globals__['current_app'].config:获取当前脚本里的config的所有值

url_for.__globals__['current_app'].config[‘FLAG’]

url_for.__globals__['current_app'].config.FLAG

Python Flask,Jinja2模板,模板中使用特殊变量及函数,闪现信息,get_flashed_messages()_jinja2 get_flashed-CSDN博客

Ø SSTI 考点-CMS 源码-MACCMS_V8.X 执行

Maccms:隐私系统

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第12张图片

Payload:index.php?m=vod-search&wd={if-dddd:phpinfo()}{endif-dddd}

index.php?m=vod-search

wd={if-dddd:phpinfo()}{endif-dddd}

进行代码分析

找m变量

了解be函数(自定义函数)

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第13张图片

了解逻辑之后,m的值会经过过滤之后,给ac变量

并以包含的形式

我们在代码中将ac变量输出,发现是vod.php

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第14张图片

所以去vod.php文件

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第15张图片

由于我们m的值为vod-search

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第16张图片

找到了wd变量,得知与tpl变量有关

在index.php文件找到tpl的由来,进行查找

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第17张图片

注意到eval函数,eval函数会将变量值进行PHP执行

Wd输入的格式:{if-([\s\S]*?):([\s\S]+?)}([\s\S]*?){endif-\1}

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第18张图片

输出strif

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第19张图片

补:判断网页由python制作

小迪安全23WEB 攻防-Python 考点&CTF 与 CMS-SSTI 模版注入&PYC 反编译_第20张图片

查看中间件容器:Werkzeug通常都是以python为主

你可能感兴趣的:(安全,web安全)