在某次漏洞挖掘中通过了Ueditor的远程图片抓取漏洞成功拿到了该系统的权限,并把源码下载了下来,并趁此机会学习学习Net代码审计,如有问题,感谢指正
拿到源代码后,我们通过dnspy直接查看bin目录下的二进制文件即可(编译好的源代码),采用的MVC的设计架构我们关注Controllers中的方法即可
在来点小插曲,在Net中继承会默认继承对方的Filter,所以这一点需要格外注意,例如以下Demo
Filter
请求Demo1会触发此Filter请求
Demo又继承Demo1
最后的请求结果,请求demo,带cookie能够正常访问
不带Cookie会直接跳转
全局搜索upload发现此处存在任意文件上传,首先判断上传文件个数是否等于0,如果等于则返回保存失败,之后直接通过string extension = Path.GetExtension(httpPostedFileBase. FileName);
获取后缀并且直接拼接导致任意文件上传
向上追溯,发现继承于TeachingBaseController跟进查看
实现了TeachingActionFiler
判断了用户session不为空,以及用户身份必须等于教师
一处未授权任意文件上传继承ApiController 并未实现任何权限校验操作
但文件名是由text+string str = Guid. NewGuid(). ToString()
+后缀名组成,且是以json格式返回,爆破Guid 不知道猴年马月了
这个就比较人性化了,拼接后缀后直接返回路径
同样也是拼接路径,最后写入数据流
当然这套系统还有很多同样的问题太多了,都差不多
用户可控参数path,和filname ,并未做任何过滤,直接判断path路径文件是否存在,存在即下载文件
用户可控参数 role,id,radio其中id以及role直接拼接导致注入的发生
这一处也是同样的