我们在测试多种PHP版本的网站服务器的时候,发现了PHP的返回一个错误的值。随着我们SINE安全的深入测试,我们发现了一个PHP的安全漏洞,这个漏洞可以暴露PHP文件的源代码,可以利用该漏洞来获取网站的数据库的PHP配置文件。
经过进一步的安全测试,我们发现最新版本的PHP没有这个漏洞。我们对不同版本的PHP进行了进一步的安全测试,以确定这个漏洞到底是什么时候修复的。最终发现PHP 7.4.22版本存在该漏洞,我们的技术对未修补版本和已修补版本的代码进行了比较,发现了漏洞的修复细节,通过修复的代码,我们构造了漏洞的利用代码。
GET/phpinfo.php
HTTP/1.1
Host: pd.research\r\n\r\n
GET/ HTTP/1.1\r\n\r\n
我们为了全面了解这个 bug 以及它是如何被修复的,我们编译了带有调试符号的 PHP 的补丁版和未补丁版。为了验证(PoC)的请求,我们触发了代码泄露 bug,并在调试器中观察了代码流。php_cli_server_client_read_request 函数调用了 php_http_parser_execute 函数,正如它的名字所暗示的那样,用于解析 HTTP 请求。该函数的返回值是成功解析的字节数。这个值用于确定请求已经被处理了多少,还剩下多少未被解析。
目前通过我们SINE安全的监控,发现有许多服务器使用了PHP小于7.4.2版本,建议用户尽快升级PHP版本,并将一些数据库配置文件进行加密,防止被黑客利用,通过查查询数据库来获取管理员账户密码,以及用户的资料。