多种数据库注入复线-墨者学院Sql Server数据库手工注入

发布时间 2023-05-24 19:35:12作者: IwakuraLain

SQL手工注入漏洞测试(Sql Server数据库)

fig:

1. 测试注入点

点击公告

fig:

报错,存在数字型的sql注入

fig:

fig:

开注

2. order by查询列数

2正常回显,3报错,但是4又正常,5以上报错

fig:

fig:

fig:

fig:

3. 联合查询判断占位

但是报错

fig:

union用于合并两个或多个select语句的结果集,并去除表中任何重复行

且union内部的select语句必须拥有相同数量的列,列也必须拥有相似的数据类型

同时,每条 select语句中的列的顺序必须相同

默认地,union操作符选取不同的值,如果允许重复,要使用union all

使用union all seletct测试一下,仍然报错,说明数据类型有问题,需要测试一下不同位置的数据类型

fig:

将占位的数值置为null,方便测试

fig:

开始逐位测试数据类型,得到结果如下

fig:

4. 查询数据库名

通过db_name(),查询数据库名为mozhe_db_v2

DB_NAME ( [ database_id ] ):返回当前数据库的名称

fig:

5. 查找找表名

构造语句select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype='u'

select top 1 name from (dbName).dbo.sysobjects where xtype='u'
SELECT TOP:语句来限制查询返回的行
top 1:取出第一个值
name:sysobjects表中参数,为对象名或常用列
from [dbName].dbo.sysobjects:指定数据表
xtype:name同理,指定对象类型,其中U=用户表

fig:

靶场突然崩了重启一下,启动一年了哥。。

fig:

终于重进了,回归正题

6. 查询列名

构造语句select top 1 col_name(object_id('manage'),1)获取第一列的名称

col_name(table_id , column_id):根据表列的表标识号和列标识号值返回该表列的名称
其中,table_id:包含该列的表的标识号,column_id:列的标识号

fig:

并不需要id,获取第二列和第三列,得到username,password

fig:

fig:

7. 获取数据

不容易啊。。

通过union all select 1,username,password,'4' from manage ,获取第一列数据

fig:

得到用户名为admin_mz,密码md5解密后为97285101

fig:

进入后台,得到flag为mozhe411a3d9fe0601772a8eba762368