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