php伪协议漏洞_php伪协议,利用文件包含漏洞

本文详细介绍了PHP中的伪协议,如php://filter、file://、phar://、zip://、data:以及http://在文件包含漏洞中的利用方式。通过实例展示了如何利用这些协议读取本地文件、执行PHP代码,以及访问压缩包内的文件。同时,提到了PHP的allow_url_fopen和allow_url_include配置对安全的影响。文章还探讨了如何防御这类漏洞,包括文件包含漏洞的类型和防范措施。
摘要由CSDN通过智能技术生成

php支持多种封装协议,这些协议常被CTF出题中与文件包含漏洞结合,这里做个小总结。实验用的是DVWA平台,low级别,phpstudy中的设置为5.4.45版本,

设置allow_url_fopen和allow_url_include都为On.

index.php

4c49104dfc842e81d8319cbf779b93ed.png

index.php同级目录下有mytest001.txt ,

L3Byb3h5L2h0dHAvMTE5LjIzLjI0OS4xMjAvd3AtY29udGVudC91cGxvYWRzLzIwMTgvMDYvUVElRTYlODglQUElRTUlOUIlQkUyMDE4MDYwNjE3MTMzNy5wbmc=.jpg

mytest002.txt ,

7e3885af0ccb339f3211c49537e8d875.png

mytest003.zip(其中包含mytest003.txt).

bd6089b98d0852859e7887d2e21ce041.png

有个小失误,应该写成test003的。

再说明一下,include()函数对文件后缀名无要求,而对其中的语法有要求,即使后缀名为txt,jpg也会被当做php文件解析,只要文件内是<?php   ?>形式就可以执行,但是如果不是php语法的形式,即使后缀为php,也无法执行。

一,php://  访问输入输出流,有两个常用的子协议

1,php://filter  设计用来过滤筛选文件

用法

非php语法文件include失败,直接输出源码内容。

383a9ff36fd7d434c9195b22578012cc.png

php语法文件include成功,直接运行

e1826c5e1c355e865656dad000866dd2.png

如果想要读取运行php文件的源码,可以先base64编码,再传入include函数,这样就不会被认为是php文件,不会执行,会输出文件的base64编码,再解码即可。

6457ff8cfc49baf596e9c002fbbedb69.png

da9334f67ada70d6fc929b9d2ec016dc.png

若采用rot13编码,对php文件中的<?是无效的 ,仍会被认为是php文件去执行,但其中的内容是乱码的,是没有输出效果的。

ecda153c1f2f07462a3a13f05d94f6c9.png

4f819bec93e6a192752c2c841919b9c2.png

76e97d68911067cc95764696755816f1.png

2,php://input

这个协议的利用方法是 将要执行的语法php代码写在post中提交,不用键与值的形式,只写代码即可。

12e5b68a6b0d42f6432a65e033b51fb4.png

如果可以自己构造代码,就可以看到更重要的信息:

8f66f1ba71bd9908d68dadb215e2aac5.png

二,file:// 与php:filter类似,访问本地文件,但是只能传入绝对路径

459a0add2bb89d1a4562830dbe903ae5.png

三,phar://  可以查找指定压缩包内的文件

1,传入绝对路径

fcfa55009fb5416fff1a84d6c39c4772.png

2,传入相对路径,即同级目录下的文件

e4df737a3fda7f59105f715bac15a8ff.png

四,zip://  用法与phar类似,不过有两点要注意

1,只能传入绝对路径。

2,要用#分隔压缩包和压缩包里的内容,并且#要用url编码%23

31d7fe9d0b51e1573d669ff28337a8d8.png

五,data  与input 类似,都是用户可以控制传入的php代码

1,直接写入代码

data: text/plain,<?php 执行内容 ?>

5c4fc847bcd88dc1d43ec47db855477d.png

2,使用base64编码

data:text/plain;(注意是分号不是逗号,与前面不同)base64,编码后的php代码

cec8d4f29e1520335e91fe2c9000b192.png

有一点要注意的问题,base64编码后的加号和等号要手动的url编码,否则无法识别。

b56b4ab5b531b5c2d5ef78221b2526c9.png

同样的,给了自己写代码的权利,就可看到更多东西

1f30b22de35ae20bbdb2a871385976fb.png

六,http协议

include中也可以传入外部链接,采用http://,具体怎么利用以后再来填坑。

07ea81b4ee694db8b2c0f8d4c3553848.png

最后来总结一下,

php://filter  file:// 可以访问本地的文件

zip://  phar://  可以访问本地压缩文件

php://input  data:  可以自己写入php代码

关于allow_url_fopen和allow_url_include的设置和用法这里有个总结:

e5b2fb6035793a2a95e9f4e63067ed28.png

PHP文件包含漏洞攻防实战(allow&lowbar;url&lowbar;fopen、open&lowbar;basedir)

摘要 PHP是一种非常流行的Web开发语言,互联网上的许多Web应用都是利用PHP开发的.而在利用PHP开发的Web应用中,PHP文件包含漏洞是一种常见的漏洞.利用PHP文件包含漏洞入侵网站也是主流的 ...

PHP文件包含漏洞攻防实战

本文对PHP文件包含漏洞的形成.利用技巧及防范进行了详细分析,并通过一个真实案例演示了如何利用PHP文件包含漏洞对目标网站进行渗透测试,最终成功获取到网站的WebShell. PHP是一种非常流行的W ...

文件包含漏洞File Inclusion

文件包含漏洞 目录遍历漏洞在国内外有许多不同的叫法,也可以叫做信息泄露漏洞.非授权文件包含漏洞等. 文件包含分类 LFI:本地文件包含(Local File Inclusion) RFI:远程文件包含 ...

文件包含漏洞(DVWA环境中复现)

LOW: 源代码: <?php // The page we wish to display $file = $_GET[ 'page' ]; ?> 可以看到,low级别的代码对包含的文件 ...

php安全开发(1)文件包含漏洞

开发过程总结的漏洞: 一,,如何造成包含漏洞:在通过函数包含文件时,由于没有对包含的文件名进行有效的过滤处理,被攻击者利用从而导致了包含了Web根目录以外的文件进来,就会导致文件信息的泄露甚至注入了恶 ...

jsp的文件包含漏洞

jsp的文件包含分静态包含的动态包含两种: 静态包含: 动态包含:

php&colon;&sol;&sol;filter&lpar;文件包含漏洞利用&rpar;及php&colon;&sol;&sol;input

1. php://filter 文件包含漏洞:https://blog.csdn.net/fageweiketang/article/details/80699051 筛选过滤应用: 1. 字符串过滤 ...

phpMyAdmin 4&period;8&period;x 本地文件包含漏洞利用

phpMyAdmin 4.8.x 本地文件包含漏洞利用 今天ChaMd5安全团队公开了一个phpMyAdmin最新版中的本地文件包含漏洞:phpmyadmin4.8.1后台getshell.该漏洞利用 ...

php文件包含漏洞(利用phpinfo)复现

利用docker复现该漏洞,访问http://192.168.80.156:8080/phpinfo.php,可以看到页面出现phpinfo页面 再访问http://192.168.80.156:8 ...

随机推荐

Metrics&period;NET 项目

Metrics.NET(https://github.com/etishor/Metrics.NET)是一个给CLR 提供度量工具的包,它是移植自Java的metrics,在c#代码中嵌入Metric ...

Hudson&lpar;Jenkins&rpar;持续集成插件开发环境搭建

Hudson持续集成插件开发环境搭建 第一步安装java jdk,至于版本的话推荐1.6以上吧.安装好jdk设置环境变量,确保你在cmd中输入java -version有提示你jdk的版本信息等,也就 ...

在Android的webview中定做js的alert&comma;confirm和prompt对话框的方法

在Android的webview中定制js的alert,confirm和prompt对话框的方法 http://618119.com/archives/2010/12/20/199.html 1.首先 ...

查看JVM内存

你知道如何进行JVM内存查看,这里和大家分享几个JVM内存查看方法,希望对你的学习有所帮助,通常情况下可以用代码查看,也可以在eclipse中增添相关信息后直接查看. JVM内存查看方法 可以用代码查 ...

html的target用法

_blank -- 在新窗口中打开链接 _parent -- 在父窗体中打开链接 _self -- 在当前窗体打开链接,此为默认值 _top -- 在当前窗体打开链接,并替换当前的整个窗体(框架页), ...

python每日学习2018&sol;1&sol;11

A.4 Python 关键字和内置函数 Python包含一系列关键字和内置函数,给变量命名时,知道这些关键字和内置函数很重要. 编程中面临的一个挑战是给变量指定合适的名称,变量名可以是任何东西,只要它 ...

React中路由传参及接收参数的方式

注意:  路由表改变后要重启服务      方式 一:          通过params         1.路由表中                    

Linux性能优化 第二章 性能工具:系统CPU

2.1 CPU性能统计信息 2.1.1运行队列统计 在Linux中,一个进程要么是可运行的,要么是阻塞的(正在等待一个事件的完成).阻塞进程可能在等待从I/O设备来的数据,或者是系统调用的结果如果一个 ...

Spring中的&commat;Transactional 放在 类级别 和 方法级别 上有什么不同?

Spring中的@Transactional 放在类级别 和 方法级别 上有什么不同? @Transactional放在类级别上是否等同于该类的每个方法都放上了@Transactional? 是的一般 ...

【Mybatis】Mybatis元素生命周期

一.SqlSessionFactoryBuilder SqlSessionFactoryBuilder是利用XML或者Java编码获得资源来构建SqlSessionFactory的,通过它可以构建多个 ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值