php://stdin
主要用於php cli 的輸入
應用:
while($line = fopen('php://stdin','r'))
主要用於php cli的輸出
應用:
<?php
$fh = fopen('php://stdout', 'w');
fwrite($fh, "標準輸出php://stdout\n");
fclose($fh);
fwrite(stdout, "標準輸出stdout\n");
可以讀取到post沒有解析的原始資料
php**
<?php
echo file_get_contents($_get["a"]);
?>
瀏覽器訪問:
但是當php**這樣寫的時候:
<?php
$code = $_get['a'];
include($code);
?>
而且當php遠端包含開啟的時候(當allow_url_include=on),就可以造成任意**執行
是乙個只寫資料流,允許你以print和echo一樣的方式寫入到輸出緩衝區。
當**是:
<?php
$code=$_get["a"];
file_put_contents($code,"test");
?>
當訪問引數是php://output時,則在此頁面輸出test
是一種元封裝器,設計用於資料流開啟時的篩選過濾應用
當php**是:
<?php
$filename=$_get["a"];
$data="test test";
file_put_contents($filename, $data);
?>
通過http://localhost:8000/phpinput.php?a=php://filter/write=string.tolower/resource=test.php
可以往伺服器中寫入乙個檔案內容全為小寫且檔名為test.php的檔案:
其中 :
(1)string.tolower //寫入內容全部變成小寫
(2)string.toupper //寫入內容全部變成大寫
(3)string.rot13 //寫入內容全部對字串執行 rot13 編碼
通過:http://localhost:8000/phpinput.php?a=php://filter/convert.base64-encode/resource=test.php
可以往伺服器中寫入乙個檔案內容為base64編碼且檔名為test.php的檔案:
當**為:
<?php
$filename=$_get["a"];
echo file_get_contents($filename);
?>
當通過訪問:http://localhost:8000/phpinput.php?a=php://filter/convert.base64-encode/resource=test.php
就可以把test.php的內容以base64編碼的方式顯示出來
當**為:
<?php
$filename=$_get["a"];
$data="test test";
include("$filename");
?>
當通過訪問:http://localhost:8000/phpinput.php?a=php://filter/convert.base64-encode/resource=test.php
同樣可以把test.php的內容以base64編碼的方式顯示出來
這裡注意:雙引號包含的變數$filename,可以當成正常變數執行,而單引號包裹的變數則會當成字串例如:
可以用這個協議執行任意linux的指令
如果缺陷**是:
<?php
$code = $_get['hax'];
include($code);
?>
那麼可以用http://localhost/test.php?hax=expect://command 來執行任意linux指令
但是:note:該封裝協議預設未開啟
為了使用 expect:// 封裝器,你必須安裝» pecl 上的 » expect擴充套件。
我安裝這個拓展屢屢失敗,看來不是特殊需求是不會有這樣的漏洞的,這裡只提個思路
如果看效果可以去看看這個部落格的文章:
data://
資料流封裝器
當allow_url_include 開啟的時候,任意檔案包含就會成為任意命令執行
缺陷php的**是:
PHP審計基礎
php核心配置 register globals 全域性變數註冊開關 設定為on時,把get post的變數註冊成全域性變數 php 5.4.0中移除 allow url include 包含遠端檔案 設定為on時,可包含遠端檔案 php 5.2後預設為off allow url fopen 開啟遠...
php審計基礎四 變數覆蓋
1 extract 函式 extract 函式從陣列中將變數匯入到當前的符號表。該函式使用陣列鍵名作為變數名,使用陣列鍵值作為變數值。針對陣列中的每個元素,將在當前符號表中建立對應的乙個變數。當 是 b 3 a array b 1 extract a print r b b的值被覆蓋,輸出的值變成1...
php支援的協議和封裝協議
note 用於描述乙個封裝協議的 url 語法僅支援 scheme 的語法。scheme 和 scheme 語法是不支援的。table of contents file 訪問本地檔案系統 http 訪問 http s ftp 訪問 ftp s urls php 訪問各個輸入 輸出流 i o stre...