从源码级别了解PHP %00截断原理
一:漏洞简介
PHP的00截断是5.2.x版本的一个漏洞,当用户输入的url参数包含%00经过浏览器自动转码后截断后面字符。
二:漏洞示例代码
<?phpinclude "1.txt\000.jpg";
?>
测试文件1.txt如下
<?phpecho 'fireXXX';
?>
php5.2.x版本解析1.php时,会将1.txt\000.jpg解释为1.txt
三:漏洞源码分析
![](/assets/blank.gif)
四:修复代码分析
if (Z_LVAL(opline->op2.u.constant) != ZEND_EVAL && strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)) {if (Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE_ONCE || Z_LVAL(opline->op2.u.constant)==ZEND_INCLUDE) {zend_message_dispatcher(ZMSG_FAILED_INCLUDE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);} else {zend_message_dispatcher(ZMSG_FAILED_REQUIRE_FOPEN, Z_STRVAL_P(inc_filename) TSRMLS_CC);}}
代码
strlen(Z_STRVAL_P(inc_filename)) != Z_STRLEN_P(inc_filename)
中, Z_STRVAL_P(inc_filename)即上图中的val,即"1.txt",strlen取得长度为5,而 Z_STRLEN_P(inc_filename)即上图中的len即10。
![](/assets/blank.gif)
从源码级别了解PHP %00截断原理相关推荐
- 深度分析Java的ClassLoader机制(源码级别)
转载自 深度分析Java的ClassLoader机制(源码级别) Java中的所有类,必须被装载到jvm中才能运行,这个装载工作是由jvm中的类装载器完成的,类装载器所做的工作实质是把类文件从硬盘读取 ...
- uni-app开发:(源码级别)uni-badge样式修改(自定义插槽)
文章目录 uni-app开发:(源码级别)uni-badge样式修改(自定义插槽) 一.效果图需求说明: 二.源码 · 修改前后对比: 2.1. 修改前 2.2. 修改后 三.调用代码: 附件:uni ...
- Android源码级别开发
Android源码级别开发 1.课程简介(3) 1.系统开发概述 2.系统编译简介 3.源码查看工具 4.系统启动流程 5.Handler消息机制 6.AsyncTask原理 系统架构的回顾(13) ...
- oauth2源码级别解析报错原因:There is no client authentication. Try adding an appropriate authentication filter
请求地址:localhost:40150/oauth/token/?grant_type=mobile_password 请求头, Basic 是 client_id 和 client_secret ...
- CoreCLR源码探索(八) JIT的工作原理(详解篇)
在上一篇 我们对CoreCLR中的JIT有了一个基础的了解,这一篇我们将更详细分析JIT的实现. JIT的实现代码主要在https://github.com/dotnet/coreclr/tree/m ...
- 第八课 k8s源码学习和二次开发原理篇-KubeBuilder使用和Controller-runtime原理
第八课 k8s源码学习和二次开发原理篇-KubeBuilder使用和Controller-runtime原理 tags: k8s 源码学习 categories: 源码学习 二次开发 文章目录 第八课 ...
- vue 源码自问自答-响应式原理
vue 源码自问自答-响应式原理 最近看了 Vue 源码和源码分析类的文章,感觉明白了很多,但是仔细想想却说不出个所以然. 所以打算把自己掌握的知识,试着组织成自己的语言表达出来 不打算平铺直叙的写清 ...
- fdct算法 java_ImageSharp源码详解之JPEG压缩原理(3)DCT变换
DCT变换可谓是JPEG编码原理里面数学难度最高的一环,我也是因为DCT变换的算法才对JPEG编码感兴趣(真是不自量力).这一章我就把我对DCT的研究心得体会分享出来,希望各位大神也不吝赐教. 1.离 ...
- 第十四课 k8s源码学习和二次开发原理篇-调度器原理
第十四课 k8s源码学习和二次开发原理篇-调度器原理 tags: k8s 源码学习 categories: 源码学习 二次开发 文章目录 第十四课 k8s源码学习和二次开发原理篇-调度器原理 第一节 ...
最新文章
- Python 常见的坑汇总
- PostgreSQL的德哥教程
- Linux图形界面与命令行模式切换
- Python3有哪几种数据类型?
- umask详解、cwd简介
- linux jdk环境变量配置
- SCI论文写作训练营笔记汇总03_科技论文写作(方法篇)
- bootstrap 栅栏布局中 col-xs-*、col-sm-*、col-md-*、col-lg-* 区别及使用方法
- 安卓system镜像分区_玩机爱好者想要的PT分区到底是什么?可以使现有的安卓系统更快!...
- 写个随笔解解闷-书签漫游
- 上达最高精度,下到最快速度,Scaled-YOLOv4:模型缩放显神威
- java 随机手机验证码_基于Java随机生成手机短信验证码的实例代码|chu
- android 数据库 字节数组,java - 如何使用活动的android序列化字节数组并将其存储到数据库中? - 堆栈内存溢出...
- c#学习笔记01——引用类
- python实现翻转给定列表中的元素
- 系统同传软件_语情快递 | 手语同传AI,你见过吗?
- 严把质量关、做好可靠性与环境试验,不做被车压塌的桥!
- 滑动门套滑动门css,CSS 实现滑动门的实例代码
- IOS视频播放器的使用(MPMoviePlayerController)
- python画一个心形照片墙怎么摆_这个七夕节,用Python为女友绘制一张爱心照片墙吧!...