php文件上傳代碼網(wǎng)絡(luò)攻擊者上傳漏洞與的關(guān)系文件上傳的一種方式介紹php上傳圖片代碼
2022-05-01
一、文件上傳漏洞及關(guān)系
文件上傳漏洞是指網(wǎng)絡(luò)攻擊者將可執(zhí)行文件上傳到服務(wù)器并執(zhí)行。這里上傳的文件可能是木馬、病毒、惡意腳本等。這種攻擊方式是最直接有效的。部分文件上傳漏洞利用的技術(shù)門(mén)檻很低,很容易被攻擊者實(shí)施。
文件上傳漏洞本身就是一個(gè)危害很大的漏洞,利用這個(gè)漏洞被無(wú)限擴(kuò)大。大多數(shù)上傳漏洞被利用后,攻擊者會(huì)留下來(lái)方便后續(xù)訪(fǎng)問(wèn)系統(tǒng)。一旦放置或插入受影響的系統(tǒng),攻擊者就可以通過(guò)這種更簡(jiǎn)單、更隱蔽的方式在服務(wù)中為所欲為。
這里需要注意的是,上傳漏洞的利用經(jīng)常被使用,植入的遠(yuǎn)不止文件上傳。
1 簡(jiǎn)介
是asp、php、jsp或cgi等網(wǎng)頁(yè)文件形式的命令執(zhí)行環(huán)境,也可以稱(chēng)為網(wǎng)頁(yè)后門(mén)。攻擊者入侵網(wǎng)站后,通常會(huì)將這些asp或php后門(mén)文件與網(wǎng)站服務(wù)器的web目錄下的正常網(wǎng)頁(yè)文件混合在一起,然后使用瀏覽器訪(fǎng)問(wèn)這些后門(mén),得到一個(gè)命令執(zhí)行環(huán)境來(lái)控制網(wǎng)站服務(wù)器的用途(可以上傳、下載或修改文件,操作數(shù)據(jù)庫(kù),執(zhí)行任意命令等)。
后門(mén)高度隱蔽,可以輕松通過(guò)防火墻。訪(fǎng)問(wèn)時(shí)不留下系統(tǒng)日志seo優(yōu)化,網(wǎng)站的web日志中只留下部分?jǐn)?shù)據(jù)提交記錄。沒(méi)有經(jīng)驗(yàn)的管理員很難找到入侵的痕跡。攻擊者可以隱藏在普通文件中,修改文件時(shí)間來(lái)增強(qiáng)隱蔽性,也可以使用一些函數(shù)對(duì)進(jìn)行編碼或拼接來(lái)躲避檢測(cè)。除此之外,通過(guò)單句木馬的小馬提交更強(qiáng)大的馬,可以更輕松地通過(guò)應(yīng)用本身的檢測(cè)。它是最常見(jiàn)和最原始的小馬之一,在此基礎(chǔ)上出現(xiàn)了許多變種,例如等等。
2 文件上傳漏洞原理
大部分網(wǎng)站和應(yīng)用系統(tǒng)都有上傳功能,如用戶(hù)頭像上傳、圖片上傳、文檔上傳等。部分文件上傳功能實(shí)現(xiàn)代碼沒(méi)有嚴(yán)格限制用戶(hù)上傳的文件后綴和文件類(lèi)型,使得攻擊者可以將任意 PHP 文件上傳到可通過(guò) Web 訪(fǎng)問(wèn)的目錄,并可以將這些文件傳遞給 PHP 解釋器。在遠(yuǎn)程服務(wù)器上執(zhí)行任意 PHP 腳本。
當(dāng)系統(tǒng)存在文件上傳漏洞時(shí),攻擊者可以將病毒、木馬、其他惡意腳本或包含腳本的圖片上傳到服務(wù)器,這些文件將為攻擊者后續(xù)的攻擊提供便利。根據(jù)具體漏洞,這里上傳的腳本可以是普通后綴的PHP、ASP、JSP腳本,也可以是被篡改后綴的這類(lèi)腳本。
m 當(dāng)上傳的文件是病毒或木馬時(shí),主要用于誘騙用戶(hù)或管理員下載并執(zhí)行或自動(dòng)運(yùn)行;
文件上傳后,攻擊者可以通過(guò)這些網(wǎng)頁(yè)的后門(mén)執(zhí)行命令并控制服務(wù)器;
m 當(dāng)上傳的文件是另一個(gè)惡意腳本時(shí),攻擊者可以直接執(zhí)行該腳本進(jìn)行攻擊;
m 當(dāng)上傳的文件為惡意圖片時(shí),該圖片可能包含腳本,當(dāng)這些圖片被加載或點(diǎn)擊時(shí),該腳本會(huì)靜默執(zhí)行;
m 當(dāng)上傳的文件是偽裝成普通后綴的惡意腳本時(shí),攻擊者可以借助本地文件包含漏洞( File )執(zhí)行該文件。比如將bad.php文件重命名為bad.doc并上傳到服務(wù)器,然后通過(guò)PHP的 , , , 等函數(shù)執(zhí)行。
此處惡意文件上傳主要有以下三個(gè)原因:
m 文件上傳沒(méi)有仔細(xì)檢查。一些應(yīng)用在上傳文件時(shí)根本不進(jìn)行文件格式檢查,使得攻擊者可以直接上傳惡意文件。有些應(yīng)用只在客戶(hù)端檢查php文件上傳代碼,在專(zhuān)業(yè)攻擊者眼里,幾乎所有客戶(hù)端檢查都等于沒(méi)有檢查。攻擊者可以通過(guò)上傳 NC 和斷點(diǎn)等工具輕松繞過(guò)客戶(hù)端檢查。雖然有些應(yīng)用會(huì)在服務(wù)器端進(jìn)行黑名單檢查,但這種情況可能會(huì)被忽略。比如把.php改成.php就可以繞過(guò)檢查;一些應(yīng)用程序在服務(wù)器端執(zhí)行白名單檢查,但忽略截?cái)嘧址?,如果應(yīng)用原本只允許上傳jpg圖片,文件名可以構(gòu)造為xxx.php.jpg,即16進(jìn)制0x00字符,.jpg欺騙應(yīng)用的上傳文件類(lèi)型檢測(cè),但是對(duì)于服務(wù)器來(lái)說(shuō),因?yàn)樽址財(cái)?,最后上傳的文件變成xxx.php。
m 文件上傳后文件名修改處理不當(dāng)。有些應(yīng)用在服務(wù)器端進(jìn)行了完整的黑名單和白名單過(guò)濾,但是在修改上傳文件的文件名時(shí),是稀疏的,允許用戶(hù)修改文件后綴。例如,如果應(yīng)用程序只能上傳.doc文件,攻擊者可以先將.php文件的后綴改為.doc,上傳成功后修改文件名時(shí)再將后綴改為.php。
m 在使用第三方插件時(shí)引入。很多應(yīng)用都引用了具有文件上傳功能的第三方插件。這些插件在實(shí)現(xiàn)文件上傳功能時(shí)可能存在漏洞,攻擊者可以利用這些漏洞進(jìn)行文件上傳攻擊。例如,知名博客平臺(tái)插件豐富,每年都會(huì)在這些插件中發(fā)現(xiàn)大量文件上傳漏洞。
3 文件上傳攻擊示例
如上所述,文件上傳漏洞的原因有很多。下面以第二個(gè)為例,選擇文件上傳漏洞(-db編號(hào)為)詳細(xì)講解利用漏洞的全過(guò)程。
是一個(gè)使用PHP語(yǔ)言和語(yǔ)言開(kāi)發(fā)的內(nèi)容管理系統(tǒng)。 2.2.版本2允許未經(jīng)認(rèn)證的用戶(hù)上傳文件,并且可以修改上傳文件的后綴。雖然系統(tǒng)限制用戶(hù)上傳doc和pdf格式的文件,但是在修改文件名時(shí)出現(xiàn)錯(cuò)誤,讓用戶(hù)可以修改文件后綴。攻擊者可以將惡意文件的后綴改為doc或pdf,上傳成功后將后綴改為php執(zhí)行。
l 上傳文檔后綴
訪(fǎng)問(wèn)系統(tǒng)的文件管理頁(yè)面///.php,上傳一個(gè)正常的doc文件,發(fā)現(xiàn)可以上傳成功。用PHP語(yǔ)言編寫(xiě)后門(mén),也可以從網(wǎng)上下載一個(gè)已有的,將文件后綴改為doc。在這里,把.php后門(mén)改成.doc。
準(zhǔn)備好后,訪(fǎng)問(wèn) .php 文件管理頁(yè)面,將 .doc 上傳到服務(wù)器。如圖1所示,doc后綴已經(jīng)上傳成功。此時(shí)通過(guò)瀏覽器訪(fǎng)問(wèn)doc格式無(wú)法正常執(zhí)行。
圖1.doc上傳成功
l 把后綴改成php
在文件管理頁(yè)面右擊.doc,選擇進(jìn)入修改文件名頁(yè)面,將.doc改為.php,點(diǎn)擊Ok按鈕提交修改結(jié)果(如圖2)。此時(shí)文件的后綴已經(jīng)被php修改成功php文件上傳代碼,由于應(yīng)用程序編碼的執(zhí)行網(wǎng)站開(kāi)發(fā),文件管理頁(yè)面已經(jīng)無(wú)法讀取.php文件,但是我們可以在文件上傳中看到修改后的文件系統(tǒng)服務(wù)器目錄(如圖3所示)。顯示)。
圖2 將.doc修改為.php
圖3 服務(wù)端的后綴改為php
我執(zhí)行
此時(shí)php后綴已經(jīng)在服務(wù)器的上傳目錄中,可以正常解析服務(wù)器環(huán)境。直接通過(guò)瀏覽器訪(fǎng)問(wèn)文件:輸入我們?cè)O(shè)置的密碼登錄這個(gè)頁(yè)面(如圖4)。從圖中我們可以看出,只有通過(guò)這個(gè)文件,攻擊者才能在服務(wù)器上進(jìn)行文件管理、數(shù)據(jù)庫(kù)管理、執(zhí)行系統(tǒng)命令、執(zhí)行任意PHP代碼。這樣,攻擊者可以將額外的文件放置到更深的目錄中,或者將PHP后門(mén)代碼直接添加到系統(tǒng)中已經(jīng)很少使用的php文件中,以防止被系統(tǒng)管理員檢測(cè)到。
圖4 成功進(jìn)入后門(mén)