当前位置: 首页 > news >正文

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

#知识点:

1PYC 文件反编译

2Python-Web-SSTI

3SSTI 模版注入利用分析

各语言的SSIT漏洞情况:

SSIT漏洞过程:

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文件进行反编译

 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的界面<div class="center-content error"><h1>Oops! That page doesn't exist.</h1><h3>%s</h3>//%python的参数变量</div> 
{%% endblock %%}
''' % (request.args.get('404_url'))//输入的参数,获取return render_template_string(template), 404if __name__ == '__main__':app.run(host='0.0.0.0',debug=True)//执行的访问地址

输入错误的地址

查看源代码

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

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

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

Web应用是有很多的模板,

<div class="center-content error">

        <h1>Oops! That page doesn't exist.</h1>

        <h3>去数据的变量(可控变量)</h3>

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

</div>

SSTI产生的场景:

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

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

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

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

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

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

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

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:隐私系统

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函数(自定义函数)

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

并以包含的形式

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

所以去vod.php文件

由于我们m的值为vod-search

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

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

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

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

输出strif

补:判断网页由python制作

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

http://www.lryc.cn/news/287910.html

相关文章:

  • 计算机毕业设计 基于SpringBoot的律师事务所案件管理系统的设计与实现 Java实战项目 附源码+文档+视频讲解
  • 如何使用宝塔面板配置Nginx反向代理WebSocket(wss)
  • vulhub之redis篇
  • Lua简介和应用场景介绍
  • 【手写数据库toadb】10 开发数据库内核开发阶段-数据库模型
  • 02-Redis持久化、主从与哨兵架构详解
  • 无刷电机篇(一)直流无刷电机(BLDC)介绍
  • 【GitHub项目推荐--不错的Flutter项目】【转载】
  • Unity UnityWebRequest 向php后端上传图片文件
  • Vscode 顶部Menu(菜单)栏消失如何恢复
  • Jenkins相关
  • 禅道的安装以及使用
  • 马尔可夫预测(Python)
  • 双向队列的创建队首与队尾的操作deque()
  • 一、MongoDB、express的安装和基本使用
  • 被困住了——如何从层级结构中获取子集
  • leetcode1237. 找出给定方程的正整数解
  • sqlmap使用教程(6)-注入技术拓展
  • 苹果Find My市场需求火爆,伦茨科技ST17H6x芯片助力客户量产
  • 3DMAX初级小白班第一课:菜单栏介绍
  • Windows中Zookeeper与kafka的安装配置
  • QT 官方例程阅读: XML Patterns 相关
  • 基于SpringBoot IP黑白名单的实现
  • Redis客户端之Redisson(二)Redisson分布式锁
  • 掌握大语言模型技术: 推理优化
  • git如何导出提交记录及修改的文件清单?
  • 从零开始:Ubuntu Server中MySQL 8.0的安装与Django数据库配置详解
  • Vue基础知识
  • 瀑布流布局 (初版)
  • 硕士毕业论文写作笔记