前端之家收集整理的这篇文章主要介绍了
了解mssql数据库,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_
301_0@
0x00 前言
@H_
301_0@介于这段时间比较忙,所以
博客的更新也比较慢。本来想前几天就发这个ms
sql数据库的,但是因为ms
sql的结构比较复杂,利用方式也比较多,所以又去深入研究了一下ms
sql的
数据库结构和各类的利用方式,以前都是工具一顿唆没有深入去研究过一些手工注入。
@H_
301_0@
0x01 了解mssql数据库
@H_
301_0@这里说的ms
sql也就是我们的
sqlserver
数据库
美国Microsoft公司推出的一种关系型数据库系统。sql Server是一个可扩展的、高性能的、为分布式客户机/服务器计算所设计的数据库管理系统,实现了与WindowsNT的有机结合,提供了基于事务的企业级信息管理系统方案。
(1)高性能设计,可充分利用WindowsNT的优势。
(2)系统管理先进,支持Windows图形化管理工具,支持本地和远程的系统管理和配置。
(3)强壮的事务处理功能,采用各种方法保证数据的完整性。
(4)支持对称多处理器结构、存储过程、ODBC,并具有自主的sql语言。 sqlServer以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台。
@H_
301_0@上面是
百度百科的资料。
@H_
301_0@ms
sql和
sqlserver有着很大的不同,
sqlserver的结构比较复杂,注入语句也比较复杂。但是如果在注入当中
数据库是采用sa
用户来运行的,那么我们就可以很轻松的拿下webshell。ms
sql可以直接启用存储过程来执行命令。
@H_
301_0@我们来看一下ms
sql的系统
自带数据库的作用。
@H_
301_0@

@H_
301_0@
@H_
301_0@
@H_
301_0@
master 数据库存放着一切对象的信息,sa或者其他用户的密码 以密文存储
model: 存在创建用户数据库的模板
msdb:用户数据库,存放所有的任务调度
tmpdb:临时数据库,在注入时候如果受限制显示位,存在在某表里面,然后再爆数据。重启会清空tempdb的数据
@H_
301_0@
数据库自带用户介绍:
前面带#号的是mssql 内部用户数据库仅用数据库内部使用
nt开头的是数据库安装的时候创建的
@H_
301_0@

@H_
301_0@
@H_
301_0@
@H_
301_0@
@H_
301_0@如果m
sql 执行命令是使用nt serivice\ms
sqlserver 这个 服务来执行命令 。
@H_
301_0@
@H_
301_0@下面我们来
查询个看看,来查看与
MysqL 不同的地方。
select * from master.dbo.sysobjects where xtype = 'u';
@H_
301_0@matster是指定
数据库名点号后面跟上的是他的架构 再
加上表名。
@H_
301_0@那么我们发现其实这个
数据库里面根本没有这张表是怎么回事?
@H_
301_0@其实这个只是我们的视图,而不是我们真正的表。
@H_
301_0@sysobjects 是系统的视图,用于存放改
数据库内创建的所有对象、如约束、默认值、日志、规则、存储过程,
xtype是代表对象类型:
U:表(用户自定义的表)
V:视图
P :存储过程
X :扩展存储过程
@H_
301_0@我们可以来
查询我们所有的
数据库名字
from master..sysdatabases;
@H_
301_0@

@H_
301_0@
@H_
301_0@
@H_
301_0@
@H_
301_0@这个
查询的也是我们的视图 在ms
sql里面information这个
数据库也都是以视图的形式存在的
@H_
301_0@查看是否站库分离
and (select host_name()) = (select @@servername))
@H_
301_0@
查询数据库的名字,这个
函数可以遍历 在括号里面输入数字可以
查询对应的
数据库名字
@H_
301_0@
@H_
301_0@

@H_
301_0@
@H_
301_0@
@H_
301_0@
@H_
301_0@这里再来说到ms
sql的权限划分,
sa:sysadmin 超级管理员权限
dbo : db_owner 数据库管理员权限
public :访问用户权限
@H_
301_0@
@H_
301_0@
@H_
301_0@
0x02 存储过程
存储过程(Stored Procedure)是在大型数据库系统中,
一组为了完成特定功能的sql 语句集,它存储在数据库中,一次编译后永久有效
,用户通过指定存储过程的名字并给出参数(如果该存储过程带有参数)来执行它。
存储过程是数据库中的一个重要对象。
在数据量特别庞大的情况下利用存储过程能达到倍速的效率提升
@H_
301_0@那么我们在实战当中就可以利用到存储过程来直接执行cmd命令
@H_
301_0@常用的存储过程有xp_cmdshell,sp_oacreate sp_oacreate这个存储过程执行命令无回显,需要
输出到txt
文件然后进行查看。
@H_
301_0@在00版本是默认开启xp_cmdshell的 05版本后需要手工开启。
@H_
301_0@
@H_
301_0@
0x03 结尾
@H_
301_0@
本次文章耗时3小时,记录一下时间点。下篇文章写mssql各类注入语法与bypass手法
@H_
301_0@

@H_
301_0@