0x0
.net中常见的加载js、css文件的方式为直接使用html进行加载,近几年不知道刮起了什么邪风非得要自己实现加载js这些静态资源。
如: /getjsfile?file=xxx.js 这种形式
当然这种方式也经历了大大小小扫描器的扫描探测,没报出什么任意文件读取漏洞。直到这天,我在一个网站中发现了bin文件备份。
0x1
在一处控制器中发现了读取css和js文件的方法。
从
GetJSFile方法上来看,该方法获取文件后缀,并限制了后缀名为.js从而限制其他文件的加载读取。当我查看
JsCssHelper.DownJSFile相关的方法时突然发现这里似乎存在着任意文件读取相关的漏洞点。
首先,对传入文件名使用
,进行分割。再依次循环判断要加载的文件是否存在,当存在时,进行读取。
0x2
到这里想必很清楚了,这里存在着任意文件读取漏洞。当传入多个文件时,只需要保证传入值末尾为正确的后缀名即可。如:aa.aspx,bb.js
0x3
对目标文件进行试验,因为该控制器需要登录和防csrf攻击,所以要填充cookie和RequestVerificationToken才能通过。
可以看到成功的获取到了web.config文件的配置信息,进而可以获取到数据库配置信息等。
0x4
当然这种“缺陷”修复的方式也很简单,取消分割,强制读取静态资源即可。但是为什么简单的加载非要复杂化呢?