zoukankan      html  css  js  c++  java
  • SQL注入之判断数据库

    前言

    这个月应该会出去参加红队护网,面试了一下发现自己真的好菜有点自闭--几乎一半的面试题目没有回答上来--这几天一直在看红队的知识,在其他方面的学习就懈怠了不少--晚上突然想起来曾经看到的这个问题:怎么判断数据库。很多细节看过就忘了--所以今天这里来做个记录。
    照例,这篇文章是个人学习来用,思想均来自互联网。而且数据库安全的话我也就对mysql有点了解,其他数据库安全的话之后再补吧。。不知不觉我也是个即将大三的老家伙了--
    参考:

    https://www.jianshu.com/p/e308d96e2ecd

    https://blog.csdn.net/weixin_43221560/article/details/92005406

    前端与数据库类型

    asp:sql server,Access
    .net :sql server
    php:PostgreSQL,Mysql
    java:Oracle,Mysql
    这个有助于缩小我们的判断范围。

    根据端口判断

    我们可以扫描其对应的端口来做判断:

    Oracle

    port:端口号,默认是1521

    SQL Server

    port:端口号,默认是1433

    ms SQL是指微软的SQLServer数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。

    MySQL

    port:端口号,默认3306

    Access

    Access数据库属于文件型数据库 所以不需要端口号

    数据库特有的函数

    len和length
    

    在mssql和mysql以及db2内,返回长度值是调用len()函数;在oracle和INFORMIX则是通过length()来返回长度值。

    当你使用and len('a')=1的时候,返回正常页面时,可以推断当前的数据库类型可能是mssql,或mysql,或是db2。反之则可能会是oracle和informix。

    @@version和version()
    

    在mysql内,可以用@@version或是version()来返回当前的版本信息。但无法判断是mysql还是mssql时,可以用version()函数来构造判断。version()>1 返回与@@version>1 相同页面时,则可能是mysql。如果出现提示version()错误时,则可能是mssql。

    substring和substr
    

    在mssql中可以调用substring。oracle则只可调用substr
    总结一下:

    sql server: @@pack_received @@rowcount
    mysql:connection_id() last_insert_id() row_count()
    orcale:bitand(1,1)
    postgresql: select extract(dow from now())
    

    对于字符串处理方式

    sql server :id=1 and 'a'+'b'='ab' --
    mssql:id=1 and 'a'+'b'='ab'
    mysql:id=1 and 'a'+'b'='ab' , 'ab'=concat('a','b')
    oracle:id=1 and 'a'+'b'='a'||'b' ,'ab'=concat('a','b')
    postgresql :id=1 and 'a'+'b'='a'||'b' ,'ab'=concat('a','b')
    

    特殊符号,注释的判断

    “/*”是MySQL中的注释符,返回错误说明该注入点不是MySQL,继续提交如下查询字符:

    “--”是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。继续提交如下查询字符:

    “;”是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。

    在注入点后加(必须为注入点);--(一个分号,两个横线),例如:http://xxxx/article/as.asp?id=1;--。如果返回正常的话,说明数据库是MSSQL。在MSSQL数据库中;和--都是存在的,;用来分离两个语句,而--就是注释符,它后面语句都不执行。如果返回错误,基本可以肯定是ACCESS数据库了。

    总结一下:

    1,“null”和“%00”是Access支持的注释。
    2,“#”是MySQL中的注释符,返回错误说明该注入点可能不是MySQL,另外也支持’-- ',和/* */注释(注意mysql使用-- 时需要后面添加空格)
    3,“–”和/* */是Oracle,SQL server和MSSQL支持的注释符,如果正常,说明可能就是这仨了。
    4,“;”是子句查询标识符,在Oracle中不支持多行查询,返回错误,很可能是Oracle数据库。
    这样一串下来,基本就知道了数据库类型了
    

    MySQL和Mssql和access数据库的判断

    Access:
        and (select count(*) from MSysAccessObjects)>0 返回正常说明是access
        and exists(select count(*) from 表)
    SQLserver:
        and (select count(*) from sysobjects) >0 返回正常说明是mssql,这个表只有MSSQL数据库才有
    MySQL:
        and length(user())>0    返回正常说明是MySQL
    

    根据其返回的错误类型

    ORACLE
    ORA-01756:quoted string not properly terminated
    ORA-00933:SQLcommand not properly ended
    MS-SQL
    Msg 170,level 15, State 1,Line 1
    Line 1:Incorrect syntax near ‘foo
    Msg 105,level 15,state 1,Line 1
    Unclose quotation mark before the character string ‘foo
    MYSQL
    you have an error in your SQL syntax,check the manual that corresponds to you mysql server version for the right stntax to use near ‘’foo’ at line x

    通过各个数据库特有的数据表来判断

    1、mssql数据库

     http://127.0.0.1/test.php?id=1 and (select count(*) from sysobjects)>0 and 1=1
    

    2、access数据库

     http://127.0.0.1/test.php?id=1 and (select count(*) from msysobjects)>0 and 1=1
    

    3、mysql数据库(mysql版本在5.0以上)

      http://127.0.0.1/test.php?id=1 and (select count(*) from information_schema.TABLES)>0 and 1=1
    

    4、oracle数据库

      http://127.0.0.1/test.php?id=1 and (select count(*) from sys.user_tables)>0 and 1=1
    

    参考:

    https://www.jianshu.com/p/e308d96e2ecd

    https://blog.csdn.net/weixin_43221560/article/details/92005406

  • 相关阅读:
    树莓派关闭swap文件[浙大嵌入式系统]
    树莓派之objdump [浙大嵌入式系统]
    树莓派RAM[浙大嵌入式系统]
    温湿度传感器dht11的lcd显示[嵌入式系统]
    ucos II[嵌入式系统]
    MooTools 1.4 源码分析 Fx.CSS
    MooTools 1.4 源码分析 (关于Core、Type等模块分析)
    MooTools 1.4 源码分析 Fx.Tween
    MooTools Class.Mutators 如何建立一个我们自己的Mutator
    Javascript各种循环测试,达夫设备可用性分析
  • 原文地址:https://www.cnblogs.com/wangtanzhi/p/13052360.html
Copyright © 2011-2022 走看看