第23天:WEB攻防-Python考点&CTF与CMS-SSTI模版注入&PYC反编译

目录

PYC文件反编译

SSTI

flask模板注入

BUUCTF-shrine靶场题目

SSTI考点-CMS源码-MACCMS_V8.X(苹果cms)执行


PYC文件反编译

介绍:pyc文件是py文件编译后生成的字节码文件(byte code)。pyc文件经过python解释器最终会生成机器码运行。所以pyc文件是可以跨平台部署的,类似Java的.class文件。一般py文件改变后,都会重新生成pyc文件。但在实战中很难获得pyc文件,获得的可以在反编译网站上尝试

SSTI

介绍:SSTI就是网站的模板、主题等文件,它可以在不改变网站源码的情况下,对web站点输出的界面进行美化,修改。但是也会带来安全隐患。

  • ssti模版注入原理
  • 确定ssti模板注入:中间件、返回页面、关键文字提示等
  • 利用ssti获取flag:判断版本、找利用类、构造payload、绕过滤

1,漏洞成因:

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

2,如何判断检测SSTI漏洞的存在?

输入的数据会被浏览器利用当前脚本语言调用解析执行

3、SSTI会产生在那些语言开发应用?并不是只有python有 其他开发语言也会存在的

https://img-blog.csdnimg.cn/1c99cec2bbc74074a3df099840df217d.pngicon-default.png?t=M85Bhttps://img-blog.csdnimg.cn/1c99cec2bbc74074a3df099840df217d.png4、SSTI安全问题在生产环境那里产生?

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

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

flask模板注入

什么是Flask?

Flask是一个用Python编写的Web应用程序框架。 Flask基于Werkzeug WSGI工具包和Jinja2模板引擎。 这两个都是Pocco项目。Flask通常被称为微框架

演示代码:

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)
def page_not_found(e):
    template = '''
{%% block body %%}
    

Oops! That page doesn't exist.

%s

{%% endblock %%} ''' % (request.args.get('404_url')) return render_template_string(template), 404 if __name__ == '__main__': app.run(host='0.0.0.0',debug=True)

当访问一个不存在的地址时:

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

Oops! That page doesn't exist.这句话就是代码中page_not_found(e)函数所展示的页面,

然后细细对照一下页面中与源码中不同的点 发现 None对应 源码中的%s (输出),在分析源码  % (request.args.get('404_url')) 是接受 404_url传过来的参数,

所以这里可以构造一个payload为: 404_url={{1+1}}就会在None处回显2,也就是说这里的{{payload}}会被当做代码执行,所以可以利用反弹shell 直接创建后门文件等等操作

BUUCTF-shrine靶场题目

1、源码分析SSTI考点

2、测试判断SSTI存在

3、查看是否存在flask函数库

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

 三个标记的位置,就是存放flag的位置 、过滤小括号()处、 以及函数flask.render_template_string 就可以判断处引用模板了 ,基本就是ssti注入类型

url_for()函数是用于构建操作指定函数的URL  则:

/shrine/{{url_for.__globals__}}

使用global内建属性

会以字典类型返回当前位置的全部模块,方法和全局变量,用于配合__init__使用

get_flashed_messages()函数是获取传递过来的数据 ,可以返回所有的全局变量,在根据最初的源码 搜索关键字 app

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

先去看看 current_app里面的内容

构造payload   /shrine/{{url_for.__globals__['current_app'].config}}

获取flag 

SSTI考点-CMS源码-MACCMS_V8.X(苹果cms)执行

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

根据网上别人复现的文章 借鉴个poc

http://127.0.0.1/maccms/index.php?m=vod-search&wd={if-A:phpinfo()}{endif-A}

分析一下payload,是在index.php文件中传递参数 m = vod-search

使用phpstrom打开源码项目开始进行分析

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

发现是通过be函数传递进来的变量。在分析be函数,就是接受变量的罢了,然后在分析变量 m接受到 m = vod-search 在干什么

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

经过这一段代码处理后 变成了$ac 将$ac输出看看第23天:WEB攻防-Python考点&CTF与CMS-SSTI模版注入&PYC反编译_第7张图片

 

在继续追踪 变量 $ac 可以看到 $ac 就变成了一个PHP文件名了

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

审计 vod.php 发现 $method ==search时 payload中的 $wd也出现了

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

发现 变量wd被 $tpl处理 然后全局搜$tpl 一个一个分析 发现index.php文件中

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

$tpl指向函数 ifex() 找到ifex()函数的声明,发现经过过滤后,回到exec函数去执行,所以出现了rce漏洞

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

 

 

 

 

 

 

 

 

  

你可能感兴趣的:(flask,python,后端)