0x01 前言
项目中碰到了一个端口存在目录遍历,比较运气的是泄漏了ASP.NET
的obj目录,最终找到了Web
功能模块的DLL,实现了未授权的文件上传GetShell
。
0x02 过程
在发现了这个端口存在目录遍历的时候,尝试访问页面发现了当前目录是一个CSharp的工程项目。可以看到比较清晰的目录结构。
2019/5/20 19:33 <dir> bin
2018/6/20 13:42 115 FileUpload.aspx
2019/5/21 15:36 2832 FileUpload.aspx.cs
2018/6/20 13:42 455 FileUpload.aspx.designer.cs
2018/6/20 13:42 7506 FileUpload.csproj
2018/8/29 9:57 255 FileUpload.csproj.user
2018/6/20 13:42 257 FileUpload.csproj.vspscc
2021/10/22 13:54 <dir> FileUploader
2018/6/20 14:32 <dir> obj
2018/6/20 13:42 321 packages.config
2018/6/20 13:42 <dir> Properties
2022/3/1 18:14 <dir> UpLoadFile
2021/9/10 9:11 1528 Web.config
2018/6/20 13:42 1246 Web.Debug.config
2018/6/20 13:42 1307 Web.Release.config
如果直接访问FileUpload.aspx
并不能得到除了物理路径之外有效的信息。
如果了解ASP.NET
的项目目录结构,就会知道,obj和bin是csharp项目的两个重要的配置目录,可能包含了项目的编译后链接库文件,或者pdb
等信息。
1. ASP.NET
的某些基本目录结构
目录 | 说明 |
---|---|
obj | obj 目录包括项目运行需要引用的一些类、方法和接口 |
bin | bin 目录是项目程序目录,包括运行时配置文件等等 |
直接访问bin,这里被限制了访问。
而访问obj目录,就找到了一个FileUpload.dll
。与FileUpload.aspx
同名。那么就大概率是他的动态链接库,csharp的文件可以直接反编译看到源码,这样我们直接审计存不存在漏洞。
2.dnSpy反编译加审计
通过导入dnSpy,直接看到功能模块源码,在FileUpload
类,看到三个可控的参数ExtName、ExtName、DicName。
在关键代码第51行,第54行,也可以看到直接构造文件上传表单,在text5的目录下,直接保存文件,整个过程也没有鉴权,可以直接未授权构造文件上传。
而ExtName传入给text2,最后是我们可控的文件后缀名,最终可以直接上传aspx马。
3.测试
这里直接构造了请求表单。
<html>
<body>
<form action="http://xxxxxxxxxxx/FileUpload.aspx?ExtName=aspx&CorpId=1&DicName=1" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" ></input>
</body>
</html>
成功。
0x03 总结
这里其实挺简单的。就是简单的信息收集到简单的代码审计,到getshell,主要记录下ASP.NET的目录信息泄露。
内容来源:
https://k-9.me/2022/03/20/%E6%9F%90%E6%B5%8B%E8%AF%95%E7%AB%AF%E5%8F%A3%E7%9A%84-net-Web-Demo-%E5%8A%9F%E8%83%BD%E5%88%B0GetShell/
往期推荐 ●●
// 1
// 2
// 3
// 4
原文始发于微信公众号(雾晓安全):某测试端口的.net-Web功能到GetShell
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论