sql注入基础(二)

判读数据库类型方法:

(1)通过端口推算对应的数据库

mysql默认端口:3306
Oracle默认端口号:1521
SQL Server默认端口号:1433
PostgreSql默认端口号:5432

(2)通过脚本语言推算对应的数据库

Linux + Apache/Nginx:PHP(MySQL)
Windows + IIS:ASP(Access/SQL Server)、	ASP.NET(SQL Server)
//SQL Server简称ms SQL、aspx是ASP.NET的页面后缀名
Linux + Tomcatt:JSP(做练习一般用Mysql,小企业网站一般用Sql Server,大型的网站一般用oracle)
python:PostgreSql、Mysql

(3)根据注释符判断

“#”是MySQL中的注释符,返回错误说明该注入点可能不是MySQL,另外也支持’-- ',和/* */注释(注意mysql使用-- 时需要后面添加空格)
“null”和“%00”是Access支持的注释
“--”是Oracle和MSSQL支持的注释符,如果返回正常,则说明为这两种数据库类型之一
“;”是子句查询标识符,Oracle不支持多行查询,因此如果返回错误,则说明很可能是Oracle数据库

(4)根据数据库特有表进行判断

  • 1、access数据库
    ?id=1 and (select count(*) from sysobjects)>0 and 1=1
  • 2、mssql数据库
    ?id=1 and (select count(*) from msysobjects)>0 and 1=1
  • 3、mysql数据库(mysql版本在5.0以上)
    ?id=1 and (select count(*) from information_schema.tables)>0 and 1=1
  • 4、oracle数据库
    ?id=1 and (select count(*) from sys.user_tables)>0 and 1=1

(5)根据返回类型进行判断

oracle:

ORA-01756:quoted string not properly terminated
ORA-00933:SQLcommand not properly ended

msssql(sql sever):

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

mssql:

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
posted @ 2022-12-28 22:05  bcxc9405  阅读(48)  评论(0编辑  收藏  举报
/*
*/