注入判断数据库类型

SQL注入-数据库判断

国内的网站用ASP+Access或SQLServer的占70%以上,PHP+MySQL占20%,其他的不足10%。

常见的数据库Oracle、MySQL、SQL Server、Access、MSsql、mongodb等

关系型数据库通过外键关联来建立表与表之间的关系,非关系型数据库通常指数据以对象的形式存储在数据库中,而对象之间的关系通过每个对象自身的属性来决定.

关系型数据库:由二维表及其之间的联系组成的一个数据组织。如:Oracle、DB2、MySql

非关系型数据库:非关系型数据库产品是传统关系型数据库的功能阉割版本,通过减少用不到或很少用的功能,来大幅度提高产品性能。如:NoSql、Cloudant

常用组合:

asp: sql server,Access
.net : sql server
php: PostgreSQL,Mysql
java: Oracle,Mysql
前端框架和数据库的组合,这个有助于缩小我们的判断范围。

  1. 是否可以使用特定的函数来判断,该数据库特有的

    1-  len和length
    在mssql和mysql以及db2内,返回长度值是调用len()函数;在oracle和INFORMIX则是通过length()来返回长度值。
    当你使用and len('a')=1的时候,返回正常页面时,可以推断当前的数据库类型可能是mssql,或mysql,或是db2。反之则可能会是oracle和informix。
    
    2-  @@version和version()
    在mysql内,可以用@@version或是version()来返回当前的版本信息。但无法判断是mysql还是mssql时,可以用version()函数来构造判断。
    version()>1 返回与@@version>1 相同页面时,则可能是mysql。如果出现提示version()错误时,则可能是mssql。
    
    3-  substring和substr
    在mssql中可以调用substring。oracle则只可调用substr
    
  2. 是否可以使用辅助的符号来判断,如注释符号、多语句查询符等等

    “/*”是MySQL中的注释符,返回错误说明该注入点不是MySQL,继续提交如下查询字符:
    “--”是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。继续提交如下查询字符:
    “;”是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。
    
  3. 是否显可以利用错信息

在注入点后直接加上单引号,根据服务器的报错信息来判断数据库。错误提示Microsoft JET Database Engine 错误 '80040e14',说明是通过JET引擎连接数据库,则表明数据库为ACCESS数据库,如果是ODBC的话则说明是MSSQL数据库。
  1. 开放端口号
posted @ 2020-08-01 12:53  admin刍狗  阅读(416)  评论(0编辑  收藏  举报