preg_replace引发的phpmyadmin(4.3.0-4.6.2)命令执行漏洞

Posted 羊小弟

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了preg_replace引发的phpmyadmin(4.3.0-4.6.2)命令执行漏洞相关的知识,希望对你有一定的参考价值。

编辑器坏了 (: 

今天看到这个phpmyadmin的代码执行,https://www.waitalone.cn/phpmyadmin-preg_replace-rce.html

 

记录一下:preg_replace()函数
http://php.net/manual/zh/function.preg-replace.php
php 7.0.0不再支持 /e修饰符。 请用 preg_replace_callback() 代替。
php 5.5.0/e 修饰符已经被弃用了。使用 preg_replace_callback() 代替。参见文档中 PREG_REPLACE_EVAL 关于安全风险的更多信息。

  

 
如果是 preg_replace("/".$find."/",$_GET["a"],$fromsqldata);     
没有/e修饰符,第一次参数可控,那么在第一个参数进入数据库中又从数据库中取出的话,就能进行00截断。
看完漏洞以后就在想如果$find参数是用$_GET来获取的呢,有办法进行命令执行吗?

 

$find=$_GET[‘find‘];
$fromsqldata = ‘0/e‘;
echo preg_replace("/".$find."/",$_GET["a"],$fromsqldata);

  

感觉应该是没有的,因为php5.5.0    /e 修饰符就无效了,而5.5以下的GPC默认是开启的。对于%00会自动进行过滤,所以没法进行命令执行。
或者调用stripslashes()函数来删除GPC带来的转义。

 

$find=stripslashes($_GET[‘find‘]);
$fromsqldata = ‘0/e‘;
echo preg_replace("/".$find."/",$_GET["a"],$fromsqldata);

  

以上是关于preg_replace引发的phpmyadmin(4.3.0-4.6.2)命令执行漏洞的主要内容,如果未能解决你的问题,请参考以下文章

(CVE-2016-5734)phpmyadmin反序列化漏洞复现

(CVE-2016-5734)phpmyadmin反序列化漏洞复现

(CVE-2016-5734)phpmyadmin反序列化漏洞复现

(CVE-2016-5734)phpmyadmin反序列化漏洞复现

如何将 CSV 导入 phpMyAdmin?

WAMP - phpMyAdmin [错误 #2002]