看到有一些管理员用LOGON触发器来控制对服务器的访问。
这种情况经常遇到,就写个文章记录一下。
CREATE TRIGGER RestrictAccessPerHostname ON ALL SERVER FOR LOGON AS BEGIN IF ( HOST_NAME() NOT IN ('tuifei1','tuifei2','tuifei3','tuifei4','tuifei5') ) BEGIN RAISERROR('You cannot connect to SQL Server from this machine', 16, 1); ROLLBACK; END END上面代码检查‘host_name’是否有传入连接,如果不在列表中,则不允许登录。
遇到这种其实真的很简单,我们看一下netspi的一篇文章就写的特别很详细了。
SSMS伪造主机名
在SSMS中打开“Connect Object Explorer”
并导航到“Additional Connection Parameters”选项。
我们可以在这里即时设置连接字符串属性(超酷)。
对于这个例子来说,我们将“Workstation ID”属性设置为“DevBox”,它是白名单中的一个主机名。
注意:稍后我会介绍几种识别白名单中的主机名的方法。
单击连接按钮进行登录。打开一个查询窗口并重新检查主机名,这时将会变成“DevBox”。这进一步说明我们成功欺骗了主机名检测机制。
SELECT HOST_NAME() 使用连接字符串伪造主机名SSMS伪造主机名实际上,SSMS只是使用”workstation id”属性集建立一个连接字符串。下面是一个连接字符串的例子,它会以当前Windows用户的身份连接到远程SQL Server实例,并选择“Master”数据库。