文件上傳漏洞之.htaccess

0x00 前言

.htaccess文件(“分佈式配置文件”)提供了針對目錄改變配置的方法, 即,在一個特定的文檔目錄中放置一個包含一個或多個指令的文件, 以作用於此目錄及其所有子目錄。作爲用戶,所能使用的命令將受到限制。管理員可以通過Apache的AllowOverride指令來設置。

概述來說,htaccess文件是Apache服務器中的一個配置文件,它負責相關目錄下的網頁配置。通過htaccess文件,可以幫我們實現:網頁301重定向、自定義404錯誤頁面、改變文件擴展名、允許/阻止特定的用戶或者目錄的訪問、禁止目錄列表、配置默認文檔等功能。


0x01 重寫解析規則繞過黑名單

原理:上傳覆蓋.htaccess文件,重寫解析規則,將上傳的圖片馬以腳本方式解析
具體實現:

1、上傳.htaccess文件至服務器上傳目錄,此時apache在解析該目錄下的php時將按照文件要求。只要文件名匹配到所定義的字符串,就會將該文件當作php解析。

<FilesMatch "shana">
SetHandler application/x-httpd-php
</FilesMatch>

2、上傳.htaccess文件設置的關鍵字的文件名,即上傳一個黑名單沒有過濾的隨意後綴名文件,但文件名中一定要包含shana,如"shana.jpg",內容爲一句話木馬。此時"shana.jpg"會被Apache當作php解析。


0x02 .htaccess文件常用場景:

htaccess文件應該被用在內容提供者需要針對特定目錄改變服務器的配置而又沒有root權限的情況下。

如果服務器管理員不願意頻繁修改配置,則可以允許用戶通過.htaccess文件自己修改配置,尤其是ISP在同一個機器上運行了多個用戶站點,而又希望用戶可以自己改變配置的情況下。

雖然如此,但一般情況下都應該儘可能地避免使用.htaccess文件。任何希望放在.htaccess文件中的配置,都可以放在主配置文件的段中,而且更高效。

在/w1/w2/www目錄下的.htaccess文件中放置指令,與在主配置文件httpd.conf中<Directory /w1/w2/www>段中放置相同指令,是完全等效的。

/w1/w2/www目錄下的.htaccess文件的內容:

AddType text/example .exm

等效於httpd.conf文件中:

<Directory /w1/w2/www>
AddType text/example .exm
</Directory>

但將配置放在主配置文件中更加高效,因爲只需要在Apache啓動時讀取一次,而不是在每次文件被請求時都讀取。

在配置文件中將AllowOverride設置爲none,可以完全禁止使用.htaccess文件:AllowOverride None

0x03 避免使用.htaccess文件有兩個主要原因:

1、性能

如果AllowOverride啓用了.htaccess文件,則Apache需要在每個目錄中查找.htaccess文件。因此,無論是否真正用到,啓用.htaccess都會導致性能的下降。且對於每一個請求,都需要讀取一次.htaccess文件。

Apache必須在所有上級的目錄中查找.htaccess文件,以使所有有效的指令都起作用,所以,如果請求/w1/w2/www中的頁面,Apache必須查找以下文件:
/.htaccess、/w1/.htaccess、/w1/w2/.htaccess、/w1/w2/www/.htaccess
共要訪問4個額外的文件,即使這些文件都不存在。而這可能僅僅由於允許根目錄"/"使用.htaccess ,雖然這種情況並不多。

2、安全

允許用戶自己修改服務器的配置,這可能會導致某些意想不到的修改,且如果給予用戶較少的特權而不能滿足其需要,則會帶來額外的技術支持請求。所以,必須明確地告訴用戶已經給予他們的權限,說明AllowOverride設置的值,並引導他們參閱相應的說明,以免日後生出許多麻煩。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章