【html文件中插入php語句】

飛來科技  發布時間:2019-10-29 01:03:50

本文關鍵詞:php 插入

php include php_php 插入_虛擬主機評測網php源碼 php

* ftp:// — 訪問 FTP(s) URLs

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

* zlib:// — 壓縮

* data:// — 數據(RFC 2397)

* glob:// — 查找匹配的文件路徑方式

* phar:// — PHP 歸檔

* ssh2:// — Secure Shell 2

* rar:// — RAR

* ogg:// — 音頻流

* expect:// — 處理交互式的流

先整理一下關于php://的用法

PHP 提供了一些雜項輸入/輸出(IO)流,允許訪問 PHP 的輸入輸出流、標準輸入輸出和出錯描述符, 內存中、磁盤備份的臨時文件流以及可以操作其它調用讀取文件資源的過濾器。

php://stdin、php://stdout 和 php://stderr 允許直接訪問 PHP 進程相應的輸入以及輸出流。 數據流引用了復制的文件描述符,所以即使你打開php://stdin并在以后關了它, 僅是關閉了復制品,真正被引用的 STDIN 并不受影響。 推薦簡單使用常量 STDIN、 STDOUT 和 STDERR 來替代手工開啟某些封裝器。

php://stdin是只讀的,php://stdout 和 php://stderr 是只寫的。

php://stdin

<?php
    while($line = fopen('php://stdin','r'))
    {//open our file pointer to read from stdin
        echo $line."\n";
        echo fgets($line);//讀取
    }
?>

這里寫圖片描述

可以發現開啟了一個文件指針進行調用

php://stdout

<?php
    $fd = fopen('php://stdout', 'w');
    if ($fd) {
        echo $fd."\n";
        fwrite($fd, "這是一個測試");
        fwrite($fd, "\n");
        fclose($fd);
    }
?>

這里寫圖片描述

php 插入_php include php_虛擬主機評測網php源碼 php

可以發現開啟了一個文件指針進行讀取

php://stderr

<?php
    $stderr = fopen( 'php://stderr', 'w' );
    echo $stderr."\n";
    fwrite($stderr, "lalala" );
    fclose($stderr);
?>

這里寫圖片描述

可以發現開啟了一個文件指針進行讀取

php://input 是個可以訪問請求的原始數據的只讀流。因為它不依賴于特定的 php.ini 指令。

1)注意8-3.asp中form表單的寫法:

,這里一定要寫成enctype="multipart/form-data"。 method=post enctype=multipart/form-data>

就拿今天的HBCTF的一道題吧

相關源碼:

<!--
$user = $_GET["user"];
$file = $_GET["file"];
$pass = $_GET["pass"];
if(isset($user)&&(file_get_contents($user,'r')==="the user is admin")){
    echo "hello admin!<br>";
    include($file); //class.php
}else{
    echo "you are not admin ! ";
}
 -->

這里寫圖片描述

php://output 是一個只寫的數據流, 允許你以 print 和 echo 一樣的形式 寫入到輸出緩沖區。

<?php
    $out=fopen("php://stdout", 'w');  
    echo $out."\n";
    fwrite($out , "this is a test");
    fclose($out);
?>

這里寫圖片描述

php://fd 允許直接訪問指定的文件描述符。 例如 php://fd/3 引用了文件描述符 3。

php://memory 和 php://temp 是一個類似文件 包裝器的數據流,允許讀寫臨時數據。 兩者的唯一差別是 php://memory 總是把數據存儲在內存中, 而 php://temp 會在內存量達到預定義的限制后(默認是 2MB)存入臨時文件中。 臨時文件位置的決定和 sys_get_temp_dir() 的方式一致。

php://temp 的存儲限制可借助添加 /maxmemory:NN 來控制,NN 是以字節為單位、保留在存儲的最大數據量,超過則使用臨時文件。

可以說這是最常使用的一個偽協議,一般可以借助進行任意文件寫入。

php://filter 是一種元封裝器, 設計用于數據流打開時的篩選過濾應用。 這針對一體式(all-in-one)的文件函數比較有用,類似 readfile()、 file() 和 file_get_contents(), 在數據流內容寫入之前沒有機會應用其它過濾器。

php://filter 參數

名稱 描述

虛擬主機評測網php源碼 php_php 插入_php include php

resource=<要過濾的數據流>

這個參數是需要的。它選定了你要篩選過濾的數據流。

read=<讀鏈的篩選列表>

該參數可選。可以設置一個或多個過濾器名稱,以管道符(_

write=<寫鏈的篩選列表>

該參數可選。可以設置一個或多個過濾器名稱,以管道符(_

<;兩個鏈的篩選列表>

任何沒有以 read= 或 write= 作后綴 的篩選器列表會視狀況應用于讀或寫鏈。

封裝協議摘要(針對 php://filter,參考被篩選的封裝器。)

屬性 支持

受限于 allow_url_include

僅 php://input、 php://stdin、 php://memory 和 php://temp。

允許讀取

僅 php://stdin、 php://input、 php://fd、 php://memory 和 php://temp。

允許寫入

同樣,如果希望從stdout和stderr獲取數據,必須將stdout和stderr設置為pipe。用wshscriptexec的exec運行程序,通過stdin(stdin 輸入流),stdout(stdout 出流),stderr( stderr 輸出流)實現命令輸入及返回值獲取。catalina.out不過是tomcat的標準輸出(stdout)和標準錯誤(stderr),這是在tomcat的開啟腳本里指定的,如果沒有修改的話stdout和stderr會重定向到此處。

允許追加

僅 php://stdout、 php://stderr、 php://output、 php://fd、 php://memory 和 php://temp(等于寫入)

允許同時讀寫

僅 php://fd、 php://memory 和 php://temp。

支持 stat()

php include php_php 插入_虛擬主機評測網php源碼 php

僅 php://memory 和 php://temp。

僅僅支持 stream_select()

//執行一個命令行,重定向stdin, stdout,stderr。 stdin是標準輸入php 插入,stdout是標準輸出,stderr是標準錯誤輸出。stdout=subprocess.pipe用來將新進程的輸出重定向,stderr=subprocess.stdout將新進程的錯誤輸出重定向到stdout,stdin=subprocess.pipe用來將新進程的輸入重定向。

依舊拿HBCTF舉例好啦

這里寫圖片描述

明顯將class.php的代碼以base64的方式輸出,當然也可以試試字符轉成rot13形式

這里寫圖片描述

這就涉及過濾器的靈活使用

php://filter/read=<讀鏈應該應用的過濾器列表>

這個參數選用一個或以管道符 | 分隔的多個過濾器名稱。

這里寫圖片描述

過濾器有很多種php 插入,有字符串過濾器、轉換過濾器、壓縮過濾器、加密過濾器

進行rot13轉換 string.toupper

將數組全部大寫 string.tolower

將數組全部大寫 string.strip_tags

去除空字符、HTML 和 PHP 標記后的結果

著重介紹一下這個,功能類似于strip_tags()函數,若不想這些字符不被擺脫,后面跟上字符,可借助字符串或是函數兩種方法

<?php
    $fp = fopen('php://output', 'w');
    stream_filter_append($fp, 'string.rot13');
    echo "rot13:";
    fwrite($fp, "This is a test.\n");
    fclose($fp);
    $fp = fopen('php://output', 'w');
    stream_filter_append($fp, 'string.toupper');
    echo "Upper:";
    fwrite($fp, "This is a test.\n");
    fclose($fp);
    $fp = fopen('php://output', 'w');
    stream_filter_append($fp, 'string.tolower');
    echo "Lower:";
    fwrite($fp, "This is a test.\n");
    fclose($fp);
    $fp = fopen('php://output', 'w');
    echo "Del1:";
    stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE);
    fwrite($fp, "<b>This is a test.</b>!!!!<h1>~~~~</h1>\n");
    fclose($fp);
    $fp = fopen('php://output', 'w');
    echo "Del2:";
    stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, "<b>");
    fwrite($fp, "<b>This is a test.</b>!!!!<h1>~~~~</h1>\n");
    fclose($fp);
    $fp = fopen('php://output', 'w');
    stream_filter_append($fp, 'string.strip_tags', STREAM_FILTER_WRITE, array('b','h1'));
    echo "Del3:";
    fwrite($fp, "<b>This is a test.</b>!!!!<h1>~~~~</h1>\n");
    fclose($fp);
?>

這里寫圖片描述

base64 編碼解碼

convert.base64-encode和convert.base64-decode使用這兩個過濾器等同于分別用 base64_encode()和 base64_decode()函數處理所有的流數據。 convert.base64-encode支持以一個關聯變量給出的參數。如果給出了line-length,base64 輸出將被用 line-length個字符為直徑而截成塊。如果給出了* line-break-chars*,每塊將被用給出的字符分開。這些參數的效果和用 base64_encode()再加上 chunk_split()相同。 convert.quoted-printable-encode & convert.quoted-printable-decode

虛擬主機評測網php源碼 php_php 插入_php include php

quoted-printable 編碼解碼

convert.quoted-printable-encode和 convert.quoted-printable-decode等同于用 quoted_printable_decode()函數處理所有的流數據。沒有和* convert.quoted-printable-encode*相對應的變量。* convert.quoted-printable-encode*支持以一個關聯變量給出的參數。除了支持和 convert.base64-encode一樣的附加參數外,* convert.quoted-printable-encode*還支持布爾參數 binary和 force-encode-first。 convert.base64-decode只支持 line-break-chars參數作為從編碼載荷中剝離的類別提示。

<?php
    $fp = fopen('php://output', 'w');
    stream_filter_append($fp, 'convert.base64-encode');
    echo "base64-encode:";
    fwrite($fp, "This is a test.\n");
    fclose($fp);
    $param = array('line-length' => 8, 'line-break-chars' => "\n");
    $fp = fopen('php://output', 'w');
    stream_filter_append($fp, 'convert.base64-encode', STREAM_FILTER_WRITE, $param);
    echo "\nbase64-encode-split:\n";
    fwrite($fp, "This is a test.\n");
    fclose($fp);
    $fp = fopen('php://output', 'w');
    stream_filter_append($fp, 'convert.base64-decode');
    echo "\nbase64-decode:";
    fwrite($fp, "VGhpcyBpcyBhIHRlc3QuCg==\n");
    fclose($fp);
    $fp = fopen('php://output', 'w');
    stream_filter_append($fp, 'convert.quoted-printable-encode');
    echo "quoted-printable-encode:";
    fwrite($fp, "This is a test.\n");
    fclose($fp);
    $fp = fopen('php://output', 'w');
    stream_filter_append($fp, 'convert.quoted-printable-decode');
    echo "\nquoted-printable-decode:";
    fwrite($fp, "This is a test.=0A");
    fclose($fp);
?>

這里寫圖片描述

所以即使一段進程只申請一塊只有一個字節的存儲,內存也會分配整整一頁(在i386機器中一頁的缺省大小pace_size=4096字節)這樣,新構建的共享存儲的大小實際上是從size這個參數微調而來的頁面大小。少于一個內存頁大小的分配一般使用“正常”池分配,也就是說或者x86下小于4080字節(8字節用作池頭部,8字節分給初始的空閑塊),或者x64下小于4064字節(16字節用于池頭部,16字節分給初始的空閑塊)將使用“正常”池分配。fork新進程時,雖然可共享的數據內容不需要復制,但會復制之前進程空間的存儲頁表,如果硬盤空間有40g(考慮每個頁表條目消耗 8 個字節),那么頁表大小就有80m,這個復制是必須時間的,如果使用虛擬機,特別是xen虛擬服務器,耗時會更長。

Note: 因為最常見的參數是壓縮等級,也可以提供一個整數值成為此參數(而不用數組)。 bzip2.compress和 bzip2.decompress

bzip2.compress過濾器接受以一個關聯變量給出的最多兩個參數:* blocks*是從 1 到 9 的整數值,指定分配多少個 100K 字節的內存塊作為工作區。 work是 0 到 250 的整數值,指定在退回到一個慢一些,但更可靠的算法之前做多少次常規壓縮算法的嘗試。調整此參數僅制約到速率,壓縮輸出和存儲使用都不受此修改的妨礙。將此參數設為 0 指示 bzip 庫使用外部默認算法。 bzip2.decompress過濾器僅接受一個參數,可以用普通的布爾值傳遞,或者用一個關聯變量中的* small*單元傳遞。當* small*設為&true; 值時,指示 bzip 庫用最小的存儲占用來執行解壓縮,代價是速率會慢一些。

_mcrypt.*_和 _mdecrypt.*_使用 libmcrypt 提供了對稱的加密和解讀。這兩組過濾器都支持 mcrypt 擴展庫中同樣的算法,格式為_mcrypt.ciphername_,其中 ciphername是密碼的昵稱,將被傳遞給 mcrypt_module_open()。有下列五個過濾器參數可用:

mcrypt 過濾器參數

參數 是否需要 默認值 取值舉例

可選

cbc, cfb, ecb, nofb, ofb, stream

algorithms_dir

可選

ini_get(‘mcrypt.algorithms_dir’)

algorithms 模塊的目錄

modes_dir

可選

ini_get(‘mcrypt.modes_dir’)

modes 模塊的目錄

必須

典型為 8,16 或 32 字節的二進制數據。根據密碼而定

必須

典型為 8,16 或 32 字節的二進制數據。根據密碼而定

本文來自互聯網,由機器人自動采編,文章內容不代表本站觀點,請讀者自行辨別信息真偽,如有發現不適內容,請及時聯系站長處理。

    相關閱讀
    安徽快三300期走势