遠程命令執行漏洞,用戶(hù)通過(guò)瀏覽器提交執行命令,由于服務(wù)器端沒(méi)有針對執行函數做過(guò)濾,導致在沒(méi)有指定絕對路徑的情況下就執行命令,可能會(huì )允許攻擊者通過(guò)改變 $PATH 或程序執行環(huán)境的其他方面來(lái)執行一個(gè)惡意構造的代碼。

漏洞原理

由于開(kāi)發(fā)人員編寫(xiě)源碼,沒(méi)有針對代碼中可執行的特殊函數入口做過(guò)濾,導致客戶(hù)端可以提交惡意構造語(yǔ)句提交,并交由服務(wù)器端執行。命令注入攻擊中WEB服務(wù)器沒(méi)有過(guò)濾類(lèi)似system(),eval(),exec()等函數是該漏洞攻擊成功的最主要原因。

漏洞實(shí)例

$log_string =$_GET[‘log’];

system("echo \"".date("Y-m-d H:i:s ")." ".$log_string."\" >> /logs/".$pre."/".$pre.".".date("Y-m-d").".log");}

?>

惡意用戶(hù)只需要構造xxx.php?log='id'形式的URL,即可通過(guò)瀏覽器在遠程服務(wù)器上執行任意系統命令

解決方案

·建議假定所有輸入都是可疑的,嘗試對所有輸入提交可能執行命令的構造語(yǔ)句進(jìn)行嚴格的檢查或者控制外部輸入,系統命令執行函數的參數不允許外部傳遞。

·不僅要驗證數據的類(lèi)型,還要驗證其格式、長(cháng)度、范圍和內容。

·不要僅僅在客戶(hù)端做數據的驗證與過(guò)濾,關(guān)鍵的過(guò)濾步驟在服務(wù)端進(jìn)行。

·對輸出的數據也要檢查,數據庫里的值有可能會(huì )在一個(gè)大網(wǎng)站的多處都有輸出,即使在輸入做了編碼等操作,在各處的輸出點(diǎn)時(shí)也要進(jìn)行安全檢查。

·在發(fā)布應用程序之前測試所有已知的威脅。