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

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

缺陷编号:wooyun-2015-0121374

漏洞标题:某通用教育系统任意文件上传+代码分析

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

漏洞作者: Damo

提交时间:2015-06-18 15:39

修复时间:2015-09-21 09:20

公开时间:2015-09-21 09:20

漏洞类型:文件上传导致任意代码执行

危害等级:高

自评Rank:13

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

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

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

简要描述:

主要有代码逻辑判断问题导致

详细说明:

系统:盈动信息发布系统
问题文件:/Admin/WebUpload.aspx
代码分析:
该系统在admin目录中已经建立了web.config并且限制了用户访问
但是代码如下:

<location path="WebUploaded.aspx">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>
<location path="WebUpload.aspx">
<system.web>
<authorization>
<allow users="?" />
</authorization>
</system.web>
</location>


却允许部分页面可访问
既然可访问那就看WebUpload.aspx的代码

protected void Ok_Click(object sender, EventArgs e)
{
string text = "";
try
{
string upFileType = Globals.UpFileType;/*获取允许格式白名单*/
string text2 = this.UploadFile.PostedFile.FileName;/*获取上传的文件名*/
bool flag = text2 != string.Empty;
if (!flag)
{
text = "没有选择文件!";
}
else
{
text2 = Path.GetExtension(text2);
int contentLength = this.UploadFile.PostedFile.ContentLength;
text2 = text2.Remove(0, 1);
text2 = text2.Trim();
text2 = text2.ToLower();
if (flag)
{
/*这里判断文件大小 允许上传1M大小的文件*/
flag = (Globals.MaxFileSize == 0 || (contentLength > 0 & contentLength <= Globals.MaxFileSize * 1024));
}
if (!flag)
{
text = "文件大小超过了限制,最大只能上传" + Globals.MaxFileSize.ToString() + "K的文件!";
}
else
{
flag = (upFileType.IndexOf(text2) >= 0);/*判断后缀名*/
if (!flag)
{
/*设置错误信息*/
text = "这个文件类型不允许上传,只允许上传" + upFileType + "类型文件!";
}
}
if (flag)
{
Globals.UploadFileNum++;
string str = "upfile" + Globals.UploadFileNum.ToString() + "." + text2;
string text3 = string.Concat(new string[]
{
"/",
Globals.ApplicationVRoot,
"sites/",
Globals.CurrentSiteVirtualDirectory,
"/",
Globals.SaveUpFilesPath
});
string text4 = base.Server.MapPath(text3);
if (text4.EndsWith("\\"))
{
text4 = text4.Substring(0, text4.Length - 1);
}
text4 = text4 + "\\" + str;
text3 = text3 + "/" + str;
this.UploadFile.PostedFile.SaveAs(text4);/*保存文件*/
string returnValue = this.GetReturnValue(text3);
if (returnValue != "")
{
base.Response.Write(returnValue);/*输入文件名称以及路径*/
}
}
}
}
catch (Exception)
{
text = "文件没有保存!";
}
finally
{
if (text != "")
{
base.Response.Write("<script>alert('" + text + "')</script>");
}
}
}
}
}


利用方式:
http://www.jgedu.net/Admin/WebUpload.aspx
选择要上传的文件,“确定”
上传完毕F12查看页面代码即可得到shell
如果遇到上传完毕页面关闭之类的问题请将浏览器JavaScript禁用之后再上传 如下图

2.png

漏洞证明:

1.png


shell:
http://www.jgedu.net/sites/main/UploadFiles/upfile95621.aspx admin
案例
http://www.hzjlxx.com/Admin/WebUpload.aspx
http://www.jgedu.net/Admin/WebUpload.aspx
http://www.jhjdedu.org/Admin/WebUpload.aspx
http://www.hujys.net/Admin/WebUpload.aspx
http://www.hzjygh.org/Admin/WebUpload.aspx

修复方案:

this.UploadFile.PostedFile.SaveAs(text4);/*保存文件*/
更改为

if(string.IsNullOrEmpty(text))
{
base.Response.Write("<script>alert('" + text + "')</script>");
base.Response.End();//必须加
}
this.UploadFile.PostedFile.SaveAs(text4);/*保存文件*/


再有就是当前目录的web.config配置不可直接访问

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2015-06-23 09:19

厂商回复:

CNVD确认并复现所述情况,根据实测案例,已经转由CNCERT下发给浙江分中心,由其后续协调网站管理单位处置.

最新状态:

暂无


漏洞评价:

评论

  1. 2015-06-20 03:47 | 小龙 ( 普通白帽子 | Rank:1208 漏洞数:316 | 乌云有着这么一群人,在乌云学技术,去某数...)

    被执行人姓名/名称: 杭州东方盈动信息技术有限公司身份证号码/组织结构代码: 751728457法定代表或者负责人姓名: 李国炎执行法院: 杭州市西湖区人民法院省份: 浙江执行依据文号: (2011)杭西执民字第02439号立案时间: 2015年01月19日案号: (2011)杭西民初字第02371号做出执行依据单位: 杭州西湖法院生效法律文书确定的义务: 支付人民币22000元被执行人的履行情况: 全部未履行失信被执行人行为具体情形: 其他有履行能力而拒不履行生效法律文书确定义务