php git的一些查找代码漏洞方法
2020-01-05
前言
2020年好,各位 PHPer 们,很久没有写原创文章了,心里实在过意不去,决定写点文字,"从心"出发,以求共鸣。
背景
今天打开 php.net ,忽地发现 PHP 7.4.1 正式版本都已经发布了,感慨万千。想当年,自己从 PHP 5.1 版本作为学习起点,一直到 PHP 7.2 版本,已经学了十多年了。不得不说,这些年 PHP 的变化确实很多也很大,期间还炒了很长一段时间 PHP 6,但 6 在西方属于不吉利数字,所以跳过了。众所周知,PHP 是一门动态类型的语言,因此其编程时的灵活度和自由度会比强类型语言更高,然而正是这种特性使得它存在着与生俱来无法完整覆盖测试的漏洞场景。
操作步骤
第1步、打开 PHP 7.4.1 变更记录(https://www.php.net/ChangeLog-7.php#7.4.1)网址,如下图:
我们发现了好几个 CVE (CVE 的英文全称是“Common Vulnerabilities & Exposures”),即公共漏洞和暴露,而这种漏洞通常就是上一个版本存在的安全漏洞。
第2步、打开 bug.php.net 打开某个 bug
的详情(https://bugs.php.net/bug.php?0" cellspacing="0" >
In PHP versions 7.2.x below 7.2.26, 7.3.x below 7.3.13 and 7.4.0, PHP bcmath extension functions on some systems, including Windows, can be tricked into reading beyond the allocated space by supplying it with string containing characters that are identified as numeric by the OS but aren't ASCII numbers. This can read to disclosure of the content of some memory locations. | |
References |
---|
英文我就不翻译了,如果感兴趣,请自行想办法。
第3步、使用 php-src 官方源码,我在 gitee 上同步了一份来自 github 的源码,仓库地址:https://gitee.com/gopro/php-src.git,直接克隆一份到本地,git clone https://gitee.com/gopro/php-src.git。
第4步、使用 PHPStorm 打开 php-src 源码,如下图所示:
接着,切换分支到 PHP-7.4.1 ,在 php-src 目录右键
选择 Remote Branches -> origin/php-7.4.1 -> checkout。
第5步、比较 PHP-7.4.1 分支与 PHP-7.4.0 分支的目录改动区别。如下图操作:
第6步、我们鼠标双击图中的 str2num.c 文件,根据PHP 7.4.1 的 changelog 我们可以直接推断,这个变动应该就是修复了 CVE-2019-11046这个漏洞的,我们再来看看对应的文件变更比较:
这里已经比较明显了,如果有同学能够看懂 PHP 源码,可以继续深究一下了,本文纯属抛砖引玉。