什么是命令执行漏洞?

一、漏洞描述

命令执行漏洞是指服务器没有对执行的命令进行过滤,用户可以随意执行系统命令,这种漏洞属于高危漏洞之一,因为攻击者可以利用它来执行恶意命令,从而控制整个网站甚至整个服务器,在PHP中,命令执行漏洞主要是基于一些函数的参数过滤不足导致的,如system()、exec()、shell_exec()等函数,当攻击者可以控制这些函数中的参数时,就可以将恶意的系统命令拼接到正常命令中,从而造成命令执行攻击。

什么是命令执行漏洞?插图1

二、漏洞原理

应用程序有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_open等,当黑客能控制这些函数中的参数,并且开发人员对这个参数没有严格的过滤时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行漏洞。

三、漏洞危害

继承Web服务器程序的权限:去执行系统命令或读写文件。

反弹shell:攻击者可以通过命令执行漏洞获取服务器的Shell访问权限,进而控制整个服务器。

控制整个网站:甚至控制整个服务器,造成严重的数据泄露和损失。

四、漏洞产生的原因

1、没有对用户输入进行过滤或过滤不严:没有过滤&、&&、|、||等连接符。

2、系统漏洞造成的命令执行:如bash破壳漏洞(CVE-2014-6271),该漏洞可以构造环境变量的值来执行具有攻击力的脚本代码,会影响到bash交互的多种应用,如http、ssh和dhcp等。

3、调用的第三方组件存在代码执行漏洞:如php(system()、shell_exec()、exec()、eval()),JAVA中的命令执行漏洞(struts2/ElasticsearchGroovy等)。

五、常见的危险函数

1、PHP代码相关

eval()

assert()

preg_replace

call_user_func()

call_user_func_array()

create_function

array_map()

2、系统命令执行相关

system()

passthru()

exec()

pcntl_exec()

shell_exec()

什么是命令执行漏洞?插图3

popen()

proc_open()

(反单引号)

ob_start()

symlink()

getenv

putenv($a)

六、命令执行的类型

1、代码层过滤不严格:商业应用的一些核心代码封装在二进制文件中,在web应用中通过system函数来调用。

2、系统的漏洞造成命令注入:比如bash破壳漏洞(CVE-2014-6271)。

3、调用的第三方组件存在代码执行漏洞:如WordPress中用来处理图片的imageMagick组件,Java中的命令执行漏洞(struts2/ElasticsearchGroovy等),ThinkPHP命令执行。

七、危险函数利用示例

1、system

   if(isset($_REQUEST['url'])){
       $url = ($_REQUEST['url']);
       $b = system($url, $a);
       echo $a.PHP_EOL;
       echo $b.PHP_EOL;
   }

恶意代码执行:?url=dir。

文件写入:?url=echo 1111 > flag.php。

2、passthru

   if(isset($_REQUEST['url'])){
       $url = ($_REQUEST['url']);
       passthru($url,$a);
       echo $a.PHP_EOL;
   }

文件写入:?url=dir > 22.txt。

3、exec:需要注意的一点exec要有echo才有回显。

   if(isset($_REQUEST['url'])){
       $url = ($_REQUEST['url']);
       echo exec($url);
   }

4、shell_exec

   if(isset($_REQUEST['url'])){
       $url = ($_REQUEST['url']);
       echo shell_exec($url);
   }

5、反引号


   if(isset($_REQUEST['url'])){
       $url = ($_REQUEST['url']);
       echo$url;
   }

八、常用过滤绕过方法

1、编码绕过:URL编码是web端进行命令执行绕过最常用的方法,如cat%20%2Fetc%2Fpasswd,Base64编码绕过:将想要执行的命令进行base64编码,然后添加到下面的双引号里面,如echo "d2hvYW1p" | base64 -d | bash。

2、通配符绕过:如cat /et?/p?*sswd。

3、命令拼接:可以使用&、&&、|、||这几种方式来进行命令拼接,如ls & cat /etc/passwd。

什么是命令执行漏洞?插图5

4、**注释符#进行绕过**:如cat /etc/passwd #anything。

5、字符拼接:如cat /"e"tc/'p'a's'swd。

6、转义拼接:如cat /etc/passwd。

7、命令拼接:如a=ca;b=t;$a$b /etc/passwd。

8、填充垃圾字符绕过:如cat /etc/passwd xxx。

9、分号(;):如cmd1;cmd2。

10、反引号`和$():如echo "result :whoami`"或echo "result : $(whoami)"。

11、重定向绕过:如cat<1.txt(可绕过空格)。

12、单引号和双引号:如c""at 1.tx''t。

13、反斜杠绕过:如cat 1.txt。

14、**$1、$@、$*绕过**:如$1、$@、$*绕过 c$1a$1t。

九、防范措施

为了防范命令执行漏洞,开发者应该采取以下措施:

1、严格过滤用户输入:确保所有用户输入都经过严格的过滤和验证,避免恶意命令的注入。

2、使用安全的函数:尽量避免使用可能引发命令执行漏洞的函数,如eval()、system()等,如果必须使用,请确保对输入参数进行严格的过滤和验证。

3、更新和修补系统漏洞:及时更新操作系统和应用程序的安全补丁,修复已知的漏洞和安全问题。

4、限制权限:为Web服务器分配最小权限,限制其对系统资源的访问范围,减少潜在的风险。

5、安全审计和监控:定期对系统进行安全审计和监控,及时发现并处理异常行为和潜在的安全威胁。

各位小伙伴们,我刚刚为大家分享了有关命令执行 漏洞的知识,希望对你们有所帮助。如果您还有其他相关问题需要解决,欢迎随时提出哦!

本文来源于互联网,如若侵权,请联系管理员删除,本文链接:https://www.9969.net/86390.html

小末小末
上一篇 2024年10月28日 12:18
下一篇 2024年10月28日 12:38

相关推荐