目录
频道首页
sql注入判断数据类型
收藏
0
zkpyr0 最近修改于 2023-05-04 20:44:54

在实际测试过程中尝试进行SQL注入第一步就是判断数据库类型,因为我们不容易知道对方使用的是什么数据库。

目前来说,企业使用MSSQL即SQLserver的数量最多,MySQL其次,Oracle再次。除此之外的几个常见数据库如 Access、PostgreSQL、db2则要少的多的多。

常用SQL注入判断数据库方法

  • 使用数据库特有的函数来判断

  • 使用数据库专属符号来判断,如注释符号、多语句查询符等等

  • 报错信息判断

  • 数据库特性判断

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

asp:SQL Server,Access

.net :SQL Server

php:Mysql,PostgreSql

java:Oracle,MysqlS

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

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

其它:

sql server: @@pack_received @@rowcount

mysql:connection_id() last_insert_id() row_count()

orcale:bitand(1,1)

postgresql: select extract(dow from now())

因为mssql没有报错函数,类型不匹配就能报错,所有就有数字型/用户名这样的类型。在通过排序点逗号闭合的特点来进行后面的注入。

select  * from  xxxx order by 1,2,3,1/user

04 根据注释符判断

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

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

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

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

05 根据其返回的错误类型

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

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

内容大纲
批注笔记
sql注入判断数据类型
ArticleBot
z
z
z
z
主页
会议室
Git管理
文章
云文档
看板