PHP是最受歡迎的Web服務器端腳本語言之一,它具有很多的優點,如易于學習、運行穩定、開發效率高、代碼簡潔等。但是,PHP腳本也存在一些安全風險,其中之一是Shell Injection攻擊,攻擊者可以利用此漏洞在Web服務器中執行惡意代碼。為了應對這種情況,PHP Non-Shell是一種非常有用的工具。
PHP Non-Shell是一種PHP腳本版的WebShell,[1]它可以用于測試和修復Web應用程序中的Shell Injection漏洞,而無需上傳真正的WebShell。[2]它的工作原理是將PHP代碼作為參數直接傳遞給被測應用程序的eval()函數。被測應用程序會像處理未經處理的用戶輸入一樣將代碼執行,因此,如果代碼包含有Shell特殊字符(如$、|、;等),則將最終導致Shell代碼執行的危險情況。
為了避免這種危險,我們可以使用PHP Non-Shell來模擬WebShell的行為,同時避免上傳真正的WebShell。下面是一個PHP Non-Shell腳本的示例:
".htmlspecialchars(shell_exec($cmd)).""; ?>
通過訪問http://hostname/nonshell.php?c=whoami,便可以獲得當前Apache服務運行的用戶身份,而不需要實際上傳一個WebShell。這種方法的優點在于,它不需要將惡意代碼上傳到受攻擊的服務器上,從而避免了可能會被管理員發現和刪除的問題。
PHP Non-Shell還可以根據不同的需求進行調整,例如添加自定義的PHP函數和代碼來滿足特定的應用需求。例如,可以添加一個send_mail函數,使測試人員可以在測試期間向自己發送一些調試信息。下面是更改后的PHP Non-Shell腳本:
".htmlspecialchars($result).""; } ?>
通過訪問http://hostname/nonshell.php?c=send_mail('test@test.com','Test','Hello World');,我們就可以在測試期間收到郵件。
綜上所述,PHP Non-Shell是一種非常實用的PHP腳本版WebShell,可以用于測試和修復Shell Injection漏洞,而無需上傳真正的WebShell。PHP Non-Shell可以根據不同的需求進行調整,例如添加自定義的PHP函數和代碼來滿足特定的應用需求。為Web應用程序的安全和性能提供了有力的支持。
參考文獻:
[1] PHP Non-Shell. [Online]. Available: https://github.com/dd32/php-non-shell
[2] "PHP Non-Shell: An Unintentionally-Implemented Web Shell", BlackHat USA 2019, Tony Gambacorta. [Online]. Available: https://www.blackhat.com/us-19/briefings/schedule/index.html#php-non-shell-an-unintentionally-implemented-web-shell-16588