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

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

缺陷编号: WooYun-2014-51339

漏洞标题: smartoa 企业版 政务办 任意文件上传 获取webshell(多处)

相关厂商: 广州力智软件有限公司

漏洞作者: what_news

提交时间: 2014-02-21 10:16

公开时间: 2014-05-20 10:17

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

危害等级: 高

自评Rank: 10

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

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

Tags标签: 任意文件上传 .net代码审核

0人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-02-21: 细节已通知厂商并且等待厂商处理中
2014-02-24: 厂商已经确认,细节仅向厂商公开
2014-02-27: 细节向第三方安全合作伙伴开放(绿盟科技唐朝安全巡航无声信息
2014-04-20: 细节向核心白帽子及相关领域专家公开
2014-04-30: 细节向普通白帽子公开
2014-05-10: 细节向实习白帽子公开
2014-05-20: 细节向公众公开

简要描述:

没有对用户上传类型就行判断过滤,虽然在客户端进行了过滤筛选,但是到服务端没有进行多一步的验证,使得可以通过改包绕过客户端验证

详细说明:

测试网站:http://**.**.**.**/ 随机选择一个普通用户登录进去(管理员更不用说了)



第1处

在应用中心->新闻管理->新增 按钮 -> 基础信息 -> 点击上传



主要代码如下

code 区域
public JsonResult UpLoadImage()
{
ArticleBLL.UpFileImage image = new ArticleBLL().UpLoadImage(); //跟进
base.G2Result.Data = image;
if (string.IsNullOrEmpty(image.ImageUrl))
{
base.G2Result.Result = false;
base.G2Result.Message = "上传失败";
}
return base.Json(base.G2Result);
}
public UpFileImage UpLoadImage()
{
UpFileImage image = new UpFileImage();
UploadedFileCollection uploadedFiles = HttpUploadModule.GetUploadedFiles();
if (uploadedFiles != null)
{
foreach (UploadedFile file in uploadedFiles)
{
try
{
string path = string.Concat(new object[] { @"CMS\Article\TitleImage\", Guid.NewGuid(), ".", file.Extension }); //没判断文件类型,直接利用 导致任意文件上传
file.SaveAs(path);
image.ImageName = file.ClientName;
image.ImageUrl = path;
image.FileServerUrl = FileManage.FileServerPath;
}
catch
{
throw;
}
}
}
return image;
}



正常上传 我把一句话木马改成jpg格式

cms.png



修改成aspx格式

cms1.png



shell路径

cm3.png





第2处

在应用中心->新闻管理->新增 按钮 -> 文章内容 -> 有个添加图片的图标 点击上传



主要代码如下

code 区域
public JsonResult UploadImage()
{
G2JsonObject data = new G2JsonObject();
string str = Path.Combine(this.storeRootPath, DateTime.Now.ToString("yyyyMMdd"));
UploadedFileCollection uploadedFiles = HttpUploadModule.GetUploadedFiles();
foreach (UploadedFile file in uploadedFiles)
{
try
{
file.SaveAs(Path.Combine(str, file.ClientName)); //没过滤,可上传任意文件
data.Result = true;
data.Data = Path.Combine(str, file.ClientName);
}
catch (Exception exception)
{
data.Message = exception.Message;
data.Result = false;
}
}
return base.Json(data);
}



正常上传 把木马改成jpg格式

html1.png



抓包,修改成aspx格式

html2.png



木马地址

html3.png



菜刀链接

html4.png





第3处

任务中心->任务派发->新增->附件浏览



页面主要代码如下

code 区域
public JsonResult UploadAttachment(string ID)
{
UploadedFileCollection uploadedFiles = HttpUploadModule.GetUploadedFiles();
if ((uploadedFiles != null) && (uploadedFiles.Count >= 1))
{
UploadedFile file = uploadedFiles[0];
AttachmentContract contract = new AttachmentContract();
contract.AttachmentID = Guid.NewGuid();
contract.AttachmentSize = file.ContentLength;
contract.Extension = file.Extension.ToLower();
contract.AttachmentName = file.ClientName;
contract.AttachmentNameWithNotExtension = file.ClientNameWithoutExtension;
contract.CreateEmployeeName = this.CurrentUserName;
contract.CreateTime = DateTime.Now;
string str = Path.Combine("UDF", DateTime.Now.ToString("yyyyMM"));
contract.StorePath = Path.Combine(str, contract.AttachmentID.ToString() + "." + contract.Extension);//没过滤直接利用
file.SaveAs(contract.StorePath, true);
base.G2Result.Data = contract;
}
return base.Json(base.G2Result);
}



udf.png



udf1.png



udf3.png



udf4.png



udf5.png





第4处 应用中心->人事管理->劳动合同—>附件信息->上传附件



主要代码如下

code 区域
public JsonResult UpLoadFile()
{
ContractAttachmentBLL tbll = new ContractAttachmentBLL();
return base.Json(tbll.UpLoadFile()); //跟进
}
public ListDataResult<ContractAttachmentContract> UpLoadFile()
{
ListDataResult<ContractAttachmentContract> result = new ListDataResult<ContractAttachmentContract>();
result.Result = true;
UploadedFileCollection uploadedFiles = HttpUploadModule.GetUploadedFiles();
try
{
if (uploadedFiles == null)
{
return result;
}
foreach (UploadedFile file in uploadedFiles)
{
ContractAttachmentContract contract2 = new ContractAttachmentContract();
contract2.AttachmentID = new Guid?(Guid.NewGuid());
ContractAttachmentContract item = contract2;
string str = item.AttachmentID.ToString();
string str2 = @"ContractAttachment\" + str + "." + file.Extension;//没判断 产生漏洞
file.SaveAs(@"HRCM\" + str2);
item.AttachmentName = file.ClientNameWithoutExtension;
item.AttachmentUrl = str2;
item.ExtName = file.Extension;
item.FileSize = file.ContentLength;
result.Rows.Add(item);
}
}
catch (Exception exception)
{
result.Result = false;
result.Message = exception.Message;
}
return result;
}



xls.png



xls1.png



xls2.png

xls3.png





第5处 个人办公 我的网盘那 可以随便上传任意文件 只是上传后暂时找不到文件上传后的路径比较悲催 但是也存在任意文件上传漏洞





漏洞证明:

如上

修复方案:

白名单判断类型修复

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


漏洞回应

厂商回应:

危害等级:高

漏洞Rank:15

确认时间:2014-02-24 09:15

厂商回复:

CNVD未在本地实例或其他实例上复现,仅确认所述DEMO实例及原理分析,rank 15

最新状态:

暂无


漏洞评价:

对本漏洞信息进行评价,以更好的反馈信息的价值,包括信息客观性,内容是否完整以及是否具备学习价值

漏洞评价(共0人评价):
登陆后才能进行评分

评价

  1. 2014-02-19 10:47 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    给力。

  2. 2014-02-19 10:49 | what_news ( 普通白帽子 | Rank:195 漏洞数:48 | 小菜一个 希望成为大菜)
    0

    @wefgod 要多像你学习

  3. 2014-02-20 09:50 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    这货是JSP的还是PHP的

  4. 2014-02-20 10:45 | what_news ( 普通白帽子 | Rank:195 漏洞数:48 | 小菜一个 希望成为大菜)
    0

    .NET

  5. 2014-02-20 10:59 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    明白。

  6. 2014-03-02 01:09 | Matt 认证白帽子 ( 普通白帽子 | Rank:523 漏洞数:107 | 承接代码审计 http://codescan.cn/)
    0

    @wefgod 看来你准备刷一波 ~~

  7. 2014-03-02 01:29 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    @Matt 木有,就搞了两个去数字。太小众了。

  8. 2014-03-02 21:38 | Matt 认证白帽子 ( 普通白帽子 | Rank:523 漏洞数:107 | 承接代码审计 http://codescan.cn/)
    0

    @wefgod 站个位置咩 我都2-3月没在数字提拉 被你们这群黑客刷的太狠了

  9. 2014-03-03 09:33 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    @Matt 哈哈,我打酱油的而已

  10. 2014-03-16 14:14 | wefgod ( 核心白帽子 | Rank:1825 漏洞数:183 | 力不从心)
    0

    这个oa还有更厉害的漏洞。

  11. 2014-03-17 11:38 | what_news ( 普通白帽子 | Rank:195 漏洞数:48 | 小菜一个 希望成为大菜)
    0

    @wefgod 你为什么这么厉害

  12. 2014-05-20 12:07 | 郭斯特 ( 普通白帽子 | Rank:181 漏洞数:69 | GhostWin)
    0

    iis6解析即可~

登录后才能发表评论,请先 登录