禅道开源版Search模块的wordssql注入漏洞
禅道开源版21.4search模块的wordssql注入漏洞
前言
最近在网上看到了相关漏洞,最近也闲来无事,想着跟着来复现一下。
影响版本
<=21.4(禅道开源版最新版)
漏洞复现
环境搭建
1 | dockerpulleasysoft/zentao:21.4 |
登录进后台首页后,在右下角的搜索输入框里随便输入,然后访问搜索结果
正常显示没有问题
在word处加入单引号出现报错
发现存在sql注入漏洞,
1 | sqlmapresumedthefollowinginjectionpoint(s)fromstoredsession: |
漏洞分析
根据报错查找相关文件
1 | #3module/search/control.php(359):searchModel->getList('123'','all',Object(pager)) |
根据报错点查看module/search/control.php文件搜索words找到index方法
发现search模块的words参数通过get和post传入,没经过任何过滤就传给getlist处理
追踪getlist
其就在module/search/model.php中实现
传进去的参数会经过getsqlparams函数处理后,$againstCond和$likeCondition会被拼进sql语句
继续跟进
调用module/search/tao.php中的getSqlParams函数来处理words
可以看到keywords没有经过任何过滤或者转义,againstCond的拼接过程中,words被直接添加到查询条件中,没有进行任何过滤或转义处理。如果$word是单引号’,它会被包含在+运算符和双引号内导致生成的SQL查询语句不正确。likeCondition直接将$keywords插入到SQL查询中没有进行任何过滤或转义处理,如果$keywords包含特殊字符(如单引号等),会导致生成的SQL查询语句不正确,从而产生SQL注入漏洞。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 晴川's Blog🌈!