zoukankan      html  css  js  c++  java
  • 一次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语句还是大有帮助的。

  • 相关阅读:
    redis(lettuce)
    Dubbo与SSM整合(认证授权)步骤
    maven常用命令
    Dubbo(RPC框架)
    SpringCache
    mybatis(SSM整合)
    java设计模式-命令模式
    java设计模式-原型模式
    java设计模式-职责链模式
    java设计模式-建造者模式
  • 原文地址:https://www.cnblogs.com/xiaozhiru/p/13036895.html
Copyright © 2011-2022 走看看