宝玛科技网
您的当前位置:首页web命令执行漏洞

web命令执行漏洞

来源:宝玛科技网

一,什么是命令执行漏洞:


  应用有时需要调用一些执行系统命令的函数,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,当用户能控制这些函数中的参数时,就可以将恶意系统命令拼接到正常命令中,从而造成命令执行攻击,这就是命令执行漏洞。



二,利用条件:


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

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

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


三,漏洞危害:

 1,攻击者可以执行命令获取想要的信息

 2,攻击者可以拿下服务器等



四,例子:


例子一:

代码:

1
2
3
4
5
6
<?php
     $arg  $_GET [ 'cmd' ];    
     if  ( $arg ) {
         system( "$arg" );
     }
?>


访问:http://127.0.0.1/mingling/simple1.php?cmd=ping%20127.0.0.1

也就是执行了“ping 127.0.0.1”命令


例子二:

1
2
3
4
5
6
<?php
     $arg  $_GET [ 'cmd' ];    
     if  ( $arg ) {
         system( "ping -c 3 $arg" );
     }
?>


访问:

执行了pwd命令







例子三:

1
2
3
4
5
6
7
8
<?php
     $arg  $_GET [ 'cmd' ];   
     
     if  ( $arg ) {
         system( "ls -al \"$arg\"" );
     }
     
   ?>

访问:

执行了ifconfig命令


例子四:

1
<?php  eval ( $_REQUEST [ 'code' ]);?>

当访问:

注意后面的分号,当然后面也可以跟一句话木马。


例子五:

1
2
3
4
5
<?php
     $fun  $_GET [ 'fun' ];
     $par  $_GET [ 'par' ];
     $fun ( $par );
?>


当访问:

其实就相当于是执行了:

1
system( "whoami"



五:修复方案:

如:

1
2
3
4
5
6
<?php
     $arg  $_GET [ 'cmd' ];     // $arg = addslashes($arg);
     $arg  escapeshellcmd ( $arg );   //拼接前就处理
     if  ( $arg ) {
         system( "ls -al '$arg'" );
     }?>


escapeshellcmd( )逃脱字符串中任何可能用来哄骗(trick)shell命令的字符串,此函数用来确定资料传送到exec( )或system( )之前,由使用者输入的任何资料已经逃脱,标准的用法如下

1
2
3
4
5
Example :
 
<?php
    system( EscapeShellCmd ( $cmd ));
?>


六:参考链接:


1,

2,



本文转自 天道酬勤VIP 51CTO博客,原文链接:http://blog.51cto.com/tdcqvip/1959586


因篇幅问题不能全部显示,请点此查看更多更全内容