SQL手工注入漏洞测试(Sql Server数据库)
1. 测试注入点
点击公告
报错,存在数字型的sql注入
开注
2. order by查询列数
2正常回显,3报错,但是4又正常,5以上报错
3. 联合查询判断占位
但是报错
union用于合并两个或多个select语句的结果集,并去除表中任何重复行
且union内部的select语句必须拥有相同数量的列,列也必须拥有相似的数据类型
同时,每条 select语句中的列的顺序必须相同
默认地,union操作符选取不同的值,如果允许重复,要使用union all
使用union all seletct测试一下,仍然报错,说明数据类型有问题,需要测试一下不同位置的数据类型
将占位的数值置为null,方便测试
开始逐位测试数据类型,得到结果如下
4. 查询数据库名
通过db_name(),查询数据库名为mozhe_db_v2
DB_NAME ( [ database_id ] ):返回当前数据库的名称
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=用户表
靶场突然崩了重启一下,启动一年了哥。。
终于重进了,回归正题
6. 查询列名
构造语句select top 1 col_name(object_id('manage'),1)获取第一列的名称
col_name(table_id , column_id):根据表列的表标识号和列标识号值返回该表列的名称
其中,table_id:包含该列的表的标识号,column_id:列的标识号
并不需要id,获取第二列和第三列,得到username,password
7. 获取数据
不容易啊。。
通过union all select 1,username,password,'4' from manage ,获取第一列数据
得到用户名为admin_mz,密码md5解密后为97285101
进入后台,得到flag为mozhe411a3d9fe0601772a8eba762368
标签:语句,name,union,数据库,Server,报错,id,select,注入 From: https://www.cnblogs.com/Iwakura-Lain/p/17429274.html