1. 程式人生 > >web命令執行漏洞

web命令執行漏洞

命令執行漏洞


一,什麽是命令執行漏洞:


應用有時需要調用一些執行系統命令的函數,如PHP中的system、exec、shell_exec、passthru、popen、proc_popen等,當用戶能控制這些函數中的參數時,就可以將惡意系統命令拼接到正常命令中,從而造成命令執行攻擊,這就是命令執行漏洞。



二,利用條件:


1,應用調用執行命令的函數

2,將用戶輸入作為系統命令的參數拼接到命令中

3,沒有對用戶輸入過濾或者過濾不嚴格


三,漏洞危害:

1,攻擊者可以執行命令獲取想要的信息

2,攻擊者可以拿下服務器等



四,例子:


例子一:

代碼:

<?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”命令

技術分享


例子二:

<?php
    $arg = $_GET[‘cmd‘];    
    if ($arg) {
        system("ping -c 3 $arg");
    }
?>


訪問:http://192.168.25.107/simple2.php?cmd=127.0.0.1;pwd

執行了pwd命令


技術分享






例子三:

<?php
    $arg = $_GET[‘cmd‘];   
    
    if ($arg) {
        system("ls -al \"$arg\"");
    }
    
  ?>

訪問:http://192.168.25.107/simple3.php?cmd=/home%22;ifconfig%22

執行了ifconfig命令

技術分享


例子四:

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

當訪問:http://192.168.25.107/simple4.php?code=phpinfo();

註意後面的分號,當然後面也可以跟一句話木馬。

技術分享


例子五:

<?php
    $fun = $_GET[‘fun‘];
    $par = $_GET[‘par‘];
    $fun($par);
?>


當訪問:http://192.168.25.107/simple5.php?fun=system&par=whoami

其實就相當於是執行了:

system("whoami")

技術分享



五:修復方案:

  1. 盡量少用執行命令的函數或者直接禁用

  2. 參數值盡量使用引號包括

  3. 在使用動態函數之前,確保使用的函數是指定的函數之一

  4. 在進入執行命令的函數/方法之前,對參數進行過濾,對敏感字符進行轉義

如:

<?php
    $arg = $_GET[‘cmd‘];    // $arg = addslashes($arg);
    $arg = escapeshellcmd($arg);  //拼接前就處理
    if ($arg) {
        system("ls -al ‘$arg‘");
    }?>


escapeshellcmd( )逃脫字符串中任何可能用來哄騙(trick)shell命令的字符串,此函數用來確定資料傳送到exec( )或system( )之前,由使用者輸入的任何資料已經逃脫,標準的用法如下

Example :

<?php
   system(EscapeShellCmd($cmd));
?>


六:參考鏈接:


1,http://haojiawei.xyz/2017/03/15/%E5%91%BD%E4%BB%A4%E6%89%A7%E8%A1%8C%E6%BC%8F%E6%B4%9E/

2,http://www.jianshu.com/p/1e706f13b088



技術分享

本文出自 “天道酬勤” 博客,請務必保留此出處http://tdcqvip.blog.51cto.com/12995943/1959586

web命令執行漏洞