php git的一些查找代碼漏洞方法
2020-01-05
前言
2020年好,各位 PHPer 們,很久沒有寫原創(chuàng)文章了,心里實在過意不去,決定寫點文字,"從心"出發(fā),以求共鳴。
背景
今天打開 php.net ,忽地發(fā)現(xiàn) PHP 7.4.1 正式版本都已經(jīng)發(fā)布了,感慨萬千。想當(dāng)年,自己從 PHP 5.1 版本作為學(xué)習(xí)起點,一直到 PHP 7.2 版本,已經(jīng)學(xué)了十多年了。不得不說,這些年 PHP 的變化確實很多也很大,期間還炒了很長一段時間 PHP 6,但 6 在西方屬于不吉利數(shù)字,所以跳過了。眾所周知,PHP 是一門動態(tài)類型的語言,因此其編程時的靈活度和自由度會比強類型語言更高,然而正是這種特性使得它存在著與生俱來無法完整覆蓋測試的漏洞場景。
操作步驟
第1步、打開 PHP 7.4.1 變更記錄(https://www.php.net/ChangeLog-7.php#7.4.1)網(wǎng)址,如下圖:
我們發(fā)現(xiàn)了好幾個 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 分支的目錄改動區(qū)別。如下圖操作:
第6步、我們鼠標(biāo)雙擊圖中的 str2num.c 文件,根據(jù)PHP 7.4.1 的 changelog 我們可以直接推斷,這個變動應(yīng)該就是修復(fù)了 CVE-2019-11046這個漏洞的,我們再來看看對應(yīng)的文件變更比較:
這里已經(jīng)比較明顯了,如果有同學(xué)能夠看懂 PHP 源碼,可以繼續(xù)深究一下了,本文純屬拋磚引玉。