0x0

.net中常见的加载js、css文件的方式为直接使用html进行加载,近几年不知道刮起了什么邪风非得要自己实现加载js这些静态资源。
如: /getjsfile?file=xxx.js 这种形式
当然这种方式也经历了大大小小扫描器的扫描探测,没报出什么任意文件读取漏洞。直到这天,我在一个网站中发现了bin文件备份。

0x1

在一处控制器中发现了读取css和js文件的方法。

image 20240725141010.png

GetJSFile方法上来看,该方法获取文件后缀,并限制了后缀名为.js从而限制其他文件的加载读取。
当我查看JsCssHelper.DownJSFile相关的方法时突然发现这里似乎存在着任意文件读取相关的漏洞点。
image_20240725142018.png

首先,对传入文件名使用,进行分割。再依次循环判断要加载的文件是否存在,当存在时,进行读取。

0x2

到这里想必很清楚了,这里存在着任意文件读取漏洞。当传入多个文件时,只需要保证传入值末尾为正确的后缀名即可。如:aa.aspx,bb.js

0x3

对目标文件进行试验,因为该控制器需要登录和防csrf攻击,所以要填充cookie和RequestVerificationToken才能通过。
可以看到成功的获取到了web.config文件的配置信息,进而可以获取到数据库配置信息等。

image_20240725093231.png

0x4

当然这种“缺陷”修复的方式也很简单,取消分割,强制读取静态资源即可。但是为什么简单的加载非要复杂化呢?