0
点赞
收藏
分享

微信扫一扫

SQL注入之数据库判断

Alex富贵 2022-04-14 阅读 69
sql

01 网站类型与数据库的联系

asp:SQL Server,Access
.net :SQL Server
php:Mysql,PostgreSql
java:Oracle,Mysql

可以根据网站类型来大概确定后续测试数据库的优先级。

02 依据主机端口

如果可以对主机进行端口扫描,可以根据是否开启对应端口,来大概判断数据库类型。

Oracle

默认端口号:1521

SQL Server

默认端口号:1433

MySQL

默认端口号:3306

PostgreSql

默认端口号:5432

Access

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

03 数据库特有函数

len和length

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

@@version和version()

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

substring和substr

在mssql中可以调用substring。oracle则只可调用substr

其它:

04 根据注释符判断

“#”是MySQL中的注释符,返回错误说明该注入点可能不是MySQL,另外也支持’-- ',和/* */注释(注意mysql使用-- 时需要后面添加空格)

“null”和“%00”是Access支持的注释。

“--”是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一。

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

05 根据其返回的错误类型

06 根据数据库特有表进行判断

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

举报

相关推荐

0 条评论