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

    介绍

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

    分类

    1、代码层过滤不严

      商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数调用:

      system("/bin/program --arg $arg");

    2、系统的漏洞造成命令注入

      bash破壳漏洞(CVE-2014-6271)

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

      wordpress中用来处理图片的ImageMagick组件;

      JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等);

      ThinkPHP命令执行;

    利用条件

    1、应用调用执行命令的函数

    2、将用户输入作为系统命令的参数拼接到命令中

    3、没有对用户输入过滤或过滤不严格

    常见拼接符

    命令A ;命令B 先执行命令A,在执行命令B
    命令A && 命令B 命令A执行成功,才会执行命令B
    命令A & 命令B 简单拼接,命令A、B之间没有制约关系
    命令A | 命令B 显示命令B的执行结果
    命令A || 命令B 命令A执行失败,才会执行命令B

    PHP中的危险函数

    system():  成功则返回命令输出的最后一行,失败则返回 FALSE。

    exec():   命令执行结果的最后一行内容

    shell_exec():  命令执行的输出。如果执行过程中发生错误或者进程不产生输出,则返回NUL。

    passthru(): 执行外部程序并且显示原始输出。

    eval():   将输入的字符串参数当做PHP程序代码来执行。

    命令执行常见可控位置情况

    system("$sag");  //可控点直接是待执行的程序

    stem("/bin/prog $arg")  //可控点是传入程序的整个参数

    system("/bin/prog -p $arg");  //可控点是传入程序的某个参数的值(无引号包裹)

    system("/bin/prog -p="$arg"");  //可控点是传入程序的某个参数的值(有双引号包裹)

    system("/bin/prog -p='$arg'");  //可控点是传入程序的某个参数的值(有单引号包裹)

    利用方式

    方式一:常见拼接符利用

    1、&&拼接符

     2、&拼接符

     3、||拼接符

    4、|拼接符

    方式二:添加用户

    创建用户a

     查看用户是否创建成功

     将用户a添加管理员组

     使用创建的用户进行远程登录

    方式三:执行函数,信息泄露

    执行函数,phpinfo();

    方式四:写入文件,反弹shell

    在目标/tmp目录下写入反弹shell脚本

    使用命令执行漏洞,执行写入的脚本

    nc监听端口,得到目标服务器shell

    命令执行漏洞危害

    • 继承WEB服务程序的权限去执行系统命令或读写文件
    • 反弹shell
    • 控制整个网站甚至服务器
    • 进一步内网渗透

    命令执行漏洞防御方式

    • 尽量少用执行命令的函数或直接禁用
    • 参数值尽量使用引号包括,并在拼接前调用addslashes函数进行转义
    • 在使用动态函数之前,确保使用的函数是指定的函数之一
    • 在进入执行命令的函数方法之前,对参数进行过滤,对敏感字符进行转义
    • 对于可控点是程序参数的情况下,使用escapeshellcmd函数进行过滤
  • 相关阅读:
    五秒原则,做一件事之前数 5 秒,1,2,3,4,5 立马去做。比如睡觉:数五秒,立马放下手机,闭眼。
    Perl 安装 JSON 包
    Perl: hash散列转换为Json报错集, perl.c,v $$Revision: 4.0.1.8 $$Date: 1993/02/05 19:39:30 $
    叫法: 表名 表字段名 定义每个表字段
    失误1: 把i放到循环体内部,i++失效
    沈南鹏@《遇见大咖》: A轮没投,投了8个月以后就证明了张一鸣是对了,在美国都没有张一鸣这种模式
    xshell通过xftp传输Windows文件到Linux:在输入put后,再摁 TAB 键,可显示当前文件夹的文件
    LeetCode84 Largest Rectangle in Histogram
    全排列问题及其引申问题
    LeetCode Weekly Contest 8
  • 原文地址:https://www.cnblogs.com/wszgg/p/14194880.html
Copyright © 2011-2022 走看看