关于缺陷对比函数的学习

本文分享了作者在学习过程中对PHP中缺陷函数如==与===的区别、intval、strpos等函数的理解,以及如何在web安全场景中利用伪协议绕过str_replace过滤,实现payload的构造和flag获取。
摘要由CSDN通过智能技术生成

这是大佬的blog

这几天通过在csdn大佬的blog上的学习,我也对我学习的内容做出以下总结和记录

        关于php上的缺陷对比函数,关键在于对php语言的理解和对函数的理解,只有了解了这个函数的特性才能对该函数做出对应的操作。

        首先,是==和===,在我看来也是很重要的一部分。==会对数据进行比较,但是不会对数据的类型进行比较,我的学习理解是,既然==只会是从左到右筛选数字,那么非数字部分(如字符)就会被筛选掉,从而达成绕过,因为比较简单所以显得不是很严谨。而===除了会对数据进行比较,还会对其类型进行比较,这就显得它比前者更为严谨,稍微更难绕过。而在MD5函数缺陷绕过时,二者的区别也显得更大,前者可以通过0e绕过来进行,而后者对MD5加密后的值比较,在比较数据的是同时还比较类型。这就需要我们从类型上也统一来进行绕过。

        其次就是

1.intval函数:它会默认会将里面的数据转换成十进制整数,当base等于0时就根据数据的前缀进行进制转换。

2.strpos函数:第一个参数为搜索的字符串。第二个参数为要查找的字符串。第三个参数为从哪个位置开始查找。

3.in_array:第一个参数代表要在数组中搜索的值。第二个参数代表要搜索的数组。第三个参数如果不是true就代表不会监测数据类型,就等于是==,容易绕过。如果不判断数据类型,那么1.0  +1  1e  1x等皆==1

4.preg_match:只能处理字符串,如果不按规定传一个字符串,通常是传一个数组进去,这样就会报错。当输入正常数据时被正常过滤,这时就要进行输入数组进行绕过。(这个也出现在了开学考试中)

5.str_replace:第一个参数为要被替换字符。第二个参数被替换成的数据。第三个参数为被搜索的字符串。因为只能过滤一次,那就可以多写点被过滤的字符,也就是说如果参数为多个过滤字符的叠加,那么只会被过滤其中一个。

       

以web中的题目为例,通过robots协议,得到了网页的其他部分,通过提示,访问页面,得到了php代码

通过注释可知,这可能是一个包含的题目,并且有无法迭代过滤str_replace,那么也就是说,base为要被替换字符,被替换成的数据是“???”,被搜索的字符串是flie。那么也就是说在我们使用伪协议来构造payload时,base会被过滤。明白了这一点,我们就可以提前采取措施(绕过),来防止base被过滤导致的代码无效。

最终得到了flag

顺便记录下,php伪协议的代码

php://filter/read=convert.base64-encode/resource=index.php
php://filter/resource=index.php

纯小白,如有错误欢迎指正。

        

  • 17
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值