一、 因
背景:有位大佬跟我说,某个网站存在SQL注入,但是可能存在waf,需要帮忙验证一下。(漏扫扫出来的)
拿到url链接之后,开始了各种尝试,什么单引号啊、双引号啊、反引号啊、括号啊、基本的语句啊等等,页面返回都不是我所预想的结果。
开始怀疑是误报…
二、 果
和大佬聊了一下,看了报告里面的请求包

是两个@@触发了报错
然后尝试了一下,

// 当然也可以借助bp的内置字典
就是容易被封ip…
可以看到凡是带有@符号的都会报错,返回状态码500

既然注入点有了,那么开始构造poc来证明漏洞可利用
在两个@@后面,无论构造任何语句,都不会被执行

那么根据上文bp遍历字典的结果来看,似乎用一个@的话,后面的会被执行

开始构造
@and 1=1
根据这些信息加上报错回显,可得知是mssql数据库

Mssql报错注入很简单,拿相关函数(user,db_name())与数值进行比较、四则运算都可
所以获取用户名的poc为:@and user=1
// 区别于mysql,mssql的用户名为 user 数据库为db_name()

但是有一点问题,and --- > a_nd
猜测规则是:检测到and,则把a替换成a_
绕过:改成大写
即 @anD+user=1


用@来终止上个语句,属实是**次见,也不知道应用的sql语句是怎么写的
不得不感叹:大千世界,无奇不有。
通过信息收集,得知网站指纹,下载了相关最新版cms源码,发现还是有些出入的,可能是因为没有导入模板的原因…

顺便看了看install目录下的sql文件

猜测跟mssql的存储过程有关
具体原因未知,有空再去分析一下它的代码
看看是怎么插入数据库查询的