在深度剖析PbootCMS 3.0.4版本的SQL注入漏洞过程中,我们从复现开始,逐步解析其背后的技术细节。
首先,复现漏洞页面需输入特定URL,如访伏轿猛问http://127.0.0.1/?search
或 http://127.0.0.1/?keyword
,并尝试通过POST请求输入1=select 1。
接下来,通过正向分析追踪代码流程,从入口index.php开始,经过加密处理后调用Kernel.php的_empty方法,最终导向主页。主页加载时,实际调用的是SearchController类的index方法。
在SearchController中,调用了ParserController的parserSearchLabel方法,这一过程涉及到对keyword的GET请求处理。有趣的是,通过POST请求而非GET,可以绕过keyword变量的销毁,直接向系统发送1=select 1的SQL命令。
之后,代码路径进入request函数,该函数对POST数据进行过滤,只允许包含中文、字母、数字、横线、点、逗号、空帆念格的字符。过滤后,数据通过escape_string函数进一步处理,使用htmlspecialchars和addslashes函数对SQL命令进行转义,以避免直接执行。
最终,数据流转至ParserModel的getLists方法,此处对SQL语句进行拼接操作。在该方法中,通过where方法在select语句中添加条件,从而将注入的SQL命令整合到最终的查询语句中。
综上所述,PbootCMS 3.0.4版本在处理用户输入时存在SQL注入的风险,通过特定的POST请求策略,可以绕缺桥过常规过滤机制,将恶意SQL命令注入系统,从而对数据进行非法操作。