Apache解析漏洞


多解析特性

在Apache1.x,2.x中Apache 解析文件的規則是從右到左開始判斷解析,如果后綴名為不可識別文件解析,就再往左判斷。因此對於apache而言,一個test.php.qwea文件依然會將其解析為php。如果所有的后綴apache都不認識,那么就會把該文件當做默認的類型,一般來說默認類型就是text/plain。
哪些后綴apache認識呢?在window中的認識的后綴都記錄在/apche/conf/mine.types中,在Ubuntu下在/etc/mime.types,

多解析特性帶來的危害

網站如果存在用戶上傳文件的功能那么會檢查用戶上傳的文件的后綴,但是如果后端代碼只看文件名最后面一個點后面的格式,比如code.php.qwe,按程序執行會檢查到.qwe,不是黑名單里面的格式,那么就會允許上傳,但在Apache解析的時候以.php為准,就會把改文件當成php解析執行。

處理方法

我們的處理方式是:后綴驗證盡量使用白名單的方式,這樣即使使用不存在的后綴名,也無法繞過。

看test.jpg.aaa和aaa.php.xxx如何執行

瀏覽器為何認為test.jpg.aaa是圖片呢?aaa可不是圖片文件的后綴。這是因為服務器的響應HTTP頭中的Content-Type字段值為image/jpeg,瀏覽器看到image/jpeg,便知這是圖片文件。這說明服務器(此處即Apache)是把test.jpg.aaa當做圖片的,也說明,前面分析的Apache的多后綴處理是沒有錯的。
aaa.php.xxx為何沒有被作為php代碼執行呢?Apache看到文件aaa.php.xxx,按照多后綴名的解析規則,認為該文件是php程序文件,把該文件作為php程序文件處理。怎么處理呢?交給php解釋器,Apache本身並不懂php。而php解釋器卻有着和Apache不同的后綴解析規則,可能只認最后一個后綴,故而認為aaa.php.xxx不是php程序文件,拒絕執行。在我的測試環境中,php以模塊(module)的模式工作於Apache的領導下。這種模式下php接受到領導Apache分配的任務——aaa.php.xxx,一看,不是php程序文件,沒法執行,但也沒有報錯,而是返回了文件內容本身。php還可以以FASTCGI的模式工作於Apache中,此種模式下php遇到類似aaa.php.xxx這種不是php程序的文件,會觸發500錯誤。Apache配置文件中會有

.+.ph(p[345]?|t|tml)

此類的正則表達式,被當php程序執行的文件名要符合正則表達式

.htaccess

要想使.htaccess文件生效,需要兩個條件,一是在Apache的配置文件中寫上:

  AllowOverride All

若這樣寫則.htaccess不會生效:

  AllowOverride None

二是Apache要加載mod_Rewrite模塊。加載該模塊,需要在Apache的配置文件中寫上:

  LoadModule rewrite_module /usr/lib/apache2/modules/mod_rewrite.so

若是在Ubuntu中,可能還需要執行命令:

  sudo a2enmod rewrite

配置完后需要重啟Apache。
需要注意Apache可能有多個配置文件,后加載的配置文件會覆蓋先加載的配置文件中的配置。所以在某個配置文件中將AllowOverride設置成All,若是其后加載的某個配置文件中AllowOverride的設置是None,則也是沒有用的。一般來說,先加載httpd.conf,再加載conf.d/中的配置文件,最后加載sites-enabled/中的配置文件。
.htaccess文件可以配置很多事情,如是否開啟站點的圖片緩存、自定義錯誤頁面、自定義默認文檔、設置WWW域名重定向、設置網頁重定向、設置圖片防盜鏈和訪問權限控制。但我們這里只關心.htaccess文件的一個作用——MIME類型修改。如在.htaccess文件中寫入:

  AddType application/x-httpd-php xxx

就成功地使該.htaccess文件所在目錄及其子目錄中的后綴為.xxx的文件被Apache當做php文件。另一種寫法是:

  <FilesMatch "shell.jpg">
    SetHandler application/x-httpd-php
  </FilesMatch>

該語句會讓Apache把shell.jpg文件解析為php文件。

參考鏈接

https://blog.csdn.net/wn314/article/details/77074477
https://www.smi1e.top/文件解析漏洞總結/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM