记一次境外站渗透过程

一个境外的山寨网站,也是有意思~~~因为挺久没有做渗透了,在渗透的过程中还是发现了一些比较有意思的东西

一、目标环境

  • 操作系统:Windows Server 2008 R2
  • 服务器容器:IIS 7.5
  • 应用脚本:ASP.NET
  • 数据库:MSSQL

二、注入点

网站只有一个登陆口,登陆口存在SQL注入~~~遇到这种情况,我一般都是三种处理方式:

  • ①、注入获取数据,没有显示位,无法报错,只能盲注,速度是比较慢的。
  • ②、命令执行,可以直接命令执行获取shell
  • ③、万能密码,也是注入利用方式的一种。
  • ④、登录语句构造,这种情况是针对第三种情况失效的采用的。

登录语句构造

万能密码也是利用的注入点的方式进行登录,通常情况下语句如下:

不过此处不能用万能密码,服务器应该是先利用用户名获取数据库信息,然后利用比较密码进行登录~~~这种时候通常就需要构造语句来登录,大致语句如下:

对于密码字段,我就测试了MD5以及明文,构造出来的语句如下:http://example.com/checklogin?txtPwd=123456&txtName=admin' or 1=1 UNION ALL SELECT NULL,'e10adc3949ba59abbe56e057f20f883e','e10adc3949ba59abbe56e057f20f883e',NULL,'e10adc3949ba59abbe56e057f20f883e',NULL,'e10adc3949ba59abbe56e057f20f883e',NULL,NULL,NULL,'e10adc3949ba59abbe56e057f20f883e',NULL,NULL,'e10adc3949ba59abbe56e057f20f883e','e10adc3949ba59abbe56e057f20f883e'--

结果还是错误了,可能是密码加密方式不对吧~~~这个坑,后面来填

命令执行

因为是盲注,当时看它执行命令的时候我都快睡着了~~~一般来说,如果我遇到命令执行的情况,就会按照以下几点来做:

  • ①判断站库分离
  • ②直接写webshell
  • ③直接上马

我当时没有判断站库分离,这种小站十个有十个都不会分离。于是,差不多就按照如下步骤进行了:

  • ①、分区数目wmic diskdrive get partitions /value,只有一个分区,
  • ②、系统盘符cd,系统盘符是C:
  • ③、寻找网站路径c: & dir /s/b logo.png,居然没有!?!?
  • ④、查看是否站库分离select host_name()select @@servername结果一致,没有站库分离。
  • ⑤、IIS默认的网站目录是C:\Inetpub\wwwroot,看了一下~~~没有什么东西,应该是管理员重新配置了,网站虽然不大,但是因为是盲注,就没有挨着挨着看了,准备其它思路。
  • ⑥、bitsadmin文件下载,提示Unable to add file to job - 0x800704dd,说不能联网,感觉是当前账号权限过低~~~
  • ⑦、powershell文件下载,成功反弹

三、代码审计填坑

没有做过ASP.NET的审计,不过这次重点而不是在于审计代码而是在于看漏洞产生的地方,使用的工具为IL Spy
登录部分的代码为:

代码果然是根据用户名获取数据,然后比较密文~~~看看DifferentMD5()函数,好吧,果然不是正经的加密方式。

于是,第一次构造出来的语句是:http://example.com/checklogin?txtPwd=666666&txtName=admin' UNION SELECT 5,'1','79eaf3c8y678a0b04de153469d',NULL,'1',NULL,'1',NULL,NULL,NULL,'1',NULL,NULL,'1','1'--

提示系统错误0001,当我把密码修改为错误的密码,提示密码错误。也就是密码对了,是在后面操作出现了其它系统错误,后来证实是字段类型不对应导致的~~~看了看模型部分的代码,如下:

于是重新构造出来的语句是http://example.com/checklogin?txtPwd=666666&txtName=admin' UNION SELECT 1,'testuser','79eaf3c8y678a0b04de153469d','01 21 2016 12:00AM','ip',1,'ip','01 21 2016 12:00AM','01 21 2016 12:00AM',1,'memo',1,'01 21 2016 12:00AM','real_name','110'--,提示:登录成功,其实在上面一步的时候虽然提示系统错误0001,但是cookie已经设置了,访问后台是成功的。

四、钓鱼

虽然有权限了,但是后台用户的密码还是不能解密,因为我没有拿到管理员的账号,这个时候想到网站后台密码和服务器的密码是一样的啊,默默地修改了后台页面,写了一个JS插了进去,等待管理员上钩,代码很简答,就不放代码了。过了一天,看了看,果然在自己的服务器找到了用户名密码,不过没什么用。

五、提权

初略看了看系统的补丁情况,基本上打得差不多了,最后还是找到一个没打补丁的漏洞提权成功,具体过程不再复述。hash读出来了,但是没法登陆

六、其它分析

中途在查看服务器文件的时候发现一些可疑的文件,放到virustotal分析了一下,果然是被人挂马了。而且成为了旷工~~~这里不再做分析了,恶意程序的分析并不擅长。

七、数据库链接字符串解密

拿到权限之后,发现web.config中数据库连接字符串是加密了的。这里很大部分原因是因为自己没有开发过asp.net。我查阅了一下资料,字符串加密一般有两种方式~一种是利用自带的工具aspnet_regiis.exe,一种就是在asp.net程序连接数据库之前去解密。这里属于第二种

数据库连接通常在数据访问层(DAL Data Access Layer)层,而且asp.net中但凡设计到数据库操作,一般都会涉及到SqlHelper类,果不其然,在这个类中发现了解密的代码。

 

此条目发表在黑盒渗透分类目录。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用*标注