注入判断数据库类型
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- 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
-
是否可以使用辅助的符号来判断,如注释符号、多语句查询符等等
“/*”是MySQL中的注释符,返回错误说明该注入点不是MySQL,继续提交如下查询字符: “--”是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。继续提交如下查询字符: “;”是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库。
-
是否显可以利用错信息
在注入点后直接加上单引号,根据服务器的报错信息来判断数据库。错误提示Microsoft JET Database Engine 错误 '80040e14',说明是通过JET引擎连接数据库,则表明数据库为ACCESS数据库,如果是ODBC的话则说明是MSSQL数据库。
- 开放端口号