太阳集团2138备用网址

  • 2019-06-26
  • [加油!向未来]国产大飞机C919遇严峻考验 机翼被“虐”向上弯曲3米 2019-06-26
  • “新四大发明”火了!中国与世界有了新的沟通桥梁 2019-06-26
  • 《都挺好》曝光终极预告 直击当代家庭“痛点” 2019-06-26
  • 2019-06-26
  • 2019-06-26
  • 7月可乘直升机游览青海湖 2019-06-26
  • 2019-06-26
  • 培华学院召开新闻信息培训暨表彰大会 2019-06-26
  • 吉林师范大学《见地》摄影比赛作品选登 2019-06-26
  • 广州南沙工商企业获得电力暖心服务 2019-06-26
  • 张兴海:汽车新制造是全生命周期的新的制造理念和体系 2019-06-21
  • 2019年03月08日 星期五 2019-06-21
  • 【红人馆】合肥摆了9年的米糕摊又小又难找 摊主竟是两位聋哑合伙人! 2019-06-21
  • 华为 Mate 7(尊爵版电信4G)评论 2019-06-21
  • 欢迎来到 黑吧太阳集团2138备用网址 是业内专业的游戏平台,为你提供各式各样的精品游戏,最全的游戏项目,同时还为您提供各种游戏专题游戏攻略人气论坛。

    渗透测试中PHP Stream Wrappers的利用技巧

    来源:本站整理 作者:佚名 时间:2019-01-26 TAG: 我要投稿

    太阳集团2138备用网址 www.r-island.com 流(Streams)这个概念是在php4.3引进的,是对流式数据的抽象,用于统一数据操作,用于统一数据操作,比如文件数据、网络数据、压缩数据等。简单点讲,流就是表现出流式数据行为的资源对象。在本文中,我将为大家介绍一些PHP Stream Wrappers在渗透测试中的利用技巧。
    了解 IT 中的流
    当不同的介质之间有数据交互的时候,就使用流来实现。数据源和目标可以是文件,TCP/IP或UDP网络连接,标准输入和输出,文件服务器上的文件传输或文件存档过程。即使这些流看起来彼此差异很大,但它们却有一个共同的线程:它们基本上都是读写的过程。你可以将数据从源写入到目标,也可以将从源读取的数据传输到目标。大致过程如下:
    连接建立
    数据读取
    数据写入
    连接结束
    即使基本操作是读写,也需要执行其他操作才能访问Web服务器或存档文件,或是执行简单的输入和输出过程,以及通过TCP/IP或UDP建立连接。
    流操作中的通用函数
    我们可以通过PHP中的一些通用函数与流进行交互:
    file
    open
    fwrite
    fclose
    file_get_contents
    file_put_contents
    在PHP中,你可以使用通用函数来执行各种流操作,而无需使用单独的函数,从而使整个过程更加简单。
    直到今天,这些函数仍是流概念的主要部分并用于文件读写过程。我们现在可以在PHP中使用wrapper(包装器)来执行各种流处理,例如HTTP,FTP,SOCKET进程和标准输入/输出进程。
    如果要使用流,则需要以特定格式指定其类型和目标。我们将在通用函数中使用的流类型定义如下:
    ://
    占位符用于指定我们将使用的流类型,如File,FTP,PHPOUTPUT,PHPINPUT,HTTP或SSL。
    如果你是PHP程序员,你应该熟悉以下代码。它会读取some.txt文件并打印其内容。
    $handle = fopen("some.txt","rb");
    while(feof($handle)!==true) {
       echo fgets($handle);
    }
    在代码中,我们使用file://system wrapper调用fopen通用流函数。从技术上讲,上面的代码与以下代码完全相同:
    $handle = fopen("file://some.txt","rb");
    while(feof($handle)!==true) {
       echo fgets($handle);
    }
    由于流函数中的默认包装器是file://,因此如果要使用它,则不必进行指定。
    你可以使用以下代码列出允许使用的包装器。
    php
       print_r(stream_get_wrappers());
    流上下文概念
    对于大多数用例,流函数的默认用法可能已经足够。但是在某些情况下,你需要的不仅仅是默认用法。
    file_get_contents(“http://www.example.com/news.php”);
    我们假设可以使用file_get_contents命令来读取http://www.example.com/news.php上的新闻。但是,如果该网站需要某种形式的身份验证才能访问其内容呢?在这种情况下,你可以使用流上下文(Stream-Context)规范使用可选参数自定义流行为。
    以下是一段流上下文的示例代码:
       $postdata = '{"username":"ziyahan"}'
       $opts = array('http' =>
           array(
               'method' => 'POST',
               'header' => 'Content-type: application/json;charset=utf-8;\r\n'.
                   'Content-Length: '.mb_strlen($postdata),
               'content' => $postdata
           )
       );
       $context = stream_context_create($opts);
       $response = file_get_contents('http://www.example.com/news.php', false,
       $context);
    如上所示,流上下文实际上是一个数组。上面的键值表示将在上下文中使用的包装器类型(本例中为HTTP)。每个包装器都有各自的上下文参数。你可以在PHP文档中阅读有关它们的更多信息。
    PHP 流过滤器
    以上我们对流的读写过程已有了一个初步的了解。流包装器的主要优点是可以在读/写过程中即时的修改,更改或删除数据。
    PHP为我们提供了一些流过滤器(string.toupper,string.tolower,string.rot13和string.strip_tags)。除此之外,还可以使用各种自定义过滤器。
    我们可以使用stream_append_filter函数在流上应用过滤器。例如,下面的过滤器会将所有读取的句子转换为大写:
       $handle = fopen('file://data.txt','rb');
       stream_filter_append($handle, 'string.toupper');
       while(feof($handle)!==true) {
           echo fgets($handle);
       }
       fclose($handle);
    在data.txt中读取的信息将以大写形式显示在屏幕上。
    你还可以使用php://filter wrapper向流添加过滤器:
       $handle = fopen('php://filter/read=string.toupper/resource=data.txt','rb');
       while(feof($handle)!==true) {
           echo fgets($handle);
       }
       fclose($handle);
    流开始传输时将调用该方法。与第一个示例相比,该方法对于之后不允许过滤器附件的函数(如file()和fpassthru())更为可行。
    你可以使用过滤器进行编码(rot13,base64)或文件压缩和提取。
    除了PHP和预定义的包装器之外,你还可以使用第三方包装器(如Amazon S3或Dropbox),并为特定操作编写自定义包装器。
    在此之前我们给出的示例属于本地文件包含(LFI)类目,其中包括将目标系统中的文件包含在代码中以提取系统的数据。

    [1] [2]  下一页

    【声明】:太阳集团2138备用网址(http://www.r-island.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@www.r-island.com,我们会在最短的时间内进行处理。
    • 最新更新
      • 相关阅读
        • 本类热门
          • 最近下载