文章詳情頁
php網絡安全中命令執行漏洞的產生及本質探究
瀏覽:35日期:2022-06-06 15:25:39
目錄
- 漏洞的產生原因
- 漏洞的本質
- 涉及到的函數
- 命令執行漏洞的危害
- 命令執行漏洞的防御
- 命令執行相關函數的使用
- system()
- exec()
- shell_exec()
- passthru()
- popen()
- 反引號
漏洞的產生原因
- 代碼層過濾不嚴。應用程序直接或間接使用了動態執行命令的危險函數,并且這個函數的運行參數是可控的
- 系統的漏洞造成命令注入
漏洞的本質
應用有時需要調用一些執行系統命令的函數,當服務器沒有嚴格過濾用戶提供的參數時,就有可能導致用戶提交惡意代碼被服務器執行,從而造成命令執行漏洞。
涉及到的函數
- 1.system
- 2.exec()
- 3.shell_exec()
- 4.passthru()
- 5.popen()
- 6.反引號
命令執行漏洞的危害
- 1.繼承Web 服務器程序權限(Web用戶權限),去執行系統命令
- 2.繼承Web服務器權限,讀寫文件
- 3.反彈Shell
- 4.控制整個網站
- 5.控制整個服務器
命令執行漏洞的防御
- 1、盡量少使用執行命令函數或者禁用disable_functions
- 2、在進入執行命令的函數之前,對參數進行過濾,對敏感字符進行轉義
- 3、參數值盡量使用引號包括,并在拼接前調用addslashes進行轉義
命令執行相關函數的使用
system()
- 說明:能夠將字符串作為OS命令執行,自帶輸出功能
- 測試參考代碼:
<?php if(isset($_GET["cmd"])){ system($_GET["cmd"]); } ?> payload:?cmd=ipconfig
exec()
- 說明:能將字符串作為OS命令執行,但無輸出,需要輸出執行結果print。
- exec() 默認只輸出最后一行的數據
- 如果想讓他輸出全部結果,可以加一個參數,即exec(ifconfig,$arr); print_r($arr);,如一句話木馬:<?php exec($_REQUEST[123],$arr);print_r($arr)?>
- 測試參考代碼
<?php if(isset($_GET["cmd"])){ print exec($_GET["cmd"]); } ?> payload:?cmd=whoami
shell_exec()
- 說明:執行命令并以字符串的形式,返回完整的信息,但是函數無回顯,需要輸出執行結果。
- 測試參考代碼
<?php if(isset($_GET["cmd"])){ print shell($_GET["cmd"]); } ?> payload:?cmd=whoami
passthru()
- 說明:執行外部命令,與system()類似,但是該函數會直接將結果輸出,無需輸出執行。
- 測試參考代碼
<?php if(isset($_GET["cmd"])){ passthru($_GET["cmd"]); } ?> payload:?cmd=whoami
popen()
- 說明:能夠執行OS命令,但是該函數并不是返回命令結果,而是返回一個文件指針
- 測試參考代碼
<?php if(isset($_GET["cmd"])){ $cmd=$_GET["cmd"].">>1.txt"; popen($cmd,"r"); } ?> payload:?cmd=whoami
反引號
- 說明:反引號[``]內的字符串,也會被解析成OS命令
- 反引號背后執行的代碼其實是調用了shell_exec(),所以禁用了shell_exec()同樣反引號也無法使用了。
- 測試參考代碼
<?php if(isset($_GET["cmd"])){ $cmd=$_GET["cmd"]; print `$cmd`; } ?> payload:?cmd=whoami
到此這篇關于php網絡安全中命令執行漏洞的產生及本質探究的文章就介紹到這了,更多相關php命令執行漏洞內容請搜索以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持!
標簽:
PHP
排行榜