摘要:代碼審計(jì)一文件上傳概述在網(wǎng)站的運(yùn)營過程中,不可避免地要對網(wǎng)站的某些頁面或內(nèi)容進(jìn)行更新,這時(shí)便需要使用到網(wǎng)站上的文件上傳功能。
PHP 代碼審計(jì):(一)文件上傳 0x00 概述
在網(wǎng)站的運(yùn)營過程中,不可避免地要對網(wǎng)站的某些頁面或內(nèi)容進(jìn)行更新,這時(shí)便需要使用到網(wǎng)站上的文件上傳功能。如果不對被上傳文件進(jìn)行限制,或限制被繞過,該功能便有可能會被利用于上傳可執(zhí)行文件、腳本到服務(wù)器上,今兒進(jìn)一步導(dǎo)致服務(wù)器淪陷。
由此可見,了解上傳漏洞的前提是了解文件上傳這個功能,以及其中的原理。如果只知道有文件上傳這個東西,以及可能會出現(xiàn)漏洞,那么跟不知道一個樣。
具體來說,一些用戶上傳的文件還是PHP腳本,這些PHP腳本上傳到服務(wù)器上能夠被用戶通過服務(wù)器直接訪問,其中包含的一些命令就會被執(zhí)行。文件上傳的功能就是如此強(qiáng)大,如果你的網(wǎng)站在文件上傳方面控制得不夠好,就會淪陷。
導(dǎo)致文件上傳漏洞的原因較多,主要包含:
服務(wù)器配置不當(dāng)
開源編輯器上傳漏洞
本地文件上傳限制被繞過
過濾不嚴(yán)或被繞過
文件解析漏洞導(dǎo)致文件執(zhí)行
文件路徑截?cái)?/p>
...
其中,開源編輯器漏洞和文件上傳漏洞原理一樣,只不過多了一個編輯器。上傳的時(shí)候還是會把我們的腳本上傳上去。
過濾不嚴(yán)這個非常常見,后面的例子中我們會看到。比如大小寫問題,網(wǎng)站只驗(yàn)證是否是小寫,我們就可以把后綴名改成大寫。
然后是文件解析漏洞。比如 Windows 系統(tǒng)會涉及到這種情況:文件名為1.php;.jpg,IIS 6.0 可能會認(rèn)為它是jpg文件,但是執(zhí)行的時(shí)候會以php文件來執(zhí)行。我們就可以利用這個解析漏洞來上傳。再比如 Linux 中有一些未知的后綴,比如a.php.xxx。由于 Linux 不認(rèn)識這個后綴名,它就可能放行了,攻擊者再執(zhí)行這個文件,網(wǎng)站就有可能被控制。
最后是路徑截?cái)啵褪窃谏蟼鞯奈募惺褂靡恍┨厥獾姆?,使文件在上傳時(shí)被截?cái)?。比?b>a.php%00.jpg,這樣在網(wǎng)站中驗(yàn)證的時(shí)候,會認(rèn)為后綴是jpg,但是保存到硬盤的時(shí)候會被截?cái)酁?b>a.php,這樣就是直接的php文件了。
常用來截?cái)嗦窂降淖址牵?/p>