前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >实战渗透-从敏感文件泄露到Getshell

实战渗透-从敏感文件泄露到Getshell

作者头像
drunk_kk
发布2021-08-20 14:59:48
7580
发布2021-08-20 14:59:48
举报
文章被收录于专栏:渗透测试教程

目标站点如下:

是一个大型仪器预约平台,先简单通过信息收集得到以下信息

中间件:IIS 开发语言: .NET (MVC)

个人比较偏向于渗透NET开发平台的站点,因为其不区分大小写,在生成字典的时候不需要花费太多时间。

该系统提供两个功能,注册以及登录。由于这套系统比较常见,基本每个知名高校都有这么一个仪器平台。所以注册后的功能点就没必要再去花功夫探测了(有的话也被大佬交完了)。

这里我直切主题:

先FOFA搜索相同站点。

由于是NET平台,可以先搜集以下所有相同系统的站点。然后扫一扫备份之类的。常见的字典如: web.rar 备份.rar

等等。.具体看运维的习惯(部分运维喜欢用bak)。

使用某大佬的FOFA提取工具提取下结果

然后使用御剑(由于御剑好像不支持https,所以这里我指定了协议为http。如果大佬们有支持https或者可以批量扫描的工具可惜推荐下(造轮子太麻烦,性能渣))

在某站点下发现疑似备份文件bak.rar, 先下载下来。

解压后发现里面都是一些dll文件。由于是NET平台,源代码都会打包成dll文件。也就是说这些dll文件里面存放着网站的源代码。

那么直接逆向编码,开始代码审计~~~~

发现有点多。。。。由于是MVC模式,我们可以直接搜索Controller(控制器)

开始审计~这里先挨个探索(我个人比较喜欢直切主题:未授权的文件上传-日志写入(部分系统是由请求头决定文件名-反序列化-SQL注入))

未授权的文件上传,这个比较好找。。有没有进行文件效验一看就知道。部分程序员都是把操作写成了一个方法,统一调用。

如: 在UserController下面的IniUserPhotoUpload 方法就是一处文件上传的操作

这里表面看着并没有什么文件属性效验的操作。但是最终写入是由MakeThumbnail操作的。

在MakeThumbnail下面

第151行,可以看到将参数传递给了MakeThumbnailByImg 方法。追踪此方法

在186行可以明显的看出这里进行了文件效验,且规定了后辍为jpg,jpeg,bmp,gif,png,ico 才可以成功上传

那么这里无果,继续探索下一个。

最终在Lab下面发现一处疑似上传LOGO的操作。

UploadLabOrg

写入操作最终是由SaveLabOrganization进行写入操作。

追踪此方法。

主要操作在这里

代码语言:javascript
复制
if (base.Request.Files.Count > 0)
            {
                fileSizeStr = FileUtility.GetFileSizeStr((double)base.Request.Files[0].ContentLength);
                string fileNameWithExtensionByPath = FileUtility.GetFileNameWithExtensionByPath(base.Request.Files[0].FileName);
                fileExt = FileUtility.GetFileExtByPath(base.Request.Files[0].FileName);
                if (!this.ValidateLabOrganizationLogoUpload(System.Web.HttpContext.Current.Request, fileExt, fileSizeStr, out errorMessage))
                {
                    result = false;
                }
                else
                {
                    this.IniLabOrganizationLogoUpload(System.Web.HttpContext.Current.Request, fileId, fileExt, fileSizeStr, out saveImgPath, out errorMessage);
                    result = true;
                }
            }
            else
            {
                result = false;
            }
            return result;

当上传的文件大于0时,执行if里面的语句

代码语言:javascript
复制
if (!this.ValidateLabOrganizationLogoUpload(System.Web.HttpContext.Current.Request, fileExt, fileSizeStr, out errorMessage))
                {
                    result = false;
                }
                else
                {
                    this.IniLabOrganizationLogoUpload(System.Web.HttpContext.Current.Request, fileId, fileExt, fileSizeStr, out saveImgPath, out errorMessage);
                    result = true;
                }

其中ValidateLabOrganizationLogoUpload是判断文件内容大小是否超出以及扩展名是否正确的。

其中并没有进行白名单效验~只是进行了一些判空以及移除符号的操作

找到了一处无效验上传点,开始构造POC:

路由地址为:/控制器名/方法名

使用HTML构造提交表单内容:

代码语言:javascript
复制
<form action="地址" method="post" enctype="multipart/form-data" >
    <input type="file" name="Filedata"/>
    <input type="submit" value="提交"/>
</form>

然后开始上传。

但是他返回了一个出错。。。有点无解,是不是要登陆??

注册了一个账户,发现仍然出错,再次回到代码层,可能是监听器的问题。找到filter

发现了要验证Referer,在原有POC上添加一个Referer

成功Getshell


作者:远海

文章来源:先知社区

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-07-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透测试教程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
消息队列 TDMQ
消息队列 TDMQ (Tencent Distributed Message Queue)是腾讯基于 Apache Pulsar 自研的一个云原生消息中间件系列,其中包含兼容Pulsar、RabbitMQ、RocketMQ 等协议的消息队列子产品,得益于其底层计算与存储分离的架构,TDMQ 具备良好的弹性伸缩以及故障恢复能力。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档