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函数进行过滤
  • 相关阅读:
    BZOJ 1101 莫比乌斯函数+分块
    BZOJ 2045 容斥原理
    BZOJ 4636 (动态开节点)线段树
    BZOJ 2005 容斥原理
    BZOJ 2190 欧拉函数
    BZOJ 2818 欧拉函数
    BZOJ 3123 主席树 启发式合并
    812. Largest Triangle Area
    805. Split Array With Same Average
    794. Valid Tic-Tac-Toe State
  • 原文地址:https://www.cnblogs.com/LeeeBoom/p/12378537.html
Copyright © 2011-2022 走看看