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

漏洞原理

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

漏洞實(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ù)只需要構(gòu)造xxx.php?log='id'形式的URL,即可通過(guò)瀏覽器在遠(yuǎn)程服務(wù)器上執(zhí)行任意系統(tǒng)命令

解決方案

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

·不僅要驗(yàn)證數(shù)據(jù)的類(lèi)型,還要驗(yàn)證其格式、長(zhǎng)度、范圍和內(nèi)容。

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

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

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