前言
之前一直在做PHP、JAVA的代码审计,从来没接触过ASP.NET编写的系统,前段时间在挖漏洞的过程中遇到了一个CMS是用.NET编写的,正好拿来练练手,本篇文章是我第一次写有关ASP.NET的代码审计,其中可能会在语言描述上存在一些错误,希望大家多多指正。
漏洞发现
该漏洞为sql注入漏洞,出现在排序处。
在关键字处输入1,排序选择登录名称,使用burp拦截数据包
拦截数据包后,将数据包保存为1.txt文件,使用sqlmap爆破数据库:
使用的命令为 sqlmap.py –r c:\1.txt –dbs
成果截图
可以发现order参数存在sql注入漏洞。
代码审计
针对ASP.NET进行审计需要注意的一点是:
website的每个asp页面都会转成dll文件存于bin目录下
所以要想进行审计,找到代码中的漏洞点我们需要一个工具能将dll文件反编译为asp语言
这里我们使用ILSpy对dll文件进行反编译。
根据burp抓包请求,找到api对应的dll文件,使用ILSpy进行反编译
找到PagesAdminController
通过路由可看到使用该类对我们刚才提交的数据进行处理。
处理数据返回结果主要使用这一段代码,其中这一块对role、order参数进行非空判断后进行赋值,并使用GetCount、GetAdministrators函数进行处理,然后返回处理结果。
跟进GetCount函数,可以发现该函数没有使用order参数,同时使用FilterSql函数处理用户输入,跟进FilterSql
FilterSql对"',\\(,\\)"进行替换,这不是我们关注的重点,我们接下来跟进GetAdministrators函数进行查看
GetAdministrators函数使用了order参数,并且使用IsNullOrEmpty(order)判断order值是否为空,除此之外没有任何过滤,直接进行拼接sql
导致了sql注入漏洞的发生