任意命令执行

任意命令执行原因:

  当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system、exec、shell_exec等,当用户可以控制命令执行函数中的参数时,将可以注入恶意系统命令到正常命令中,造成命令执行攻击。

  脚本语言(如PHP)优点是简洁、方便,但也伴随着一些问题,如速度慢、无法接触系统底层,如果我们开发的应用(特别是企业级的一些应用)需要一些除去WEB的特殊功能时,就需要调用一些外部程序。

  在PHP中可以调用外部程序的常见函数:

    system、exec、shell_exec、passthru、popen、proc_popen

  应用在调用这些函数执行系统命令的时候,如果将用户的输入作为系统命令的参数拼接到命令行中,又没有过滤用户的输入的情况下,就会造成命令执行漏洞。

漏洞分类:

  代码层过滤不严格:

    一些商业应用需要执行命令,商业应用的一些核心代码可能封装在二进制文件中,在web应用中通过system函数来调用:system("/bin/program --arg $arg");

  系统的漏洞造成命令执行:

    bash破壳漏洞(CVE-2014-6271),如果我们控制执行的bash的环境变量,就可以通过破壳漏洞来执行任意代码。

  调用第三方组件存在代码执行漏洞:

    典型的就是WordPress中,可以选择使用ImageMagick这个常用的图片处理组件,对用户上传的图片进行处理(默认是ImageMagick库),造成命令执行。

    JAVA中的命令执行漏洞(structs2、ElasticsearchGroovy等)

危害:

  继承WEB服务程序的权限,执行系统命令

  继承WEB服务程序的权限,读写文件

  反弹shell

  控制整个网站

  甚至控制整个服务器

  可以进一步的内网渗透

  等等

漏洞利用:

  <?php system($_GET[‘cmd‘]); ?>

  http://127.0.0.1:8080/?cmd=id

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

    如果我们能直接控制$arg,那么就能执行任意命令

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

    我们能够控制的点是程序的整个参数,我们可以直接用 && | 等,利用与、或、管道命令来执行其他命令

    当 $arg 被 escapeshellcmd 处理之后,我们不能越出这个外部程序的范围,我们可以看这个程序自身是否有“执行外部命令”的参数或功能,比如 LINUX 下的 sendmail 命令自带读写文件功能,可以用来写 webshell。

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

    可控制的点是一个参数,同样可以使用 与、或、管道来执行其他的任意命令

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

    因为有引号包裹,首先要分析引号是否被转义

      如果没有被转义,先闭合引号,然后利用方法同上

      如果被转义,双引号内的变量依然会被解析,利用反引号执行任意命令`id`

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

    单引号内只是一个字符串,所以只能闭合单引号,才可利用

修复方案:

  1.能使用脚本解决的工作,不要利用其他程序处理。尽量少用执行命令的函数,并在 disable_functions 中禁用

  2.对于可控点是程序参数的情况,使用 escapeshellcmd 函数进行过滤  // escapeshellcmd() 除去字符串中的特殊符号

  3.对于可控点是程序参数的值得情况,使用 escapeshellarg 函数进行过滤  // escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入 shell 函数,并且还是确保安全的

  4.参数的值尽量使用引号包裹,并在拼接前调用 addslashes 函数进行转义

任意命令执行的前提:

  代码中存在调用系统命令的函数

  函数中存在我们可控的点

  这个点没有过滤,或过滤不严格

时间: 2024-12-16 08:46:51

任意命令执行的相关文章

小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞

手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘原则[会比自动扫描器发现的漏洞要多,要全面] 1.每一个变量都进行尝试 2.所有头[如:cookie中的变量] 3.逐个变量删除 #####################################################################################

利用Vulnhub复现漏洞 - Couchdb 任意命令执行漏洞(CVE-2017-12636)

漏洞原理:Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库.应用广泛,如BBC用在其动态内容展示平台,Credit Suisse用在其内部的商品部门的市场框架,Meebo,用在其社交平台(web和应用程序). 在2017年11月15日,CVE-2017-12635和CVE-2017-12636披露,CVE-2017-12

Elasticsearch Groovy任意命令执行漏洞EXP

测试url:http://190.196.67.252:9200/_search?pretty http://191.234.18.14:9200///_search?pretty POST提交 {“size”:1,”script_fields”: {“iswin”: {“script”:”java.lang.Math.class.forName(\”java.io.BufferedReader\”).getConstructor(java.io.Reader.class).newInstanc

ImageMagick 命令执行分析

ImageMagick是一款使用量很广的图片处理程序,很多厂商都调用了这个程序进行图片处理,包括图片的伸缩.切割.水印.格式转换等等.但近来有研究者发现,当用户传入一个包含『畸形内容』的图片的时候,就有可能触发命令注入漏洞. 国外的安全人员为此新建了一个网站: https://imagetragick.com/ ,不得不说,有些外国人蛮会玩的. 相对于之前的数个拥有『主页』的漏洞,这个洞确实不一般,确实是一个可以被利用的好洞,乌云主站上也爆出了数个被该漏洞影响的大厂商.我们先来分析一下它出现的原

8_任意系统命令执行

一.背景介绍 当应用(网络设备例如:家用路由器,DNS服务器等等)需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数.如PHP中的system.exec.shell_exec等,当用户可以控制命令执行函数中的参数时,将可以注入恶意系统命令到正常命令中,造成任意命令执行攻击.主要以PHP为主介绍命令执行漏洞. 二.漏洞成因 脚本语言(如PHP)优点是简洁.方便,但也伴随着一些问题,如速度慢.无法接触系统底层,如果我们开发的应用(特别是企业级的一些应用)需要一些除去web的特殊功

Struts2命令执行各版本记录

Struts2命令执行集合 截止至S2-037 原文链接:http://blog.0kami.cn/2017/01/13/Struts2-history-payload/ Struts2框架的RCE远程命令执行的确是一个比较经典的漏洞,这个框架犹如一个筛子,一个人十个指头能按住几个洞-- 参考描述: Struts2 S2-001 影响版本:2.0.0 - 2.0.8具体详情:https://struts.apache.org/docs/s2-001.html该漏洞因为用户提交表单数据并且验证失败

python 代码审计-命令执行漏洞(自己编写的代码)

python 代码审计-命令执行漏洞(自己编写的代码) 0x00 源代码 def execute(request): context ={} ip= request.POST.get("ip") username= request.POST.get("username") password= request.POST.get("password") idnex= int(request.POST.get("index")) c

由一道工控路由器固件逆向题目看命令执行漏洞

前言 2019 工控安全比赛第一场的一道固件逆向的题目,好像也比较简单,好多人都做出来了.这里就分别从静态和动态调试分析复现一下这个命令执行的洞. 赛题说明 题目给的场景倒是挺真实的:路由器在处理 tddp 协议时出现了命令注入,导致了远程命令执行.就是后面做出来的这个答案的格式咋提交都不对... 题目给了一个压缩文件,解压出来时一个 bin 文件. 使用 binwalk -Me 直接解压,得到了与一个标准的 linux 风格的文件系统: 后来知道这个固件其实就是 tp_link SR20 路由

Couchdb垂直权限绕过到命令执行

0x00couchdb简介 Apache CouchDB是一个开源数据库,专注于易用性和成为"完全拥抱web的数据库".它是一个使用JSON作为存储格式,JavaScript作为查询语言,MapReduce和HTTP作为API的NoSQL数据库.应用广泛. 0x01两个漏洞的关系及原理 CVE-2017-12635垂直越权: CVE-2017-12635是由于Erlang和JavaScript对JSON解析方式的不同,导致语句执行产生差异性导致的.这个漏洞可以让任意用户创建管理员,属于