0x1 isnumeric()函数的绕过
来源:互联网 发布:八字奶 知乎 编辑:程序博客网 时间:2024/05/21 19:44
原题:
<?phpshow_source(__FILE__);$flag = "xxxx";if(isset($_GET['time'])){ if(!is_numeric($_GET['time'])){ echo 'The time must be number.'; }else if($_GET['time'] < 60 * 60 * 24 * 30 * 2){ echo 'This time is too short.'; }else if($_GET['time'] > 60 * 60 * 24 * 30 * 3){ echo 'This time is too long.'; }else{ sleep((int)$_GET['time']); echo $flag; } echo '<hr>'; }?>
根据原题意思,第一步判断参数time是否为数字或者数字字符串,然后判断是否在60*60*24*30*2和60*60*24*30*3之间,如果满足上述条件,然后睡上time这么长的时间输出flag
但是明显的是我们不能等上2~3个月的时间让flag输出来
重新看源码,可以看到最后sleep用了一个int类型的强制类型转换,可以用一些比较特殊的time值经过截取后获取一个较小的time值,重新看is_numeric函数
is_numeric()函数存在一个绕过方式就是输入十六进制进行SQL注入,把1 or 1之类的十六进制输入进去,但是在这里不是进行SQL注入,我们绕过的是时间大小的限制
通过计算器,我们可以得到限制的时间范围最小是5184000秒,转换成16进制就是0x4F1A00
传参time=0x4F1A00,通过了四次判断,GET获取值类型为字符串,最后sleep函数中进行类型转换的时候0x4F1A00,遇到字母就停止转换,变成了0,也就不用睡觉了
最后得出结果
阅读全文
0 0
- 0x1 isnumeric()函数的绕过
- 感觉意外的IsNumeric()函数
- 微软的IsNumeric函数有错误
- & 0x1的效果
- Javascript中的IsNumeric函数
- 重写ISNUMERIC函数
- Delphi版 IsNumeric 函数
- SQL中ISNUMERIC函数
- mysql自定义函数IsNumeric
- 坑人的SQL Server检测数字类型的函数ISNUMERIC
- python中str函数isdigit、isdecimal、isnumeric的区别
- python中str函数isdigit、isdecimal、isnumeric的区别
- python中str函数isdigit、isdecimal、isnumeric的区别
- C#的isnumeric。
- C#的isnumeric。
- ISNUMERIC
- 自己写的一个isNumeric。
- delphi中输入框不能输入初数字意外的字符串的函数(IsNumeric)
- 《深入理解JAVA虚拟机》笔记之JVM分区
- 自定义控件,
- 【笔记】天地图Demo
- Spring Cloud微服务升级总结
- android中各种height和width总结
- 0x1 isnumeric()函数的绕过
- Java中事务的提交与回滚
- 机器学习之特征工程
- 驱动开发学习笔记(1)–INF文件-1
- arcgis10.2制作符号并链接符号库
- oracle 登陆密码忘记措施
- vim
- Azkaban-开源任务调度程序(使用篇)
- 菜鸟学习历程【11】数据结构