漏洞挖掘
对某系统多次漏洞修复的绕过和利用。
任意文件下载(20250819)
发现一处疑似任意文件下载的点。
1 | download.aspx?file=files/temporary/2025/08/18/XXX.docx |
尝试下载IIS应用的web.config,下载成功,并获取到了相关敏感信息。
在对web.config进行分析时,发现此处添加了一个httphandler
1 | <httpHandlers> |
此处泄漏了两个信息,分别是download.aspx是由DownLoadFileHandler来处理的,该应用的名称是NECCS.Web【命名空间(namespace)】
那么就大胆猜测一下备份文件是NECCS.Web.rar
然后就获取到了网站压缩包源码
任意文件上传(20250819)
其中有一个handler存在上传漏洞。
这里走SaveData()和SubmitData()都能上传getshell
因为存在漏洞的方法是OnSave()
在这个过程中,上传的文件后缀没有被额外判断过滤,上传后的文件名为{filename}_年月日时分秒.{ext}
例:111_20250818144444.aspx
构造表单参数进行上传测试。
上传后不回显文件名,因为SaveData()和SubmitData()的返回值都已经被固定成了OK。
此时将响应包里的GMT时间转换成北京时间
拼接访问就getshell了
实际上,测试的时候,点点点,发现这个上传是有其他业务进行回显文件路径的。也就不需要去计算GMT时间。
任意用户登录(20250819)
简单读了一下代码,发现某处handler有这样一个逻辑。
传入的userName通过LoginByUserName方法去获取用户信息。
查询后的用户信息是由对象UserDetail去存储的。
存在漏洞的关键点是在这里,此处将会直接将查询到的用户信息赋值给服务器,即服务器会直接返回一个有效的用户cookie。
1 | context.Application[context.Session.SessionID] = _userDetail; |
再利用判断当前用户信息的接口,判断当前cookie有效
最终效果如下
修复方案
20251020修复
任意文件下载
先来看任意文件下载漏洞有没有被修复
可以看见这个版本的代码相较于20250819是多了一层对参数file的if判断,判断file的值是否是以/files/、/files_android/和/mediaupload/为开始,如果不是,则提示”Error : 只能下载系统上传的附件文件!“
可以看见直接去从根目录下载web.config是失败的。
但是当我们构造payload为/files/../web.config即可绕过该if判断
任意文件上传
这里新增了一个FileHelper.Instance.IsLlegalExtension(extension),对文件后缀进行了限制,因此这个漏洞也就修复了。
任意用户登录
修复版本新增了对当前用户是否登录的判断
这里的业务流程是
1、当test用户登录后,test用户的session先被清空
2、清空session后,通过userName=admin查询admin的用户信息
3、context.Session[...]=_userDetail;向 Session 的「动态 SessionID 键」写入 admin 信息。
复测不是我,且当时我以为添加一个用户登录态的判断,且有session清空的逻辑,那么应该也就修复了。
20260126修复
任意文件下载
使用20251020版本的payload去绕过好像是不行了
直接看代码层的修复方案
相较于20251020版本,是多了一个../的判断,好像是无法绕过了?
实际上这里可以结合Windows的特性去绕过,在linux系统上这个漏洞的确是修复了。
只需要把payload换成/files/..\web.config,即可绕过,并继续下载文件
任意用户登录
上个版本复测人员应该是把这个漏洞当成修复了,且我在上个版本也没有进行测试,也以为修复了。实际上这个漏洞没有修,只是变成了session覆盖漏洞。即将test的用户的session覆盖成admin的信息。
这里直接测试
首先,没有有效的凭证是无法进行接口访问的
当前Cookie: ASP.NET_SessionId=iriqdtb0ck34cbvjr3s0c04u的用户是张某某
访问漏洞接口,将张某某的凭证覆盖为程某某的
1 | /Views/XXX/XXXXForJava.ashx?userName=chengXX&action=list&page=1&rows=10&MediaID=1&TaskName=&MediaType=1 |
再访问查询当前用户信息的接口去验证
可以看见之前张某某的凭证已经变成了程某某的。