zoukankan      html  css  js  c++  java
  • 命令执行漏洞

    命令执行漏洞原理

    命令执行漏洞是指应用有时需要调用一些执行系统命令的函数,如:system()、exec()、shell_exec()、eval()、passthru()等函数,代码未对用户可控参数做过滤,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击。

     

    命令执行漏洞应用例子:

    日常的网络访问中,我们常常可以看到某些Web网站具有执行系统命令的功能,比如:有些网站提供ping功能,我们可以输入一个IP地址,它就会帮我们去尝试ping目标的IP地址,而我们则可以看到执行结果。
    但是如果用户没有遵循网站的本意,而去输入精心构造的指令,可能会对网站本身的功能逻辑产生逆转,导致让目标网站执行恶意命令。

    恶意用户通过将恶意系统命令拼接到正常命令中,让网站执行恶意命令

    image

    命令执行漏洞产生条件

    • 用户可控:可以控制输入的内容
    • 后台执行:用户输入的内容被当作命令执行

    命令执行常用函数

    一:反撇号:` `

    ` `输出并返回shell结果 相当于exec的效果

      1 payload:echo `whoami`

     

    二:system()

    system() 输出并返回最后一行shell结果

      1 payload:system('whoami')

    三:passthru()

    只调用命令,把命令的运行结果原样地直接输出到标准输出设备上。

      1 payload:passthru('whoami')

    四:exec()

    不能输出结果,返回最后一行shell结果,所有结果可以保存到一个返回的数组里面

      1 payload:exec($_POST['system'],$output);print_r($output);

    五:shell_exec()

    通过shell环境命令执行,并且将完整的输出以字符串的方式返回

      1 payload:shell_exec($_POST['system']);

    六:其他函数

    popen()、proc_open()、pcntl_exec()

    注意事项:权限问题 => 权限和中间件运行有关 继承web运行权限

    命令注入漏洞的危害跟web中间件运行的权限有关。由于web应用运行在web中间件上,所以web应用会“继承”web中间件的运行权限。如果存在命令注入漏洞的web应用运行在以系统管理员身份运行的web中间件上,那么通过web执行命令就相当于以管理员权限执行命令。

    常用系统命令与功能:windows下同时执行多条命令语法格式

    image

    Windows下同时执行多条命令语法格式:

    Comnand1 & Comnand2:

    先后执行Comnand1和Comnand2,无论Comnand1执行是否成功
    Comnand1 && Comnand2:

    先后执行Comnand1和Comnand2,只有Comnand1执行成功时才执行Comnand2
    Comnand1 || Comnand2:

    先后执行Comnand1和Comnand1,只有Comnand1执行失败时才执行Comnand1
    Comnand1 | Comnand2:

    |是管道符,将Comnand1的执行结果传递给Comnand2

    常用系统命令与功能:Linux下同时执行多条命令语法格式

    image

    Linux下同时执行多条命令语法格式:

    Comnand1 ; Comnand2:

    先后执行Comnand1和Comnand2,无论Comnand1执行是否成功
    Comnand1 && Comnand2:

    先后执行Comnand1和Comnand2,只有Comnand1执行成功时才执行Comnand2
    Comnand1 || Comnand2:

    先后执行Comnand1和Comnand1,只有Comnand1执行失败时才执行Comnand1
    Comnand1 | Comnand2:

    |是管道符,将Comnand1的执行结果传递给Comnand2

    命令执行漏洞分类

    1. web代码层命令执行:代码层过滤不严

    商业应用的一些核心代码封装在二进制文件中,在Web应用中通过system函数来调用:
    system("/bin/program --arg $arg");

     

    2. 系统层面的漏洞造成命令注入

    bash破壳漏洞(CVE-2014-6271)、MS08-67、永恒之蓝

     

    3. 调用的第三方组件存在代码执行漏洞

    WordPress中用来处理图片的ImageMagick组件
    JAVA中的命令注入漏洞(struts2/ElasticsearchGroovy等)
    vBulletin 5.x版本通杀远程代码执行

    ThinkPHP命令执行

    命令执行漏洞防御方式

    1. 尽量少用执行命令的函数或者直接禁用 ,在PHP下禁用高危系统函数,找到php.ini,查找到disable_functions,添加禁用的函数名
    2. 参数值尽量使用引号包括,并在拼接前调用addslashes函数进行转义
    3. 在使用动态函数之前,确保使用的函数是指定的函数之一
    4. 在进入执行命令的函数方法之前,对参数进行过滤,对敏感字符进行转义
    5. 对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤,对于可控点是程序参数值的情况下,使用escapeshellarg函数进行过滤
  • 相关阅读:
    Unable to load dbxmss.dll (ErrorCode 16). It may be missing from the system Path
    同一网内机器无法连通解决一例
    Day.24
    Day.24
    Day.23
    Day.22
    Day.23
    Day.21
    Day.22
    Day.01-Day.20
  • 原文地址:https://www.cnblogs.com/LeeeBoom/p/12378537.html
Copyright © 2011-2022 走看看