Web安全之PHP的伪协议漏洞利用,以及伪协议漏洞防护方法_php伪协议是漏洞吗

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

今天介绍一个比较冷门的知识,只有在PHP环境中存在的伪协议漏洞,那么什么是PHP伪协议呢?PHP伪协议事实上就是支持的协议与封装协议。可用于类似 fopen()、 copy()、 file_exists() 和 filesize() 的文件系统函数。 除了这些封装协议,还能通过 stream_wrapper_register() 来注册自定义的封装协议。ctf中的文件包含、文件读取的绕过、正则的绕过等等会需要用到。

二、伪协议的原理

PHP伪协议是一种在PHP处理数据时,通过替换数据报的头部信息来欺骗网络协议的方式来提高性能的技术。该技术可以让PHP在读取数据时直接读取内存中的数据,而不需要解析数据报。
PHP伪协议的原理是,在数据报的头部中添加一个特殊的标志位,用于指示该数据报是伪协议数据报。当PHP读取数据报时,它会检查该标志位是否为0.如果标志位为0,则它将直接读取内存中的数据;如果标志位为1,则它将会解析数据报,并根据数据报的头部信息来执行相应的操作。
PHP伪协议的主要应用场景是缓存和压缩数据。通过数据报的头部添加特殊标志位,PHP可以在读取数据时直接读取缓存中的数据,而不需要进行解析。这对于提高缓存命中率和压缩数据非常有用。
需要注意的是,由于PHP伪协议是通过替换数据报的头部信息来实现的,一次它可能会对网络协议的完整性产生冲突。如果网络协议的头部信息被PHP伪协议替换了,可能会导致网络协议的完整性被破坏,从而导致通信中断。因此,在进行网络通信时,需要特别小心使用PHP伪协议技术。

三、伪协议的利用

PHP伪协议共有12种,具体如下:

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

接下来我们选取几个特例用来演示伪协议的使用技巧

3.1 file:// 协议

--------本地文件传输协议
file:// 用于访问本地文件系统,比如:在CTF中通常用来读取本地文件的且不受配置文件中allow_url_fopen与allow_url_include的影响。
格式:

www.xxx.com?cmd.php=file://[文件的绝对路径和文件名]

通过这个格式就可以读取到部署www.xxx.com服务器指定目录的文件了

3.2 php://协议

重头戏了属于是,php:// 是ctf的常客,所以关于它的故事很多。
使用条件(php.ini配置):

allow_url_fopenallow_url_include
php://inputon/offon
php://stdinon/offon
php://memoryon/offon
php://tempon/offon
php://filteron/offon/off

看着确实挺多的,有点迷糊,但是只需要记住php://input 以及 php://filter 就行了,就这俩常用
php://filter

名称描述
resource<—>要过滤的数据流这是个必要参数。它指定了你需要筛选过滤的数据流(简单来说就是你的数据来源)
read<—>读链的筛选列表这个参数可选。可以设定一个或多个过滤器名称。以管道符(/)分隔
write<—>读链的筛选列表这个参数可选。可以设定一个或多个过滤器名称。以管道符(/)分隔

举个例子,就以靶场http://buuoj.cn 这个上面的提为例:
在这里插入图片描述
题目给了提示,文件包含,所以这个p盲猜是include内的参数,所以直接输入flag试试
在这里插入图片描述
这样读取并未获取到想要的信息,此时,我们考虑使用伪协议间接读取它的源码
在这里插入图片描述
通过在url后面添加了伪协议读取方式,我们就将它的源码以base64的编码格式读取出来了,通过这个例子,我们通过php://filter伪协议将服务器中的flag.php文件源码读取出来了,说明这个伪协议可能造成源码或者服务器敏感信息泄露。

php://filter 是一种元封装器, 设计用于数据流打开时的筛选过滤应用。这对于一体式(all-in-one)的文件函数非常有用,类似 readfile()、 file() 和 file_get_contents(), 在数据流内容读取之前没有机会应用其他过滤器。

php://filter读取源码可以使用以下的一些命令:

读:php://filter/resource=文件名
php://filter/read=convert.base64-encode/resource=文件名
写:php://filter/resource=文件名&txt=文件内容
php://filter/write=convert.base64-encode/resource=文件名&txt=文件内容

3.3 zip://,bzip2://,zlib://协议

zip://, bzip2://, zlib:// 均属于压缩流,可以访问压缩文件中的子文件,更重要的是不需要指定后缀名
在这里插入图片描述
zip://协议
格式:

zip:// [压缩文件绝对路径]#[压缩文件内的子文件名]

本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。

最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。

最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。

学习路线图

其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。

相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。

网络安全工具箱

当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。

项目实战

最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~

面试题

归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

  • 17
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值