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