漏洞概要
关注数(24)
关注此漏洞
漏洞标题:某富文本编辑器文件上传漏洞(小论如何控制IsPostBack的值)
提交时间:2014-10-15 11:39
修复时间:2015-01-13 11:40
公开时间:2015-01-13 11:40
漏洞类型:文件上传导致任意代码执行
危害等级:高
自评Rank:15
漏洞状态:已交由第三方合作机构(cncert国家互联网应急中心)处理
Tags标签:
无
漏洞详情
披露状态:
2014-10-15: 细节已通知厂商并且等待厂商处理中
2014-10-20: 厂商已经确认,细节仅向厂商公开
2014-10-23: 细节向第三方安全合作伙伴开放
2014-12-14: 细节向核心白帽子及相关领域专家公开
2014-12-24: 细节向普通白帽子公开
2015-01-03: 细节向实习白帽子公开
2015-01-13: 细节向公众公开
简要描述:
Amir富文本编辑器,其实就一个很小的货。从这货上看看如何控制.NET的IsPostBack的值。大牛就绕道吧我就是打酱油的
详细说明:
漏洞证明:
在这个文本编辑器上没有找到任何按钮是可以直接上传文件的(只有插入文件上传按钮,没啥用),但是代码里面是隐藏有这样一个功能的:
RenderContents是绘制自定义控件时会自动调用的一个方法,这个编辑器直接把他重写了。
里面对于文件上传的判断,主要是由this.Page.IsPostBack来控制的,IsPostBack意思简述就是“是否是第一次访问该页面”。
更多请看:
http://msdn.microsoft.com/zh-cn/library/system.web.ui.page.ispostback.aspx
所以,对于IsPostBack的值的控制,是是否可以成功上传文件的关键。
所以我们先考虑下,有没有比较万全的方法,可以使得IsPostBack的值可以为true(为true我们就可以上传文件了啊)
先搞一个文件上传的html试试:
<html>
<form action="http://1/Default.aspx" name="test" method="post" enctype="multipart/form-data">
<input type="file" name="file" size="23" id="file" />
<input type="submit" value="Submit" />
</form>
</html>
上传了,文件夹里面并没有生成文件:
所以很肯定的一点,就是直接用这个方法上传文件,ispostback是肯定不会有true的!
再用自带的demo,里面有一个get data的按钮,直接点击
我们会看到自动提交了很多数据,在里面插入一段文件的代码:
先去掉其它东西,留下viewstate和这段file代码
此时测试是可以成功上传文件的:
先解开viewstate看看,看是否存在某一个值比如ispostback=true?
仔细对照了下,没有发现任何的地方是有ispostback=true的。
再清空viewstate,让viewstate=null
一样成功上传了文件
所以按这个情况来分析,ispostback=true的一个条件是存在viewstate这个参数!只要viewstate是正确的或者为空值,都可以成立(千万不能乱伪造,接不开viewstate会导致系统报错,会500)。
综上,当遇到需要控制ispostback的值为true的时候,只要存在一个可控不会报错的viewstate值,服务器就会自动判断你不是第一次访问该页面,可以直接用类似下面的html代码解决问题:
小漏洞里面也可以研究出一些小知识,希望大家受益。这个点可能还可以用在很多其它系统上,说不定会有很给力的效果(比如一些绕过)。
修复方案:
漏洞回应
厂商回应:
危害等级:高
漏洞Rank:16
确认时间:2014-10-20 08:21
厂商回复:
cnvd确认所述分析和测试结果,暂未建立与软件开发者的直接联系渠道,待认领。
最新状态:
暂无