目录
前言
今天这篇SQL注入的专题给到我们的SQL Server数据库,它还有一个名字是MSSQL数据库。其中有一种注入方式,是我今天所要介绍的主题,它便是利用sys视图进行显错注入。这里我将由浅入深的介绍它的几种绕过方式和payload。
这里导致注入的原因是:数据类型原本是数字,但是输入的内容是字符,因此在转换中失败导致报错。
比如在 SQL Server 中,-(1/DB_NAME())- 这样的语句看起来像是在进行数学运算,然而由于除以一个字符串是无意义的操作,因此这样的语句在 SQL Server 中会引发一个错误。其中使用了 DB_NAME() 函数来获取当前数据库的名称。
绕过案例1
介绍
普通payload被waf拦截,因此想到利用sys视图显错注入来进行绕过,使用payload'-(1/user)-'成功注入,并爆出当前数据库用户。
过程
https://xxxx/,用户名xxx密码xxx
其中点击在线教育中心:

其中随便点击一个课程:

然后抓包:

其中的id参数判断出存在单引号字符型注入,且为mssql数据库:
其中判断出存在依讯waf,使用普通的payload都是会被拦截的。
但是其中这里利用sys视图进行显错注入,可以成功绕过:id='-(1/user)-',成功绕过查看用户:

id='-(1/db_name())-',成功绕过查看数据库名:

绕过案例2
介绍
使用payload'-(1/user)-'并没有爆出当前数据库用户,那么这里改造payload为'and+(user|1)>-1-'从而成功爆出当前数据库用户。
过程
https://x.x.x.x/enlink/#/client/app,其中用户名xxx
密码xxx
其中点击门户:

点击更多中的实验教学系统:

其中点击预约实验项目:

其中输入项目名称和教师,点击查询然后抓包:
其中xsyyshiyan.aspx接口的jsname参数和xmname参数存在SQL注入:
但是这里使用'-(1/user)-'虽然成功执行,但是并没有爆出当前用户:

所以这里需要修改payload:
这里改造为如下payload:'and+(user|1)>-1-' (这里亲测'and+(user|1)=-1-'也是可以成功的,如果>给拦截了,可以尝试修改为=等号)
成功爆出当前数据库用户:

@@version,成功爆出数据库版本号

绕过案例3
介绍
使用payload'-(1/user)-'遇上/被检测,那么这里改造payload为'and+(user|1)>-1-',但是又碰到>被检测,最终使用payload'and (user|1)=-1-'从而成功绕过,爆出当前数据库用户。
过程
用户名xxx
密码xxx
其中点击xx报刊复印资料:

这里抓到了如下包:
其中sf_request_type参数存在sql注入:

Payload:
'-(1/user)-'
这里测试发现不行:

通过fuzz发现是/这个除号会给如此防御,如下换成减号-是可以,但是无法爆出数据库当前用户

然后这里换了一个payload:'and (user|1)>-1-'
这里发现>大于号被检测为有潜在危险的 Request.Path 值:

那么这里将>替换成=,即payload:'and (user|1)=-1-'
成功爆出当前数据库用户:

@@version当前数据库版本:

免费领取安全学习资料包!

渗透工具

技术文档、书籍


面试题
帮助你在面试中脱颖而出

视频
基础到进阶
环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等


应急响应笔记

学习路线
本文介绍了SQLServer中利用sys视图进行显错注入的三种绕过方法,包括普通payload被WAF拦截后的解决方案,如利用-(1/user)-和and+(user|1)>-1-进行用户和数据库名的获取。



被折叠的 条评论
为什么被折叠?



