草庐IT

【网络安全篇】php伪协议-漏洞及其原理

贤鱼不闲 2023-04-21 原文

🏆今日学习目标:
🍀学习php伪协议
✅创作者:贤鱼
⏰预计时间:35分钟
🎉个人主页:贤鱼的个人主页
🔥专栏系列:网络安全
🍁贤鱼的个人社区,欢迎你的加入 贤鱼摆烂团
🍁如果有需要可以查看下面文章
25分钟了解php?php基础


php伪协议

🍀支持为协议的函数

🍁文件包含函数

include();
include_once();
require();
require_once();

举个例子

include(文件名) ;
作用是如果文件名下的文件中有php代码,就会执行php代码,其他的部分直接输出

🍁 文件操作类函数

fopen();
file();
readfile();
file_get_contents();
......

举个例子

file_get_contents(文件名);
作用是直接读出文件名下文件的内容

🍀伪协议

🍁 file://

作用是访问本地文件系统

不受allow_url_fopen和allow_url_include影响
用法:

/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

🍁 http://https://

作用是访问http(s)网址

文件操作函数需开启allow_url_fopen,文件包含需同时开启allow_url_include和allow_url_fopen。
用法:

http://example.com/file.php?var1=val1&var2=val2
http://user:password@example.com

可以自己搭建一个网站然后利用漏洞

🍁ftp://

作用:访问ftp(s)URLs

文件操作函数需开启allow_url_fopen,文件包含需同时开启allow_url_include和
allow_url_fopen。

用法:

ftp://user:password@example.com/pub/file.txt
ftps://example.com/pub/file.txt

🍁 php://

作用是访问各个输出输出流

🍁php://input

可以访问亲求的原始数据只读流
可以理解为这一串话整个是一个特殊的文件名,和include搭配的话,因为include可以读取文件名下的内容并且有php代码就执行,可是这个特殊的文件名是找不到的,所以我们就可以自己写文件内容

文件操作函数需开启allow_url_fopen,文件包含需同时开启allow_url_include和
allow_url_fopen。

🔥例题讲解:


做题首先要读懂代码

很明显,这个代码的意思就是说过滤flag,如果没有flag就可以包含文件

具体怎么做呢?

上文所说,我们利用php://input可以自己写文件并且执行,那么我们可以传参php://input然后在下面写php代码

🍁php://filter

php://filter 是一种元封装器,设计用于数据流打开时的筛选过滤应用

本地文件无论allow_url_fopen,allow_url_include是否开启都可以使用,allow_url_fopen开启时文件操作函数里resource可以是远程的,allow_url_include也开启包含resource才可以是远程的。

用法:

php://filter/read=convert.base64-encode/resource=c:/windows/win.ini

讲解一下每个部分的作用

read是要执行的操作
convert.base64-encode的意思是读出的内容经过一次base64编码
resource后面跟的是读取内容的路径

参数(作为路径的一部分)

名称描述
resource=<要过滤的数据流>这个参数是必须的。它指定了你要筛选过滤的数据流。
read=<读链的筛选列表>该参数可选。可以设定一个或多个过滤器名称,以管道符(
write=<写链的筛选列表>该参数可选。可以设定一个或多个过滤器名称,以管道符(
<;两个链的筛选列表>任何没有以 read= 或 write= 作前缀的筛选器列表会视情况应用于读或写链。

字符串过滤器

名称描述
string.rot13进行rot13转换
string.toupper将字符全部大写
string.tolower将字符全部小写
string.strip_tags去除空字符、HTML 和 PHP 标记后的结果

编码过滤器

onvert.iconv.utf-8.utf-7将utf-8编码转换为utf-7编码,这样再继续使用base64编码写文件时候,不会因为特殊符号无法新建文件(windows)
convert.base64-encode/convert.base64-decodebase64编码解码
onvert.quoted-printable-encode/convert.quoted-printable-decodequoted-printable 编码解码

🍁 data://

数据流封装器,直接就是数据。

文件操作函数需开启allow_url_fopen,文件包含需同时开启allow_url_include和
allow_url_fopen。

用法

data://text/plain,<?php phpinfo()?>
data://text/plain;base64,PD9waHAgcGhwaW5mbygpPz4=

第一个就直接执行后面的php代码,第二个的意思是将后面的一串经过base64解码后执行(用来绕过过滤)

🔥例题讲解



这里编码完最后其实有一个+,但是如果+不处理就无法执行,所以我们提前url编码一次,+的url编码是%2b

🍁 compress.zlib:// compress.bzip2:// zip://

用法:

compress.zlib://file.gz
compress.bzip2://file.bz2
zip://archive.zip#dir/file.txt

🏆结束语

如果感兴趣,可以订阅一下专栏!!持续更新网络安全方面的内容!!

有关【网络安全篇】php伪协议-漏洞及其原理的更多相关文章

  1. ruby - 如何使用 Ruby aws/s3 Gem 生成安全 URL 以从 s3 下载文件 - 2

    我正在编写一个小脚本来定位aws存储桶中的特定文件,并创建一个临时验证的url以发送给同事。(理想情况下,这将创建类似于在控制台上右键单击存储桶中的文件并复制链接地址的结果)。我研究过回形针,它似乎不符合这个标准,但我可能只是不知道它的全部功能。我尝试了以下方法:defauthenticated_url(file_name,bucket)AWS::S3::S3Object.url_for(file_name,bucket,:secure=>true,:expires=>20*60)end产生这种类型的结果:...-1.amazonaws.com/file_path/file.zip.A

  2. ruby - 用 Ruby 编写一个简单的网络服务器 - 2

    我想在Ruby中创建一个用于开发目的的极其简单的Web服务器(不,不想使用现成的解决方案)。代码如下:#!/usr/bin/rubyrequire'socket'server=TCPServer.new('127.0.0.1',8080)whileconnection=server.acceptheaders=[]length=0whileline=connection.getsheaders想法是从命令行运行这个脚本,提供另一个脚本,它将在其标准输入上获取请求,并在其标准输出上返回完整的响应。到目前为止一切顺利,但事实证明这真的很脆弱,因为它在第二个请求上中断并出现错误:/usr/b

  3. ruby - 如何安全地删除文件? - 2

    在Ruby中是否有Gem或安全删除文件的方法?我想避免系统上可能不存在的外部程序。“安全删除”指的是覆盖文件内容。 最佳答案 如果您使用的是*nix,一个很好的方法是使用exec/open3/open4调用shred:`shred-fxuz#{filename}`http://www.gnu.org/s/coreutils/manual/html_node/shred-invocation.html检查这个类似的帖子:Writingafileshredderinpythonorruby?

  4. 网络编程套接字 - 2

    网络编程套接字网络编程基础知识理解源`IP`地址和目的`IP`地址理解源MAC地址和目的MAC地址认识端口号理解端口号和进程ID理解源端口号和目的端口号认识`TCP`协议认识`UDP`协议网络字节序socket编程接口`sockaddr``UDP`网络程序服务器端代码逻辑:需要用到的接口服务器端代码`udp`客户端代码逻辑`udp`客户端代码`TCP`网络程序服务器代码逻辑多个版本服务器单进程版本多进程版本多线程版本线程池版本服务器端代码客户端代码逻辑客户端代码TCP协议通讯流程TCP协议的客户端/服务器程序流程三次握手(建立连接)数据传输四次挥手(断开连接)TCP和UDP对比网络编程基础知识

  5. Tomcat AJP 文件包含漏洞(CVE-2020-1938) - 2

    目录1.漏洞简介2、AJP13协议介绍Tomcat主要有两大功能:3.Tomcat远程文件包含漏洞分析4.漏洞复现 5、漏洞分析6.RCE实现的原理1.漏洞简介2020年2月20日,公开CNVD的漏洞公告中发现ApacheTomcat文件包含漏洞(CVE-2020-1938)。ApacheTomcat是Apache开源组织开发的用于处理HTTP服务的项目。ApacheTomcat服务器中被发现存在文件包含漏洞,攻击者可利用该漏洞读取或包含Tomcat上所有webapp目录下的任意文件。该漏洞是一个单独的文件包含漏洞,依赖于Tomcat的AJP(定向包协议)。AJP自身存在一定缺陷,导致存在可控

  6. CAN协议的学习与理解 - 2

    最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总

  7. ruby - 用 YAML.load 解析 json 安全吗? - 2

    我正在使用ruby2.1.0我有一个json文件。例如:test.json{"item":[{"apple":1},{"banana":2}]}用YAML.load加载这个文件安全吗?YAML.load(File.read('test.json'))我正在尝试加载一个json或yaml格式的文件。 最佳答案 YAML可以加载JSONYAML.load('{"something":"test","other":4}')=>{"something"=>"test","other"=>4}JSON将无法加载YAML。JSON.load("

  8. ruby-on-rails - 安全地显示使用回形针 gem 上传的图像 - 2

    默认情况下:回形针gem将所有附件存储在公共(public)目录中。出于安全原因,我不想将附件存储在公共(public)目录中,所以我将它们保存在应用程序根目录的uploads目录中:classPost我没有指定url选项,因为我不希望每个图像附件都有一个url。如果指定了url:那么拥有该url的任何人都可以访问该图像。这是不安全的。在user#show页面中:我想实际显示图像。如果我使用所有回形针默认设置,那么我可以这样做,因为图像将在公共(public)目录中并且图像将具有一个url:Someimage:看来,如果我将图像附件保存在公共(public)目录之外并且不指定url(同

  9. ruby - 检查网络文件是否存在,而不下载它? - 2

    是否可以在不实际下载文件的情况下检查文件是否存在?我有这么大的(~40mb)文件,例如:http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm这与ruby​​不严格相关,但如果发件人可以设置内容长度就好了。RestClient.get"http://mirrors.sohu.com/mysql/MySQL-6.0/MySQL-6.0.11-0.glibc23.src.rpm",headers:{"Content-Length"=>100} 最佳答案

  10. ruby - 404 未找到,但可以从网络浏览器正常访问 - 2

    我在这方面尝试了很多URL,在我遇到这个特定的之前,它们似乎都很好:require'rubygems'require'nokogiri'require'open-uri'doc=Nokogiri::HTML(open("http://www.moxyst.com/fashion/men-clothing/underwear.html"))putsdoc这是结果:/Users/macbookair/.rvm/rubies/ruby-2.0.0-p481/lib/ruby/2.0.0/open-uri.rb:353:in`open_http':404NotFound(OpenURI::HT

随机推荐