易软天创旗下的禅道、然之、蝉知等产品,用的都是他们自行开发的zentaoPHP框架。然而这个框架在设计时判断不严谨。这导致了在使用过程中极易发生安全问题。
首先看漏洞的入口`ZenTaoPMS.7.3.stable\zentaopms\module\bug\control.php`,64行。注意看$orderBy变量。
我们再看一下`getAllBugs`。
现在,orderBy通过browse函数进入到了getAllBugs,最终带入到zentaoPHP的核心数据库类 dao。禅道、然之、蝉知都是使用的这个数据库类。
接下来我们看看orderBy是怎么被解析的。关键代码在 `/lib/dao/dao.class.php`,1616行。
函数的处理过程,我在代码中简单做了注释。实际上orderBy中的限制很多,不能有逗号,下划线,不能有limit,点号也不能乱用。作为一个核心的数据库类,判断还算比较严谨的。但是我们还是可以一步步的去破解。
假设此处没有任何字符限制,我打算这么构造语句:
但是由于语句中不能有分号,所以我要把语句变形。
如果目标的数据库前缀没有下划线,那么注入不成问题。