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 僞協議深入理解

在這裏插入圖片描述

php://

——訪問各個輸入/輸出流(I/O streams)

  1. php:// input
    ——可以訪問請求的原始數據的只讀數據流

  2. php:// output
    ——可以訪問請求的原始數據的只寫數據流

  3. php:// filter

  4. php:// memory 和 php:// temp

data:// (數據)

  • 用法:
    data://text/plain;base64,

  • 轉換過濾器

  1. convert.*

  2. base64

  3. string.*

file://

—— 訪問本地文件系統

完成dvwa第四個模塊file inclusion


在上一個小任務中,已經對file inclusion文件包含有了一定的瞭解,下面,將利用DVWA對其進行實踐性學習。
同樣,有
lowmediumhighimpossible四種難易等級。

前提設置

在這裏插入圖片描述
有顯示:The PHP function allow_url_include is not enabled.
因此,再網上搜到一些解決方案:把 php.ini 配置中的allow_url_include = Off 改成 On,但是我並沒有出現和他一樣的反應。
換了一種有同經歷的經驗貼,對phpstudy --> 環境 --> php --> 看遠程包含是否打開。

在這裏插入圖片描述
然後就可以了:

在這裏插入圖片描述

low級別

view source:
在這裏插入圖片描述
服務器端對page參數沒有做任何的過濾,下面的三個php文件點擊就可以打開。

漏洞利用
本地文件包含

  1. 構造惡意url:http://本地ip/dvwa-master/vulnerabilities/fi/?page=/etc/shadow

    /etc/shadow:linux下所有的用戶名,密碼信息會放在/etc/shadow下。
    在這裏插入圖片描述
    會彈出warning,並且暴露出服務器文件的絕對路徑;

  2. 構造url:http://本地ip/dvwa-master/vulnerabilities/fi/?page=D:\phpstudy_pro\WWW\DVWA-master\php.ini
    在這裏插入圖片描述

  3. 構造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出現以下界面:
在這裏插入圖片描述
在網上找到了解決方法:

  1. 按照路徑找到high.php;
  2. 添加以下語句:
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函數

學習鏈接:PHP 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 語句

  1. if 條件語句

    僅當條件成立時執行代碼
    在這裏插入圖片描述

  2. if…else 語句

    條件成立時執行某指定代碼;不成立就執行另一個代碼
    在這裏插入圖片描述

  3. if…else if…else 語句

    條件1成立時,執行代碼1;條件2成立時,執行代碼2;兩個條件都不成立時,執行代碼3
    在這裏插入圖片描述

Switch 語句

多個條件,多個執行代碼
例:
在這裏插入圖片描述

數組

能在單個變量中存儲多個值的特殊變量,可以根據鍵訪問其中的值。

常用array()函數來創建數組:

  • array();
  • 兩種方式
  1. 自動分配ID鍵
    $names=array(“Alice”,“Jenny”,“Kally”);
  2. 人工分配ID鍵
    $names[0]=“Alice”;
    $names[1]=“Jenny”;
    $names[2]=“Kally”;

在php中,有三種類型的數組:

  1. 數值數組

    ——帶有數字的

  2. 關聯數組

    ——帶有指定的鍵的數組(每個鍵關聯一個值)

  3. 多維數組

    ——包含一個或多個數組的數組

count() 函數

用於返回數組的長度(元素的數量)

數組排序

  • sort()
    對數組進行升序排列
  • rsort()
    對數組進行降序排列
  • asort()
    根據關聯數組的,對數組進行升序排列
  • arsort()
    根據關聯數組的,對數組進行降序排列
  • ksort()
    根據關聯數組的,對數組進行升序排列
  • krsort()
    根據關聯數組的,對數組進行降序排列

注意,在sort()和rsort()中:

  • 按字母/數字升序降序

超級全局變量

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

While 循環

  • while語句

    只要指定的條件成立,則循環執行代碼塊
    在這裏插入圖片描述

  • do…while 語句

    首先執行一次代碼塊,然後在指定的條件成立時重複這個循環在這裏插入圖片描述

For 循環

注意:

  • 要提前知道循環執行代碼塊的次數

    在這裏插入圖片描述

  1. 初始值(可爲空)
  2. 條件
  3. 增量(可爲空)

補充:

  • foreach 循環

    可以輸出當前變量的值(時時賦值)

以上就是我第五次任務的完成情況,不足之處還請大家批評指正!謝謝!

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