文件包含漏洞之2LFI-Labs中的的利用和繞過

一、環境搭建

1.環境描述

操作系統:win7
PHP集成環境:phpstudy
源碼:LFI-Labs(去GitHub上下載)

將下載好的源碼放在phpstudy的WWW目錄下。

2.解決報錯

如圖所示,它會出現以下報錯:
在這裏插入圖片描述
我找到的相關資料是:

這樣的警告,只是一個因爲PHP版本不同而產生的警告(NOTICE或者WARNING),而非錯誤(ERROR)。PHP中的變量在不聲明的情況下使用 的時候,PHP4運行正常,但是到了PHP5環境下就會出現上述的警告或者提示。

解決措施:
在index.php的最上方添加error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
在這裏插入圖片描述

  • 這句代碼的意思是:提示除 E_NOTICE 和 E_WARNING 之外的所有錯誤信息。
  • 因爲根據它的報錯提示可知,這裏出現的是Notice和Warning,所以我們屏蔽這兩個。
  • 但是這樣的話,每一關的index.php文件都需要添加這句話,有點小麻煩;據說是可以直接修改配置文件php.ini文件的,但我怕把環境整壞了,謹慎一點,還是每一關的index.php文件都手動添加吧。

這個環境問題我折騰了三個多小時,是我太菜……
在這裏插入圖片描述
因爲我首先按照之前搭Sqli-Labs、DVWA、pikachu等源碼環境的方法,想要去修改它的配置文件去連接數據庫;
但是發現它源碼的配置文件是在docker裏配置的,然後我的固化思維就是要找到在phpstudy的配置方法,但是我在網上沒有找到關於LFI-Labs的搭建教程;
加上它又在報錯,我鑽牛角尖了就一直認爲可能是因爲它本身是要搭建在docker上的才導致的報錯,然後還學習了一下如何在phpstudy中設置Apache虛擬主機;
………
反正嘗試了很多方法,最後纔想到從報錯信息入手。
但是網上只有與第一行報錯信息類似的報錯的解決方法,然後我就又傻了,想着應該是要一個一個解決報錯,但後兩行報錯又找不到相似的報錯……
直到最後的時候才靈機一動舉一反三,寫出了最後的error_reporting(E_ALL & ~E_NOTICE & ~E_WARNING);。
在這裏插入圖片描述
雖然最後有收穫,但時間成本太高了……歸根到底還是我太菜了……
在這裏插入圖片描述


二、實驗操作

1.LFI-1

這是最簡單的文件包含漏洞。我們通過查看源碼可知參數名是page:
在這裏插入圖片描述
然後我們選擇查看phpinfo.php文件,因爲包含這個文件的話,我們可以通過頁面回顯來判斷知否執行成功:

?page=../../phpinfo.php

在這裏插入圖片描述

  • 這裏使用的是相對路徑,../ 是上一層目錄的意思,當我們不知道phpinfo.php文件到底在哪一層的時候,就一層一層往上查。

2.LFI-2

查看原,可知參數名是library。
查看源碼可以知道,它在我們傳進去的參數前後拼接了內容:

  • 在PHP語言中,是以 . 來拼接字符串
  • 預定義的 $_GET 變量用於收集來自 method=“get” 的表單中的值

在這裏插入圖片描述
根據源碼可以看出,後面多了個“.php”,所以我們的繞過方式有兩種:
1.去掉後綴

?library=../../../phpinfo

2.00截斷

?library=../../../phpinfo.php%00  

使用00截斷時需要注意的幾點

  • 1.定義在前一篇理論知識中已經講過了:Windows在讀文件名時,當遇到ASCII碼0時會判斷爲讀取結束,會自動停止對後面內容的讀取。在URL中的形式是%00,在十六進制中是0x00。
  • 2.00截斷必須滿足兩個條件:
    (1)php版本小於5.3.4。如果版本過高可以調低:
    在這裏插入圖片描述
    (2)php的magic_quotes_gpc爲OFF狀態
    在這裏插入圖片描述
  • 3.如果已經滿足以上兩個條件了依然執行不成功,有可能是瀏覽器過濾掉了%00。這時候可以用burpsuite抓包,發送到重發器裏修改包。

然而我還是不能使用00截斷的方法,實在不知道爲啥了,有知道的師傅請留言指教一下~

3.LFI-3

這種報錯一看就是設置了過濾機制:
在這裏插入圖片描述
查看源碼:
在這裏插入圖片描述
意思就是如果最後的四個字符是“.php”的話就會報錯。
我們可以在末尾添加點 . 或者斜槓點 /. :

?file=../../phpinfo.php.
?file=../../phpinfo.php/.

需要注意的一點是,這裏沒有頁面回顯,要通過查看頁面源碼來判斷是否文件包含成功:
在這裏插入圖片描述

4.LFI-4

LFI-4其實和LFI-2一樣,去掉後綴名就行了。

?class=../../../../../phpinfo

這裏需要提一點的是源碼中的addslashes() 函數:
在這裏插入圖片描述
它的作用是返回在預定義字符之前添加反斜槓的字符串:

  • 單引號(’)
  • 雙引號(")
  • 反斜槓(\)
  • NULL

5.LFI-5

查看源碼,發現會將 ../ 替換爲空:
在這裏插入圖片描述
所以我們採取雙寫繞過的方式:

?file=..././..././....//phpinfo.php

6.LFI-6

第6關是採用的post方法,所以這裏用burpsuite進行抓包改包:
在這裏插入圖片描述
不知道爲什麼會報錯……

7.LFI-7~LFI-10

這後面幾道其實和前面都一樣了,只是傳參方法是post而已。

8.LFI-11~12

這裏稍微值得提一下的就是它這裏用的參數不是fil而是stylepath:
在這裏插入圖片描述
11是post方法,12是get方法。

9.LFI-13

第13題和第5題其實是一樣的。

10.LFI-14

第14題在第10題的基礎上加入了11 12題的那個隱藏屬性的參數stylepath。

11.包含日誌文件

要通過日誌文件進行文件包含漏洞的利用,前提是需要知道日誌的存放路徑纔行。
這裏展示的是日誌的默認路徑:
在這裏插入圖片描述
因爲日誌也會記錄我們的請求,所以利用方式就是在訪問的時候輸入文件包含的PHP代碼,它會被寫入日誌文件中:
在這裏插入圖片描述
從上圖可以看到瀏覽器會對它進行編碼,所以我們在 burpsuite中進行抓包改包:
在這裏插入圖片描述
執行的時候會被禁止:
在這裏插入圖片描述
但它其實已經被寫進日誌文件了,重新訪問的時候就會出現phpinfo.php的頁面:
在這裏插入圖片描述

三、總結:

1.這上面用到的繞過方式有:
00截斷繞過
. 點、\. 斜槓點繞過
去掉後綴名繞過
雙寫繞過

2.後續操作:
我們繞過了以後,就可以包含一句話木馬文件,甚至在包含 日誌文件的時候直接寫一句話木馬,然後連接菜刀,就可以得到webshell了。

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