• 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);
    

      

  • 相关阅读:
    WPF 中 TextBlock 文本换行与行间距
    WPF中TextBox文件拖放问题
    WPF 自定义鼠标光标
    矩形覆盖
    跳台阶和变态跳台阶
    用两个栈实现队列
    重建二叉树
    从尾到头打印链表
    替换空格
    斐波那契数列
  • 原文地址:https://www.cnblogs.com/yangxiaodi/p/7066187.html
Copyright © 2020-2023  润新知