RCE(Remote Code/Command Execute)遠程代碼/命令執行
漏洞產生原因:在Web應用中開發者為了靈活性,簡潔性等會讓應用調用代碼或者系統命令執行函數去處理,同時沒有考慮用戶的輸入是否可以被控制,造成代碼/系統命令執行漏洞
漏洞產生條件:可控變量,漏洞函數
黑盒測試:測試網站特殊功能點,比如ping等
(推薦)白盒測試:通過代碼審計,審計應用中存在的危險函數是否進行了嚴格過濾
php中命令執行函數:system()、exec()、shell_exec()、pcntl_exec()、popen()、proc_popen()、passthru()
php中代碼執行函數:eval()、assert()、preg_replace()、create_function()、array_map()、call_user_func()、call_user_func_array()、array_filter()、uasort()
漏洞危害:
高危:直接獲取服務器權限,獲取敏感數據,文件,寫入惡意文件getshell
漏洞利用:
windows下管道符
“;”:執行完前面的語句再執行后面的語句。 “|”:顯示后面語句的執行結果。 “||”:當前面的語句執行出錯時,執行后面的語句。 “&”:兩條命令都執行,如果前面的語句為假則執行執行后面的語句,前面的語句可真可假。 “&&”:如果前面的語句為假則直接出錯,也不執行后面的語句,前面的語句為真則兩條命令都執行,前面的語句只能為真。
linux下管道符
“;”:執行完前面的語句再執行后面的語句。 “|”:顯示后面語句的執行結果。 “||”:當前面的語句執行出錯時,執行后面的語句。 “&”:兩條命令都執行,如果前面的語句為假則執行執行后面的語句,前面的語句可真可假。 “&&”:如果前面的語句為假則直接出錯,也不執行后面的語句,前面的語句為真則兩條命令都執行,前面的語句只能為真
漏洞防范:
在進入危險函數前進行嚴格的檢測和過濾
盡量不要使用命令執行函數