PHP一次性爆出三个cve漏洞
时间:2015-6-21 10:00 作者:admin 分类: 网络安全
研究人员在近期发现php三个漏洞。这三个漏洞分别是:os命令注入漏洞、在堆里面的整型溢出漏洞,还有个本地段错误漏洞。第一个是新漏洞,后两个是由于补丁修补不全重新导致的漏洞。
首先让我们来看第一个漏洞:OS command injection vulnerability in escapeshellarg[CVE-2015-4642.]
顾名思义,第一个漏洞是一个函数命令注入漏洞。
贴上poc:
poc.php
1
2
3
4
5
6
7
|
<?php
?>
|
1
2
3
4
|
<?php
?>
|
arginfo.php
根据poc,我们发现是一个escapeshellarg()函数命令注入漏洞。
图1:
根据我的本地测试以及作者告诉我们如果输出图1中的内容,则表示你的php版本存在该漏洞。
图2:
若是图2则表示漏洞已经修复。
输出output如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
string(2) "a\"
string(4) string(7) "b -c d\"
string(9) --- ARG INFO ---
array }
|
根据poc作者的解释:
前4行输出的结果是poc.php中var_dump函数的功能。通过比较输出结果与poc.php中第4、5两行,从escapeshellarg函数的输出结果可以看出攻击者可以设置一个字符串,而不是绕过一个参数。
同样,第10行在arginfo.php,这是通过var_dump输出的。通过比较,我们发现系统函数被调用在poc.php的时候是两个参数的,但是在命令行解释的时候是3个参数的。
根据https://git.php.net/?p=php-src.git;a=commitdiff;h=d2ac264ffea5ca2e85640b6736e0c7cd4ee9a4a9发布的补丁信息,我们发现他们过滤了。
通过我们实验室的小伙伴的测试,作者给的poc只有PHP 5.6.9版本受影响,另外测试的PHP 5.4.41不受影响。
接下来是第二个漏洞:PHP 5.6.9 Integer overflow in ftp_genlist() resulting in heap overflow [CVE-2015-4643]
根据Max Spelsberg的邮件内容,我们知道在recv loop,size 可以被递增两处。一个在‘size+=rcvd’,另一个在‘size++’。这意味着size可以递增超过rcvd的每次迭代,从而使溢出检查能够被绕过。
Size能够递增最多rcvd*2次迭代,这就是为什么我曾建议修复rcvd*2,而不仅仅是rcvd。
为了正确的修复这个bug,我建议除了溢出检查以外,还需要排除其他原因导致size通过rcvd增加,或者通过迭代。从而保证溢出检查不被绕过。
值得注意的是,并不是因为分支功能不是必要的,就没必要使其复杂化。
另外我们通过,http://git.php.net/?p=php-src.git;a=commitdiff;h=0765623d6991b62ffcd93ddb6be8a5203a2fa7e2补丁对比 ,
发现对size进行了处理。
最后,让我们来看第三个漏洞:segfault in php_pgsql_meta_data
根据官方bug详情,用一段特殊的php代码,可以引起一个段错误在php_pgsql_meta_data。
1
|
pg_insert( |
这是因为#68741的不完全修复导致的。
Strok_r的返回值不在php_pgsql_meta_data检查导致的一个本地段错误。
详细补丁可通过https://git.php.net/?p=php-src.git;a=commitdiff;h=2cc4e69cc6d8dbc4b3568ad3dd583324a7c11d64查看比较。
综上所述,前两个漏洞要想利用,给看远程的PHP代码是怎么写的,才能触发,而且都是针对PHP 5.6.9这个版本的。最后一个是本地的漏洞,实际攻击用处不大。
推荐阅读: