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

漏洞原理

由于開發(fā)人員編寫源碼,沒有針對(duì)代碼中可執(zhí)行的特殊函數(shù)入口做過濾,導(dǎo)致客戶端可以提交惡意構(gòu)造語句提交,并交由服務(wù)器端執(zhí)行。命令注入攻擊中WEB服務(wù)器沒有過濾類似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");}

?>

惡意用戶只需要構(gòu)造xxx.php?log='id'形式的URL,即可通過瀏覽器在遠(yuǎn)程服務(wù)器上執(zhí)行任意系統(tǒng)命令

解決方案

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

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

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

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

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