php測(cè)速代碼分清命令執(zhí)行跟代碼執(zhí)行的區(qū)別。(一)執(zhí)行php代碼轉(zhuǎn)易語(yǔ)言代碼執(zhí)行
2022-10-18
首先要區(qū)分命令執(zhí)行和代碼執(zhí)行的區(qū)別。
區(qū)別:命令執(zhí)行只針對(duì)系統(tǒng)命令,而遠(yuǎn)程代碼執(zhí)行是針對(duì)編程代碼,兩者不能互相替代。
命令執(zhí)行
當(dāng)應(yīng)用程序需要調(diào)用一些外部程序來(lái)處理內(nèi)容時(shí)php測(cè)速代碼,它會(huì)使用一些執(zhí)行系統(tǒng)命令的函數(shù)。
漏洞原因:命令執(zhí)行漏洞是在源碼中直接調(diào)用了執(zhí)行系統(tǒng)命令的函數(shù),沒(méi)有做過(guò)濾,導(dǎo)致執(zhí)行命令時(shí)沒(méi)有指定絕對(duì)路徑。
比如命令執(zhí)行漏洞,權(quán)限非常大。
如:php中的函數(shù),exec函數(shù),函數(shù),函數(shù)都可以執(zhí)行系統(tǒng)命令。
() 輸出并返回結(jié)果。
exec() 不輸出結(jié)果,而是返回最后一行結(jié)果。所有結(jié)果都可以存儲(chǔ)在返回的數(shù)組中。
() 只調(diào)用命令,并將命令的結(jié)果直接輸出到標(biāo)準(zhǔn)輸出設(shè)備。
(), () 不會(huì)直接返回執(zhí)行結(jié)果,而是返回一個(gè)文件指針。
下面是我用虛擬機(jī)模擬的php環(huán)境。
在調(diào)用()函數(shù)的虛擬機(jī)根目錄下寫(xiě)一個(gè)php文件,參數(shù)為cmd,我們本地測(cè)試一下。
好了,可以看到我們可以通過(guò)cmd參數(shù)在虛擬機(jī)上本地執(zhí)行系統(tǒng)命令php測(cè)速代碼,這就是命令執(zhí)行漏洞的原理。
代碼執(zhí)行漏洞
應(yīng)用程序調(diào)用了一些可以將字符串轉(zhuǎn)換為代碼的函數(shù)(如php中的eval),而不考慮用戶(hù)是否控制字符串,這會(huì)導(dǎo)致代碼執(zhí)行漏洞。
php:eval()、()、()、()等。
:評(píng)估
:, 評(píng)估
: 執(zhí)行
下面還是使用php環(huán)境來(lái)演示代碼執(zhí)行:
使用 eval() 函數(shù)執(zhí)行 php 代碼,并使用變量接受 get、post 和傳遞參數(shù)。
本地測(cè)試如下:
你可以獲得php探針,這也非常有用。這里展示了最常見(jiàn)的。
常用詞木馬就是利用代碼執(zhí)行功能來(lái)完成操作。
文件包含漏洞
簡(jiǎn)介:當(dāng)服務(wù)器執(zhí)行一個(gè)PHP文件時(shí),可以通過(guò)file 函數(shù)加載另一個(gè)文件中的PHP代碼,在執(zhí)行PHP時(shí),這將為開(kāi)發(fā)者節(jié)省大量時(shí)間。該文件包含可以讀取系統(tǒng)中敏感文件、源代碼文件等的漏洞。它還可能導(dǎo)致惡意代碼執(zhí)行。
漏洞原因:包含函數(shù)的文件加載的參數(shù)沒(méi)有經(jīng)過(guò)過(guò)濾或嚴(yán)格定義,可以被用戶(hù)控制,包括其他惡意文件,導(dǎo)致執(zhí)行意外代碼。
主要包括本地文件包含和遠(yuǎn)程文件包含兩種形式
PHP中有四種類(lèi)型的文件包含函數(shù):
();
();
();
();
就是在對(duì)它執(zhí)行代碼的時(shí)候加載文件網(wǎng)站模板,只有在出錯(cuò)的時(shí)候才給出警告,然后繼續(xù)執(zhí)行;
只要程序執(zhí)行完畢,就會(huì)立即調(diào)用該文件,出錯(cuò)時(shí)會(huì)輸出錯(cuò)誤信息,終止腳本的執(zhí)行;
一般用于文件頭包含文件、數(shù)據(jù)庫(kù)等文件,一般用于包含html模板文件;
如果讀取的內(nèi)容是php小程序開(kāi)發(fā),則內(nèi)容以php執(zhí)行,如果不是php,則讀取文件內(nèi)容(用于讀取/etc/等配置文件的敏感信息)。
本地包含:
下面是我的虛擬機(jī)搭建的用于重現(xiàn)漏洞的php環(huán)境:
可以看到我們寫(xiě)的代碼,直接帶入file參數(shù)的功能,不做任何過(guò)濾,我們可以控制file參數(shù)進(jìn)行惡意操作。
好的,讓我們?cè)诒镜販y(cè)試一下。我在虛擬機(jī)c盤(pán)下新建了一個(gè)txt文件,把語(yǔ)句寫(xiě)在里面。
可以看到,包含文件中的 php 代碼會(huì)在 php.ini 中執(zhí)行。
注意:../ 是跳轉(zhuǎn)到父目錄。./ 是當(dāng)前目錄。
然后,現(xiàn)在在E盤(pán)下新建一個(gè)txt文件,在里面寫(xiě)入飛竹。
可以看出,如果不是php的內(nèi)容,可以直接讀取,那么就可以遍歷讀取其他敏感信息內(nèi)容。win&下的敏感信息路徑很多,網(wǎng)上其他大佬收集的,就不一一列舉了。嘆了口氣。
遠(yuǎn)程包含漏洞
如果 PHP 的配置文件和設(shè)置為 ON,/etc. 函數(shù)可以加載遠(yuǎn)程文件。如果遠(yuǎn)程文件沒(méi)有經(jīng)過(guò)嚴(yán)格過(guò)濾,導(dǎo)致執(zhí)行惡意文件,這就是遠(yuǎn)程文件包含漏洞。
或者使用上面寫(xiě)的函數(shù)的php文件來(lái)完成這個(gè)遠(yuǎn)程包含操作。
我在另一個(gè)虛擬服務(wù)器上的網(wǎng)站根目錄下新建了一個(gè).txt,并寫(xiě)入了read()信息。
也可以直接寫(xiě)一個(gè)php后綴的文件。
好的,我們?cè)诒镜販y(cè)試一下,如圖:
可以看到加載成功的文件。
本文主要講解php漏洞形成的原因,方便新手學(xué)習(xí)理解。喜歡的伙伴記得加我們的訂閱號(hào)~解鎖更多技能