您好,登錄后才能下訂單哦!
通用的命令執行漏洞防御方法通常是使用兩個函數:EscapeShellCmd和EscapeShellArg,下面分別來分析這兩個函數。
EscapeShellCmd()函數可以把一個字符串中所有可能瞞過Shell而去執行另外一個命令的字符轉義,比如管道符(|)、分號(;)、重定向(>)、從文件讀入(<)等。
下面我們來測試一下這個函數是否管用,以low級別的命令執行漏洞為例,對應的網頁文件為D:\AppServ\www\dvwa\vulnerabilities\exec\source\low.php,對文件進行如下圖所示的修改,在ping命令之前加上EscapeShellCmd函數進行過濾。
將修改保存之后,轉換到low級別測試,發現我們之前的那些命令都不管用了。
接下來再分析一下EscapeShellArg()函數,這個函數是專門用來處理命令的參數的,它在給定的字符串兩邊加上單引號,并把字符串中的單引號轉義,這樣這個字符串就可以安全地作為命令的參數。
我們同樣對網頁進行修改,注意,EscapeShellArg()函數是專門對命令參數進行處理的。
保存修改之后,返回去進行測試,發現之前的命令同樣也不管用了。
事實證明,這兩個函數還是很管用的。綜合比較一下,EscapeShellCmd函數是基于黑名單的,而黑名單都不是完全可靠的,***總有方法繞過,所以從這個意義上來說EscapeShellArg相對要更安全一些。
下面再分析一下如何挖掘命令執行漏洞,方法其實很簡單,就是從代碼中查找那些可以執行系統命令的函數。如果這些函數中所執行的命令參數是由用戶輸入的,而且沒有經過任何的過濾,那么便有可能存在漏洞。
PHP中可以調用系統命令的函數主要包括:
exec system popen passthru proc_open shell_exec |
在進行代碼搜索時,仍然可以借助于之前介紹過的閃電文件搜索軟件。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。