一次sql server实战

前言:朋友在做授权项目的时候,遇到一个sql server数据库的注入点,没办法解决,让我帮忙看看,因为是授权项目,所以就可以帮助测试下。

内容如下:

 单引号,很明显的错误,因为是时间格式:2020-6-2,所以这里肯定是字符型的。

接着测试:'--

 还是语法错误,那么可能因为有括号的原因,接着测试:')--

 这里出现了关键性的第一个错误:'CAST' 附近有语法错误,需要 'AS'。

百度该错误,找到一篇文章:

http://cn.voidcc.com/question/p-rwhjaknf-bnr.html

 看到了这样一段模板代码,类比一下,差不多我们的注入点就在这里。

接着测试:'+AS+DATETIME)--

 然后出)附近有错误,以为有多个括号,所以测试:'+AS+DATETIME))--,还是一样的错误。

在这里卡了会儿,因为不知道到底是我们思路就错了,还是那个小地方错了,摸着石头过河莫办法。

后面只有继续fuzz了,先猜测是 -- 注释符没用(被过滤等),然后我们就只有手动闭合后面的语句了。

测试:'+AS+DATETIME)AND+CAST(CONVERT(NVARCHAR,CAST(getdate()+AS+DATE))+%2b+'

 经过多次测试发现是AND那个位置出了问题,在百度找了相关错误,这篇文章说的很好:https://blog.csdn.net/huyuyang6688/article/details/38322005

意思也就是说:如果 AND 后面接的一个布尔值类型,中间不能有空格,因为CAST( 函数返回的结果是布尔值,成功或失败。

但是ANDCAST( 这样,去掉中间的空格,语法都错误了。所以只有:AND 1=CASE( 这样就好了。

 不明白为啥会出这个错误,当把这个时间改成和上面一样的:'2020-6-2 这种格式后,会爆另外一个错误:

 因为提示了超出范围,所以我直接改成了:'0  然后就成功了。这里发现直接为空也可以,就是+%2b+' 就完事了,如上面几张图。

最后爆@@version的语句:

 多熟悉几个sql模板语句,在注入的时候,猜测sql语句还是大有帮助的。

原文地址:https://www.cnblogs.com/xiaozhiru/p/13036895.html