在網(wǎng)絡(luò)安全領(lǐng)域,我們經(jīng)常會(huì)看到或聽(tīng)到一些比較陌生的專業(yè)術(shù)語(yǔ),比如“命令注入”,那么什么是命令注入?如何形成的?具體內(nèi)容請(qǐng)看下文。
什么是命令注入?
Command Injection,即命令注入攻擊,是指由于嵌入式應(yīng)用程序或者web應(yīng)用程序?qū)τ脩籼峤坏臄?shù)據(jù)過(guò)濾不嚴(yán)格,導(dǎo)致黑客可以通過(guò)構(gòu)造特殊命令字符串的方式,將數(shù)據(jù)提交至應(yīng)用程序中,并利用該方式執(zhí)行外部程序或系統(tǒng)命令實(shí)施攻擊,非法獲取數(shù)據(jù)或者網(wǎng)絡(luò)資源等。
在命令注入的漏洞中,最為常見(jiàn)的是PHP的命令注入。PHP命令注入攻擊存在的主要原因是web應(yīng)用程序員在應(yīng)用PHP語(yǔ)言中一些具有命令執(zhí)行功能的函數(shù)時(shí),對(duì)用戶提交的數(shù)據(jù)內(nèi)容沒(méi)有進(jìn)行嚴(yán)格的過(guò)濾就帶入函數(shù)中執(zhí)行而造成的。例如,當(dāng)黑客提交的數(shù)據(jù)內(nèi)容為向網(wǎng)站目錄寫(xiě)入PHP文件時(shí),就可以通過(guò)該命令注入攻擊漏洞寫(xiě)入一個(gè)PHP后門文件,進(jìn)而實(shí)施進(jìn)一步的滲透攻擊。
原理:Web應(yīng)用在調(diào)用這些函數(shù)執(zhí)行系統(tǒng)命令的時(shí)候,在沒(méi)有做好過(guò)濾用戶輸入的情況下,如果用戶將自己的輸入作為系統(tǒng)命令的參數(shù)拼接到命令行中,就會(huì)造成命令注入的漏洞。
命令注入攻擊是如何形成的?
嵌入式應(yīng)用程序或者web應(yīng)用程序有時(shí)需要調(diào)用一些系統(tǒng)命令的函數(shù),如Linux C中的system(),exec(),shell-exec()等等,當(dāng)用戶能夠控制這些函數(shù)中的參數(shù)時(shí),就可以將惡意參系統(tǒng)命令拼接到正常命令中,從而造成命令注入攻擊設(shè)備系統(tǒng)。
命令注入的形成需要如下三個(gè)條件:
1、使用了內(nèi)部調(diào)用shell的函數(shù):system(),exec()等。
2、將外界傳入的參數(shù)沒(méi)有足夠的過(guò)濾,直接傳遞給內(nèi)部調(diào)用shell的函數(shù)。
3、參數(shù)中shell的元字符沒(méi)有被轉(zhuǎn)義。
危害:繼承嵌入式應(yīng)用程序或者web應(yīng)用程序的權(quán)限去執(zhí)行系統(tǒng)命令讀寫(xiě)執(zhí)行文件,導(dǎo)致系統(tǒng)有可能會(huì)被惡意攻擊或者泄露系統(tǒng)用戶信息。