绕过命令过滤器:探索UnixLinux中的Bypass技术

news2024/12/23 7:51:15

前言

在Unix或Linux系统的安全测试和网络防御中,了解如何绕过命令过滤器是非常重要的。今天,我们将探讨几种利用shell命令绕过安全限制的技巧,这些技巧常用于渗透测试中,以检测系统的安全漏洞。

0x00 命令介绍

一般而言,cat /etc/passwd是一个显示系统用户信息文件的常用命令。但在一些安全设置中,直接执行此命令可能会被系统的安全机制拦截。以下是一些创造性的方法来绕过常见过滤器:

0x01 利用变量截取

cat ${HOME:0:1}etc${HOME:0:1}passwd

这条命令通过利用shell变量截取的特性,将$HOME变量的第一个字符(通常为/)用于构建需要的路径,从而避开了直接的字符串匹配过滤。

image-20240622212853479

命令分解

  1. ${HOME:0:1}
  • 这是一个参数扩展的用法,它使用 Bash 的字符串切片功能。
  • ${HOME:0:1}获取环境变量HOME的第一个字符。
  • 对于大多数用户来说,$HOME变量通常是/home/username。因此,${HOME:0:1}将会得到/

2.cat

  • cat命令用于连接文件并输出其内容到标准输出设备(通常是终端)。
  • 在这个上下文中,cat命令被用来显示文件的内容。

3.连接文件路径

  • 将两个${HOME:0:1}的结果(/)与etcpasswd连接,构成/etc/passwd
  • 这实际上构造出了完整的路径,从而避开了直接写出/etc/passwd,这可能是为了绕过某些安全限制或监控工具,这些工具可能会查找直接的路径引用。

0x02 编码和转义

`echo $'cat\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64'`

这个方法通过将命令以十六进制编码的形式展示,从而在不直观地显示命令的同时执行需要的操作。

image-20240622213237517

命令分解

  1. echo $'...':
    • 如之前解释的那样,这个echo命令会输出解码后的字符串,即cat /etc/passwd
  2. 命令替换 (` ```):
    • 使用反引号包围的echo命令意味着 shell 首先执行echo命令,将输出(这里是字符串cat /etc/passwd)捕获,并将其输出放回原来命令的位置。

整体效果

在这个特定的情况下,命令:

`echo $'cat\x20\x2f\x65\x74\x63\x2f\x70\x61\x73\x73\x77\x64'`

实际上等价于直接在 shell 中输入:

cat /etc/passwd

因为echo输出的是这个命令的字符串形式,然后通过命令替换,这个字符串被解释并执行为一个新的命令。这将导致/etc/passwd文件的内容被显示在终端或命令行界面中。

0x03 字符转换

cat $(echo . | tr '!-0' '"-1')etc$(echo . | tr '!-0' '"-1')passwd

使用tr命令将某些字符转换成其他字符,这种方法可以构造出需要的字符,例如路径分隔符/,从而绕过对特定字符的过滤。

image-20240622213842118

命令分解

1.$(...):

  • $(...)是命令替换的一种形式,用于执行其中的命令并将输出替换到外部命令中。这里,它被用两次,每次用于生成单个/字符。

2.echo . | tr '!-0' '"-1':

  • echo .命令输出一个点字符 (.)。

  • tr '!-0' '"-1'
    

    是一个

    tr
    

    命令,用于转换输入字符。这个特定的转换指令意味着:

    • !0(ASCII 表中连续的字符)的所有字符转换成"1(同样是连续的字符序列)。
    • 这里的关键在于,ASCII 字符!的下一个字符是",而"的下一个字符是#,依此类推,直到/被转换成/本身(因为/在 ASCII 表中位于!0之间的转换范围内)。
  • 结果,这个tr调用将任何字符转换为/,因为它把.(并非在!-0范围内,所以不受转换影响)输出为.,但在这种使用方式中,. | tr实际上是用来生成/

3.连接文件路径

  • 使用两次命令替换生成的/字符与etcpasswd连接起来,形成路径/etc/passwd

0x04 十六进制转换

cat `xxd -r -ps <(echo 2f6574632f706173737764)`

通过将路径/etc/passwd以十六进制的形式提供,再通过xxd命令转换为普通文本,这种方法可以绕开基于文本扫描的过滤。

image-20240622214021278

命令分解

  1. xxd -r -ps:
    • xxd是一个十六进制转换工具,常用于生成十六进制转储或反向转换。
    • -r选项表示逆转换,即将十六进制数据转换回二进制数据。
    • -ps选项表示从纯十六进制字符串进行解析。
  2. <(echo 2f6574632f706173737764):
    • <(...)是 Bash 的进程替代语法,它创建一个临时的命名管道,其中包含命令的输出。
    • echo 2f6574632f706173737764将指定的十六进制字符串输出到管道中。这个字符串代表/etc/passwd的 ASCII 十六进制编码。
  3. 反引号````:
    • 反引号用于命令替换,执行其中的命令,并将输出替换到原位置。

整体命令执行和作用

将上述解释的元素组合起来,此命令执行的过程如下:

  • echo 2f6574632f706173737764输出字符串2f6574632f706173737764
  • xxd -r -ps接收这个十六进制字符串,并将其转换回二进制形式,实际上就是解码为/etc/passwd
  • cat命令随后使用解码的路径,即/etc/passwd,并显示该文件的内容。

0x05 使用Base64编码

echo Y2F0IC9ldGMvcGFzc3dk | base64 --decode | sh

这条命令首先将Base64编码的字符串解码回原始命令,然后通过sh执行它。

image-20240622214230457

命令分解

  1. echo Y2F0IC9ldGMvcGFzc3dk:
    • echo命令用于在标准输出中显示其后跟的字符串。
    • Y2F0IC9ldGMvcGFzc3dk是字符串cat /etc/passwd的 Base64 编码形式。
  2. base64 --decode:
    • base64是用于数据编码和解码的工具。
    • --decode-d选项用于将 Base64 编码的数据转换回原始数据。
  3. 管道 (|):
    • 管道用于将一个命令的输出作为另一个命令的输入。在这个例子中,echo的输出被传递到base64命令,然后base64的输出被传递到sh命令。
  4. sh:
    • sh是一个命令行解释器,用于执行从标准输入读取的命令。
    • 在这个上下文中,它执行base64 --decode解码后的命令。

整体命令执行和作用

将上述解释的元素组合起来,此命令执行的过程如下:

  • echo命令输出 Base64 编码的字符串Y2F0IC9ldGMvcGFzc3dk
  • base64 --decode接收这个编码字符串,并将其解码回原始的字符串cat /etc/passwd
  • sh命令接收解码后的命令字符串cat /etc/passwd,并执行它。

0x06 使用bash的间接引用

cmd='cat /etc/passwd'
bash -c "$cmd"

这种方式通过变量间接执行命令,有时可以绕过简单的命令行监控工具。

image-20240622214402773

命令分解

  1. cmd='cat /etc/passwd':
    • 这行命令定义了一个名为cmd的变量,并将字符串cat /etc/passwd赋值给这个变量。
    • cat /etc/passwd是一个常用命令,用于显示/etc/passwd文件的内容,该文件包含了系统用户的基本信息。
  2. bash -c "$cmd":
    • bash是 Unix 和 Linux 系统上常用的命令行解释器。
    • -c选项告诉bash从字符串中读取命令并执行。这个字符串是紧接在-c选项后面的参数。
    • "$cmd"是对前面定义的变量cmd的引用,当执行bash -c "$cmd"时,它被扩展为bash -c "cat /etc/passwd"

整体命令执行和作用

组合以上元素,执行这两行命令的过程如下:

  • 第一行定义变量cmd并存储了命令cat /etc/passwd
  • 第二行通过bash -c使用这个变量,实际上是告诉新启动的 Bash 进程执行cat /etc/passwd命令。

0x07 利用命令替换

cat $(echo '/etc/pass' | tr ' ' ' ')wd

这条命令利用echotr来间接构造文件路径,避免了直接写出完整路径。

image-20240622214805628

命令分解

  1. $(...):
    • $(...)是命令替换的一种形式,用于执行其中的命令并将输出替换到原来命令的位置。
  2. echo '/etc/pass' | tr ' ' ' ':
    • echo '/etc/pass'命令输出字符串/etc/pass
    • tr ' ' ' '是一个转换命令,用于替换输入中的字符。在这个例子中,它被用来将空格字符转换成空格字符,实际上没有改变输入。这种用法看起来是多余的,但可能是为了说明tr命令的用法或作为示例的一部分,其真正的作用可能在不同上下文中有所不同。
  3. 连接字符串:
    • 输出的/etc/pass通过命令替换被传递给外部的cat命令。
    • 字符串wd被直接附加到命令替换的结果之后,形成/etc/passwd

整体命令执行和作用

  • 执行echo '/etc/pass' | tr ' ' ' '结果为/etc/pass,这一结果通过命令替换$(...)被插入到cat命令中。
  • 因此,最终执行的命令是cat /etc/passwd,它会在终端显示/etc/passwd文件的内容,该文件包含系统用户的账户信息。

0x08 拆分字符串

part1='/etc/pas'
part2='swd'
cat $part1$part2

这种方法通过将敏感字符串分开来避免直接的字符串匹配。

image-20240622214926941

命令分解

  1. part1='/etc/pas':
    • 这行命令定义了一个名为part1的变量,并将字符串/etc/pas赋值给这个变量。
  2. part2='swd':
    • 这行命令定义了一个名为part2的变量,并将字符串swd赋值给这个变量。
  3. cat $part1$part2:
    • cat是 Unix 和 Linux 系统上用于显示文件内容的命令。
    • $part1$part2是对之前定义的变量的引用。当执行cat $part1$part2命令时,这两个变量被扩展成它们各自的值,然后拼接在一起。
    • 所以$part1$part2在扩展后变成/etc/paswd,这实际上与/etc/passwd相同。

整体命令执行和作用

  • 执行这组命令会定义两个变量part1part2,然后将这两个变量拼接成一个完整的路径/etc/passwd
  • 使用cat命令输出/etc/passwd文件的内容,这个文件包含了系统用户的账户信息。

0x09 环境变量利用

export PATH_PART='passwd'
cat /etc/$PATH_PART

通过环境变量PATH_PART隐藏关键文件路径,可能绕过基于静态路径的监控。

image-20240622215121600

命令分解

  1. export PATH_PART='passwd':
    • export是一个用于设置或导出环境变量的命令。通过使用export,变量PATH_PART不仅在当前的 shell 会话中可用,也可以在由当前 shell 启动的任何子进程中使用。
    • 将字符串'passwd'赋值给环境变量PATH_PART。这里的passwd/etc/passwd文件名的一部分。
  2. cat /etc/$PATH_PART:
    • cat是一个用于读取文件并输出其内容到标准输出设备的命令。
    • /etc/$PATH_PART利用了 Bash 的变量替换功能。在这个命令执行时,$PATH_PART会被替换为其值'passwd',从而构造出完整的文件路径/etc/passwd

整体命令执行和作用

  • 第一行命令设置了一个环境变量PATH_PART,使其在当前会话和所有子进程中可用。
  • 第二行命令通过将环境变量PATH_PART的值拼接到/etc/路径后面,形成完整的文件路径/etc/passwd,然后cat命令被用来显示这个文件的内容。

0x10 利用awk执行命令

awk 'BEGIN {system("cat /etc/passwd")}'

这条命令使用awksystem函数来执行外部命令,有时可以绕过对直接命令执行的监控。

image-20240622215308682

命令分解

  1. awk:
    • awk是一个用于文本处理的编程语言,常用于模式匹配、文本分析和复杂的文本操作任务。
  2. BEGIN:
    • BEGIN是一个特殊的awk模式,它在awk处理任何输入行之前执行。使用BEGIN块可以在处理输入文件之前设置所需的任何初步操作。
  3. system("cat /etc/passwd"):
    • system函数是awk中用于执行外部系统命令的函数。该函数接受一个字符串参数,该字符串包含要执行的命令。
    • "cat /etc/passwd"是传递给system函数的命令,用于显示/etc/passwd文件的内容。/etc/passwd文件包含了系统上所有用户的信息,如用户名、用户 ID、组 ID、家目录和 shell。

整体命令执行和作用

  • 当执行这条awk命令时,它首先进入BEGIN块,在处理任何输入之前就执行块内的命令。
  • BEGIN块中,system函数调用cat /etc/passwd命令,输出/etc/passwd文件的内容到标准输出。

0x11 利用sed执行命令

echo | sed 'e cat /etc/passwd'

通过sede功能(执行替换结果为命令),可以间接执行命令。

image-20240622215417142

命令分解

  1. echo:
    • echo命令通常用来输出其后跟随的字符串,但在这里没有提供任何参数,因此它输出一个空行。
  2. 管道 (|):
    • 管道用于将一个命令的输出作为另一个命令的输入。这里echo命令的输出(一个空行)被传递给sed命令。
  3. sed 'e cat /etc/passwd':
    • sed是流编辑器,用于对输入进行处理和转换。
    • e选项在某些版本的sed中用于将模式空间的内容当作命令执行。这意味着sed会尝试执行模式空间中的内容作为命令。然而,这种用法并不是所有sed版本都支持,且当支持时,其正确的用法通常是接收模式空间内的动态内容来执行,而不是静态指定命令。

使用上的问题

  • 在大多数标准sed实现中(如 GNU sed),不支持e作为命令执行选项。在支持此功能的sed版本中(如 GNU sed 4.2.2 之后的版本),e命令的使用方式通常是处理模式空间内的数据,而不是执行静态指定的命令。因此,这个命令在大多数环境下会因为语法错误而失败。

实际意图

如果目标是利用sed执行cat /etc/passwd命令,应该使用不同的方法,如下示例所示(假设使用的sed版本支持e):

echo 'cat /etc/passwd' | sed 'e'

在这个修改后的例子中:

  • echo输出cat /etc/passwd字符串。
  • 此字符串通过管道传递给sed
  • sed使用e执行传入的命令,显示/etc/passwd文件的内容。

echo | sed 'e cat /etc/passwd'这个命令的构造在多数情况下是不正确的,因为它误用了sede选项。正确的使用场景需要根据sed版本的功能和支持来调整。

0x12 使用perl执行命令

perl -e 'system("cat /etc/passwd")'

使用Perl的system函数,可以执行几乎任何命令。

image-20240622215814514

命令分解

  1. perl:
    • perl是一种功能丰富的编程语言,广泛用于文本处理、系统管理、网络编程等多种应用。
  2. -e选项:
    • -e选项告诉 Perl 解释器直接从命令行执行随后的代码。这允许在没有编写完整脚本文件的情况下快速运行小段代码。
  3. system("cat /etc/passwd"):
    • system是 Perl 中用来执行外部命令的函数。它接收一个字符串参数,该字符串包含要执行的命令。
    • 在这个例子中,传递给system的命令是cat /etc/passwd,这是一个 Unix/Linux 命令,用于显示/etc/passwd文件的内容。这个文件通常包含系统用户的账户信息,如用户名、用户 ID、组 ID、家目录和 shell。

整体命令执行和作用

  • 运行此命令时,Perl 解释器会解析-e后面的代码,并执行它。
  • system("cat /etc/passwd")调用会导致操作系统执行cat /etc/passwd命令,其输出将显示在标准输出上,即用户的终端或控制台。

0x13 利用python执行命令

python -c 'import os; os.system("cat /etc/passwd")'

这条命令使用Python的os.system方法来执行系统命令,适用于绕过基于特定shell语法的过滤器。

image-20240622215951470

命令分解

  1. python:
    • python命令用于启动 Python 解释器。这里用于执行随后的 Python 代码。
  2. -c选项:
    • -c选项允许您在命令行中直接运行 Python 代码。它是用于执行单条命令或小段代码的快速方式。
  3. Python 代码:import os; os.system("cat /etc/passwd"):
    • import os:这部分代码导入 Python 的os模块,该模块提供了许多与操作系统交互的功能,包括执行一个命令。
    • os.system("cat /etc/passwd")os.system()os模块中用于运行外部命令的方法。这个函数接收一个字符串,该字符串包含要在操作系统的命令行中执行的命令。
    • "cat /etc/passwd"是传递给os.system()的命令,用于显示/etc/passwd文件的内容。/etc/passwd文件包含了系统上所有用户的账户信息。

整体命令执行和作用

  • 运行这条命令时,Python 解释器会执行-c后面指定的代码。
  • 代码中的os.system("cat /etc/passwd")调用会触发操作系统执行cat /etc/passwd命令。
  • cat /etc/passwd命令的输出(即文件内容)将显示在终端或命令行界面上。

结语:不断探索,精进攻击技术

通过本文的探讨,我们对绕过命令过滤器的技术有了深入的了解。然而,所介绍的技术仅仅触及了广泛的bypass方法中的一小部分。在实际的攻击环境中,我们常常会遇到更为复杂多变的防御措施,这要求我们不断创新和灵活地组合不同的命令与代码,以增强bypass技术的有效性和攻击力。

掌握这些技术不仅是为了突破现有的安全防护,更是为了推动安全研究的深入发展,使我们能够更好地理解安全系统的潜在弱点。通过这种方式,我们不仅能够为安全社区揭示和修补这些漏洞,也能在实际对抗中保持技术的先进性。

攻防之间的博弈永无止境。每一次成功的bypass都是对我们技术理解的一次深化,每一次失败都是对策略调整的一种启示。让我们继续在法律和道德的框架内探索这一领域,用我们的专业知识和技能推动网络安全技术的进步,共同构建一个更加安全的数字世界。

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

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

相关文章

CMakeList.txt 与makefile文件介绍

在C 项目中&#xff0c; 我们经常可以看到CMakeList.txt 文件和makefile文件&#xff0c; 那么它们分别有什么用呢&#xff1f; 下面的图示很好地解释了它们的作用以及两者之间的关系。

数据分析必备:12个“地表超强”数据可视化工具推荐!

数据可视化之所以流行&#xff0c;不仅是因为它简化了我们查看复杂数据的方式&#xff0c;更是因为数据可视化可以加快我们获取数据信息的速度。但对于初学者来说&#xff0c;使用数据可视化工具并不能快速启动。因此&#xff0c;本文专门为您列出了12个免费的数据可视化工具&a…

HQChart使用教程30-K线图如何对接第3方数据40-日K叠加股票增量更新

HQChart使用教程30-K线图如何对接第3方数据40-日K叠加股票增量更新 叠加股票叠加日K更新Request 字段说明Data.symbol 协议截图返回json数据结构stock HQChart代码地址交流 叠加股票 示例地址:https://jones2000.github.io/HQChart/webhqchart.demo/samples/kline_index_edit.…

通用后台管理——Vue router的使用

目录 一、Vue router是什么&#xff1f; 二、下载Vue router 三、使用router 四、使用嵌套router​​​​​​​ 一、Vue router是什么&#xff1f; 官网&#xff1a;安装 | Vue Router 是Vue.js的官方路由&#xff0c;实现多页跳转到功能&#xff0c;还包括&#xff1a; …

ChatUI:使用Gradio.NET为LLamaWorker快速创建大模型演示界面

Gradio.NET 是 Gradio 的.NET 移植版本。它是一个能够助力迅速搭建机器学习模型演示界面的库&#xff0c;其提供了简洁的 API&#xff0c;仅需寥寥数行代码就能创建出一个具备交互性的界面。在本篇文章中&#xff0c;我们将会阐述如何借助 Gradio.NET 为 LLamaWorker 快捷地创建…

ora-15025 ora-27041问题处理

这个问题先排查 [oracleracdg2-2 ~]$ cd $ORACLE_HOME/bin [oracleracdg2-2 bin]$ ls -ld oracle -rwsr-s--x 1 oracle oinstall 239626641 Jun 25 19:09 oracle 正常的属组是 [gridracdg2-1 ~]$ setasmgidwrap -o /u01/app/oracle/product/11.2.0.4/dbhome_1/bin/oracle […

OZON跨境卖家爆款产品有哪些

OZON跨境卖家爆款产品有哪些&#xff1f;国内的Ozon跨境卖家做这几个品&#xff0c;不爆都难&#xff01; Top1 太阳镜 Очки солнцезащитные 商品id&#xff1a;1556874194 月销量&#xff1a;1095 OZON跨境卖家爆款产品工具&#xff1a;D。DDqbt。COm/…

牛客周赛 Round 48 解题报告 | 珂学家

前言 题解 这场感觉有点难&#xff0c;D完全没思路, EF很典&#xff0c;能够学到知识. E我的思路是容斥贡献&#xff0c;F很典&#xff0c;上周考过一次&#xff0c;引入虚拟节点质数(有点像种类并查集类似的技巧). 欢迎关注 珂朵莉 牛客周赛专栏 珂朵莉 牛客小白月赛专栏 …

深度相机辅助导航避障(三):地面点云滤除

前面的章节介绍了坐标变换,以及如何设置深度相机的坐标变换。那就可以很直观从机器人的坐标系对深度相机扫描到的障碍物点云进行处理。 在实际应用中,机器人正确估计周围地形,对于道路的可通过性、路径规划和障碍物检测等方面都很重要。那么在获取深度相机点云数据后就得准…

pytorch基础知识Tensor算术运算

1、Tensor的基本概念 标量是零维的张量&#xff0c;向量是一维的张量&#xff0c;矩阵是二维的张量 2、Tensor的创建 import torch"""常见的几个tensor创建""" a torch.Tensor([[1,2],[3,4]]) #2行2列的 print(a, a.type()) print(torch.on…

在前端开发过程中如果函数参数很多,该如何精简

1. 在前端开发过程中如果函数参数很多&#xff0c;该如何精简 1.1. 对象参数&#xff08;对象字面量&#xff09;&#xff1a;1.2. 默认参数和解构赋值&#xff1a;1.3. 使用类或构造函数&#xff1a;1.4. 利用闭包或者高阶函数&#xff1a;1.5. 利用ES6的扩展运算符&#xff1…

利用ChatGPT优化程序员工作流程:实用案例分享

近年来&#xff0c;人工智能技术的迅猛发展给各行各业带来了翻天覆地的变化。作为其中的一员&#xff0c;程序员在工作中也受益匪浅。其中&#xff0c;ChatGPT的出现&#xff0c;更是成为优化程序员工作流程的得力助手。本文将通过多个实用案例&#xff0c;分享如何利用ChatGPT…

数据质量低下会造成什么后果?应从哪些维度衡量数据质量?

大数据时代的到来&#xff0c;预示着前所未有的商业机遇和洞察力。然而&#xff0c;要将这些海量数据中蕴含的巨大价值转化为实际的业务成果&#xff0c;一个关键的前提条件是必须确保所收集数据的质量。数据质量是大数据价值链上的第一道关卡&#xff0c;它的高低直接关系到数…

OpenCV中掩膜(mask)图像的创建和使用

操作系统&#xff1a;ubuntu22.04OpenCV版本&#xff1a;OpenCV4.9IDE:Visual Studio Code编程语言&#xff1a;C11 功能描述 掩模图像&#xff08;Mask Image&#xff09;是一种特殊类型的形象数据&#xff0c;在图像处理和计算机视觉中扮演着重要角色。它通常是一个二维数组…

uniapp H5端使用百度地图

1、登录百度地图开放平台 https://lbsyun.baidu.com/&#xff08;没有账号则先去创建一个百度账号&#xff09; 2、进入百度地图开放平台控制台&#xff08;导航栏“控制台”&#xff09;&#xff0c;点击“应用管理”-“我的应用” 3、选择“创建应用”&#xff0c;应用模块选…

还不会找1688对标竞品?那你别说自己是做运营的

如何找正确的对标竞品 找到竞品→模仿竞品→学习竞品 找到正确的对标竞品&#xff0c;是至关重要的一个环节&#xff0c;如果你想要把流量做起来&#xff0c;却没找到正确的对标竞品是完全不可能的。因为你没有对标&#xff0c;你就完全不知道同行做什么动作才有流量&#xf…

Opencv学习项目2——pytesseract

上一次我们使用pytesseract.image_to_boxes来检测字符&#xff0c;今天我们使用pytesseract.image_to_data来检测文本并显示 实战教程 和上一次一样&#xff0c;添加opencv-python和pytesseract库 首先我们先来了解一下pytesseract.image_to_data pytesseract.image_to_data(…

k8s手撕架构图+详解

“如果您在解决类似问题时也遇到了困难&#xff0c;希望我的经验分享对您有所帮助。如果您有任何疑问或者想分享您的经历&#xff0c;欢迎在评论区留言&#xff0c;我们可以一起探讨解决方案。祝您在编程路上顺利前行&#xff0c;不断突破技术的难关&#xff0c;感谢您的阅读&a…

MySQL 超出月份最大日期(工作总结)

前几天帮同事修改了一个bug&#xff0c;这个bug是怎么造成的呢。先来看需求&#xff0c;系统需要统计某个月份的数据。很简单的一个需求。 同事的写的MySQL语句 SELECTREPLACE(FORMAT(sum(count_value),2), ,, ) as value,<if test"type day">count_date as…

Vue-内容渲染,属性渲染指令

内容渲染 在Vue中渲染元素&#xff0c;用双花括号{{}}的语法进行插值&#xff0c;称之为插值表达式 双花括号会渲染hi里面的值 <body><div id"app">{{hi}}</div> <script>const vm{data(){return{hi:hello world}}}const appVue.createAp…