80电影天堂网,欢乐斗地主经典老版,精品人妻无码一区二区三区三级,中国xxxxxl19免费视频

返回首頁

網站導航
資訊首頁> 網站公告 >產品資訊 > 匯總服務器對文件的解析還存在哪些漏洞

    匯總服務器對文件的解析還存在哪些漏洞

    產品資訊2018年07月30日
    分享
      前面我們說到了黑客入侵(黑客是如何攻破防火墻入侵電腦的?),主要是因為找到了我們服務器的文件解析漏洞。文件解析漏洞是指 Web 容器(Apache、nginx、iis 等)在解析文件時出現了漏洞,以其他格式執行出腳本格式的效果。從而,黑客可以利用該漏洞實現非法文件的解析。那么,比較常見的文件解析漏洞有哪些?我們應該如何防護呢?這里河姆渡匯總了一些服務器對文件的解析常見漏洞,希望能對您有幫助。
      
      匯總服務器對文件的解析還存在哪些漏洞
      
      一、Apache解析漏洞
      
      1、多后綴
      
      在 Apache1.x,2.x 中 Apache 解析文件的規則是從右到左開始判斷解析, 如果后綴名為不可識別文件解析, 就再往左判斷。因此可以上傳一個 test.php.qwea 文件繞過驗證且服務器依然會將其解析為 php。Apache 能夠認識的文件在 mime.types 文件里:
      
     匯總服務器對文件的解析還存在哪些漏洞
      
      修復方案:
      
      后綴驗證盡量使用白名單的方式,這樣即使使用不存在的后綴名,也無法繞過。
      
      2、配置問題導致漏洞
      
      1、如果在 Apache 的 conf 里有這樣一行配置 AddHandler php5-script .php 這時只要文件名里包含 .php  即使文件名是 test2.php.jpg 也會以 php 來執行。
      
      2、如果在 Apache 的 conf 里有這樣一行配置 AddType application/x-httpd-php .jpg即使擴展名是 jpg,一樣能以 php 方式執行。
      
      修復方案
      
      1、apache 配置文件,禁止 .php. 這樣的文件執行,配置文件里面加入
      
      <Files~“.(php.|php3.)”>
      
      Order Allow,Deny
      
      Deny from all
      
      Files>
      
      2、用偽靜態能解決這個問題,重寫類似.php.*這類文件,打開 apache 的 httpd.conf 找到LoadModule rewrite_module modules/mod_rewrite.so把 # 號去掉,重啟 apache, 在網站根目錄下建立 .htaccess 文件,代碼如下:
      
      <IfModulemod_rewrite.c>
      
      RewriteEngine On
      
      RewriteRule .(php.|php3.) /index.php
      
      RewriteRule .(pHp.|pHp3.) /index.php
      
      RewriteRule .(phP.|phP3.) /index.php
      
      RewriteRule .(Php.|Php3.) /index.php
      
      RewriteRule .(PHp.|PHp3.) /index.php
      
      RewriteRule .(PhP.|PhP3.) /index.php
      
      RewriteRule .(pHP.|pHP3.) /index.php
      
      RewriteRule .(PHP.|PHP3.) /index.php
      
      IfModule>
      
      3、罕見后綴
      
      Apache 配置文件中會有.+.ph(p[345]?|t|tml)此類的正則表達式,被當 php 程序執行的文件名要符合正則表達式,否則就算 Apache 把某文件當 php 程序,php 自己不認它,也是無用。
      
      也就是說php3,php4,php5,pht,phtml也是可以被解析的。
      
      匯總服務器對文件的解析還存在哪些漏洞
      
      我在本地測試只有php3可以,應該是配置文件的問題,不過我并沒有找到對應的正則表達式配置文件。
      
      .htaccess
      
      一般來說,配置文件的作用范圍都是全局的,但 Apache 提供了一種很方便的、可作用于當前目錄及其子目錄的配置文件—— .htaccess(分布式配置文件)要想使 .htaccess 文件生效,需要兩個條件:一是在 Apache 的配置文件中寫上:AllowOverrideAll若這樣寫則 .htaccess 不會生效:AllowOverrideNone
      
      二是 Apache 要加載 mod_Rewrite 模塊。加載該模塊,需要在 Apache 的配置文件中寫上:LoadModulerewrite_module/usr/lib/apache2/modules/mod_rewrite.so若是在 Ubuntu 中,可能還需要執行命令:sudoa2enmod rewrite配置完后需要重啟 Apache。
      
      .htaccess 文件可以配置很多事情,如是否開啟站點的圖片緩存、自定義錯誤頁面、自定義默認文檔、設置 WWW 域名重定向、設置網頁重定向、設置圖片防盜鏈和訪問權限控制。但我們這里只關心 .htaccess 文件的一個作用—— MIME 類型修改。
      
      如在 .htaccess 文件中寫入:
      
      AddTypeapplication/x-httpd-phpxxx
      
      就成功地使該 .htaccess 文件所在目錄及其子目錄中的后綴為 .xxx 的文件被 Apache 當做 php 文件。
      
      另一種寫法是:
      
      <FilesMatch"shell.jpg">
      
      SetHandlerapplication/x-httpd-php
      
      FilesMatch>
      
      該語句會讓 Apache 把 shell.jpg 文件當作 php 文件來解析。
      
      二、Nginx 解析漏洞
      
      1、PHP CGI 解析漏洞
      
      Fastcgi 協議分析 && PHP-FPM 未授權訪問漏洞 && Exp 編寫
      
      https://www.leavesongs.com/PENETRATION/fastcgi-and-php-fpm.html
      
      匯總服務器對文件的解析還存在哪些漏洞
      
      當訪問 xx.com/phpinfo.jpg/1.php 這個 URL 時,$fastcgi_script_name 會被設置為phpinfo.jpg/1.php,然后構造成 SCRIPT_FILENAME 傳遞給 PHP CGI。
      
      Nginx 默認是以 CGI 的方式支持 PHP 解析的,普遍的做法是在 Nginx 配置文件中通過正則匹配設置 SCRIPT_FILENAME。
      
      當訪問 xx.com/phpinfo.jpg/1.php 這個 URL 時,$fastcgi_script_name 會被設置為phpinfo.jpg/1.php,然后構造成 SCRIPT_FILENAME 傳遞給 PHP CGI,但是 PHP 為什么會接受這樣的參數,并將 phpinfo.jpg 作為 PHP 文件解析呢?
      
      這就要說到 fix_pathinfo 這個選項了。 如果開啟了這個選項,那么就會觸發在 PHP 中的如下邏輯:
      
      PHP 會認為 SCRIPT_FILENAME 是 phpinfo.jpg,而 1.php 是 PATH_INFO,所以就會將 phpinfo.jpg 作為 PHP 文件來解析了
      
      www.xxxx.com/UploadFiles/image/1.jpg/1.php
      
      www.xxxx.com/UploadFiles/image/1.jpg/%20\0.php
      
      另外一種手法:上傳一個名字為 test.jpg,以下內容的文件:
      
      PHPfputs(fopen('shell.php','w'),'');?>
      
      然后訪問 test.jpg/.php, 在這個目錄下就會生成一句話木馬 shell.php
      
      這個解析漏洞其實是 PHP CGI 的漏洞,在 PHP 的配置文件中有一個關鍵的選項 cgi.fix_pathinfo 默認是開啟的,當 URL 中有不存在的文件,PHP 就會向前遞歸解析。
      
      匯總服務器對文件的解析還存在哪些漏洞
      
      這個往前遞歸的功能原本是想解決 /info.php/test 這種 URL,能夠正確解析到 info.php。
      
      在 Nginx 配置 fastcgi 使用 php 時,會存在文件類型解析問題。其實可以說它與 Nginx 本身關系不大,Nginx 只是作為一個代理把請求轉發給 fastcgi Server,PHP 在后端處理這一切。因此在其他 fastcgi 環境下,PHP 也存在此問題,只是使用 Nginx 作為 Web Server 時,一般使用 fastcgi 的方式調用腳本解釋器,這種使用方式最為常見。
      
      防御方法
      
      1)使用 Apache、IIS 等成熟久經考驗的服務器軟件,在動態語言的支持上,Nginx 還是太年經了。你應該也偶爾會見到有些網站掛掉了顯示個 nginx 錯誤出來,卻極少見網站掛掉顯示不是 nginx 的(未備案,過期欠費 等等除外)。
      
      2)上傳目錄、靜態資源(CSS/JS/圖片等)目錄,都設置好屏蔽 PHP 執行權限。例如使用 Apache 服務器的
      
      在相應目錄下放一個 .htaccess 文件,里面寫上:
      
      <FilesMatch"(?i:\.php)$">
      
      Denyfromall
      
      FilesMatch>
      
      3)可以不提供原圖訪問,所有圖片輸出時都經過程序處理,也可以在上傳存儲時就處理一遍根本不保存原圖;
      
      4)圖片使用不同的服務器,這樣可以與業務代碼數據完全隔離,即使圖片服務器被黑了,也不會泄漏多少信息;
      
      5) cgi.fix_pathinfo=0 慎用,除非你十分確定該服務器上的所有項目都不會因此而無法運行。
      
      2、空字節代碼執行漏洞
      
      舊版本(0.5.,**0.6.,0.7,0.8<=0.7.65<=0.8.37)。通過利用此漏洞,攻擊者可以導致服務器使用 PHP 的 FastCGI 作為 PHP 的服務器上執行任何公開訪問的文件。
      
      惡意用戶發出請求http://example.com/file.ext%00.php就會將 file.ext 作為 PHP 文件解析。
      
      如果一個攻擊者可以控制文件的內容(即:使用頭像上傳形式)其結果是執行任意代碼。Ngnix 在遇到 %00 空字節時與后端 FastCGI 處理不一致,導致可以在圖片中嵌入 PHP 代碼然后通過訪問 xxx.jpg%00.php 來執行其中的代碼。
      
      修復
      
      1、禁止在上傳文件目錄下執行 php,在 nginx 虛擬機配置或者 fcgi.conf 配置加如下代碼:
      
      if($request_filename~*(.*)\.php) {
      
      set$php_url$1;
      
      }
      
      if(!-e$php_url.php) {
      
      return403;
      
      }
      
      2、升級到最新版本的 nginx
      
      三、IIS5.x-6.x 解析漏洞
      
      使用 iis5.x-6.x 版本的服務器,大多為 windows server 2003,網站比較古老,開發語言一般為 asp;該解析漏洞也只能解析 asp 文件,而不能解析 aspx 文件。
      
      1、目錄解析(6.0)
      
      形式:
      
      www.xxx.com/xx.asp/xx.jpg
      
      原理:
      
      服務器默認會把 .asp,.asa 目錄下的文件都解析成 asp 文件
      
      文件解析(6.0)
      
      形式:
      
      www.xxx.com/xx.asp;.jpg
      
      原理:
      
      服務器默認不解析;號后面的內容,因此 xx.asp;.jpg 便被解析成 asp 文件了。
      
      解析文件類型
      
      有的網站在上傳檢測中會用"黑名單"方法 ,但是 IIS6.0 默認的可執行文件除了 asp 還包含這三種 :
      
      /test.asa
      
      /test.cer
      
      /test.cdx
      
      iis 為什么會把 asa,cdx,cer 解析成 asp 文件?
      
      原因是這四種擴展名都是用的同一個 asp.dll 文件來執行。
      
      匯總服務器對文件的解析還存在哪些漏洞
      
      修復
      
      1)目前尚無微軟官方的補丁,可以通過自己編寫正則,阻止上傳xx.asp;.jpg類型的文件名。
      
      2)做好權限設置,限制用戶創建文件夾。
      
      2、IIS7.5解析漏洞
      
      IIS7.5 的漏洞與 nginx 的類似,都是由于 php 配置文件中,開啟了 cgi.fix_pathinfo,而這并不是 nginx 或者 iis7.5 本身的漏洞。
      
      跟 nginx 解析漏洞一樣,要在 php.ini => cgi.fix_pathinfo=1 開啟的情況才會產生。
      
      可以配合操作系統文件命名規則,上傳不符合 windows 文件命名規則的文件名
      
      test.asp.
      
      test.asp(空格)
      
      test.php:1.jpg
      
      test.php:: $DATA
      
      會被 windows 系統自動去掉不符合規則符號后面的內,然后再配合這個解析漏洞來執行文件。
      
      2、%00截斷
      
      條件:php 版本 < 5.3.4
      
      filename=test.php%00.txt
      
      1、上傳時路徑可控,使用 00 截斷
      
      2、文件下載時,00 截斷繞過白名單檢查
      
      3、文件包含時,00 截斷后面限制(主要是本地包含時)
      
      4、其它與文件操作有關的地方都可能使用 00 截斷。
      
      三、其他
      
      在 windows 環境下,xx.jpg[空格] 或 xx.jpg. 這兩類文件都是不允許存在的,若這樣命名,windows 會默認除去空格或點,黑客可以通過抓包,在文件名后加一個空格或者點繞過黑名單.若上傳成功,空格和點都會被 windows 自動消除,這樣也可以 getshell。這種方法可以配合文件解析漏洞從而產生更大的殺傷力。

    相關閱讀

主站蜘蛛池模板: 佛冈县| 揭西县| 郓城县| 壤塘县| 湘乡市| 安图县| 株洲县| 娱乐| 康乐县| 宜兴市| 县级市| 靖江市| 浪卡子县| 通化市| 丽水市| 团风县| 古交市| 安达市| 湖州市| 高邮市| 东海县| 海安县| 高清| 武安市| 交城县| 秦皇岛市| 留坝县| 林周县| 定安县| 监利县| 正阳县| 漳平市| 侯马市| 叶城县| 天全县| 新蔡县| 泰顺县| 深水埗区| 白朗县| 临邑县| 承德县|