is_numeric()函数安全漏洞和url的%00截断

is_numeric() 函数用于检测变量是否为数字或数字字符串。

这个函数和mysql结合起来就容易出问题,那是因为is_numeric判断的时候,当碰到16进制数的时候,也会判断成数字

is_numeric函数对于空字符%00,无论是%00放在前后都可以判断为非数值,而%20空格字符只能放在数值后。所以,查看函数发现该函数对对于第一个空格字符会跳过空格字符判断,接着后面的判断!

ctf题目测试过程

等式(==)运算符是比较、并测试左边的变量(表达式或常量)是否与右边的变量(表达式或常量)具有相同的值;该运算符进行的比较是松散的。

如果两个值相同(它只比较变量的值,而不是数据类型),则返回true值;如果两个值不相同,则返回false值。

恒等式(===)运算符是进行给定变量或值之间的严格比较;它比较,并查看两个变量(表达式或常量)是否值相等且具有相同的数据类型,即两者都是字符串或两者都是整数等等。

如果两个变量(表达式或常量)包含相同的值和相同的数据类型,则此运算符返回true,否则返回false。

%00截断

在url中%00表示ascii中的0,而ascii中的0作为特殊字符保留,表示字符串结束,所以当url中出现%00会认为读取已结束。

比如

https://127.0.0.1/upfiles/?filename=test.txt 此时输出的是test.txt

加上%00

https://127.0.0.1/upfiles/?filename=test.php%00.txt 此时输出的是test.php

就绕过了后缀限制,可以上传webshell啦。

0x00截断

0x开头表示16进制,0在十六进制中是00, 0x00就是%00解码成的16进制。

这里在php的后面添加了一个空格和字母a,其实a写不写都可以,这里加a是为了显示空格的位置。

空格时为了占位,方便修改00。

user.ini

某网站限制不允许上传.php文件,便可以上传一个user.ini,再上传一个图片马,包含起来进行getshell。不过前期时含有.user.ini的文件夹下需要有正常的php文化节,否则也不能包含了。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值