SQL Server 7.0 sa帐号密码攻击法 9 B$ F( o' F# n! X7 E, j4 b5 Y& d7 j) V- B
影响版本: 5 n. @% T& j8 ?+ l3 t' Q, D2 E8 ZSQL Server 7.0 2 L6 ?, k) a a5 Y * Y- z% q- l: }+ e- R3 R" R漏洞描述5 X D+ H% g$ S9 P, {" _" k% ]1 @
使用一个很简单的策略,就可以随意的改变SQL 7.0服务器的SA(system administrator)的密码.MS SQL Server 7.0在master.mdf使用sysxlogins表对象保存登陆信息.它的password字段的类型是varbinary(256)。执行这样的一个查询"select name, convert(varchar(256), password) from sysxlogins"将返回和密码等价的字符串。有趣的是密码是被保存为16个字节的数值。所以如果密码少与16个字节也产生一个16个字节长的加密字符串。这个固定长度的密码被保存在sysxlogins表中的一个固定位置。.如果密码多与16个字符,那么前16个字符还是保存在同样的位置。所以我们只要这样一来做就可以改变这个SA管理帐号的密码:. p' g' L3 T* p+ u1 k
a) 找到这个适当的加密字符5 p1 ^3 m7 e$ Z
b) 找到在sysxlogins表中密码的偏移位置" f& t! h$ ]2 n
c) 定位到记录sa Y) J, P9 |9 j. m- P' `
d) 替换password字段1 Z- l8 U, q8 ?0 o% k
/ |* ^$ L. ~ T$ W4 B* y证实过程) }1 | z6 o- Y$ t6 G2 |6 r
要成功的改变密码,SQL Server应该要在修改其间停止运行,并且你必须要拥有对SQL数据目录的读写访问权限。这的确限制了这个安全漏洞,但是使用其它的技术可以绕过这个限制。. X9 V& a) R% [) F$ g
合理运用这个方法,你也完全可以把它当成一个管理工具,一旦当你的SQL Server的SA密码丢失时,可以恢复数据库使用。 * b1 r! N! `, M4 \! Y+ F; m; k, c0 @( F @& M
防范方法 0 `" E3 c2 L6 X! M/ u由于这个漏洞必须是在SQL Server停止服务的时候才能够进行,最简单的办法就是严格保护你的系统中对DATA和BACKUP目录文件的访问权限。让服务器上的服务启动权限只有管理员帐号才能够拥有。但是有一种SQL Crash攻击可以让SQL Server停止服务。简要信息如下:- M6 z+ D- V% |( F+ o& w
这种攻击方法被称为:“Malformed TDS Packet Header”漏洞。如果一个特定格式的TDS数据包被发送给SQL server,将导致服务器Crash.这种攻击将导致不能够访问服务器上的数据,但是它也不能够让攻击者自己控制这台服务器。而只要重新启动SQL Server就能够解决这个问题。但是唯一的缺陷是,如果受攻击的机器开放了1433端口,允许远程访问SQL Server数据库的话,有恶意的人就可以使用上面提到的那个方法修改SA帐号的密码。 ! p. w; {' |* l' Y2 o0 V7 y9 v* ^' J% y2 H- g1 ?" b% I
解决方案:3 w& _& K# `2 A5 K
1。首先下载最新的补丁解决“Malformed TDS Packet Header”漏洞。这有这个漏洞的详细描述: ; A s- o) R7 u$ o1 k3 ehttp://www.microsoft.com/technet/security/bulletin/fq99-059.asp 2 w3 {" z1 k. e3 g8 J9 L9 O6 @9 g$ W2。尽量使用SQL SERVER的第二种登陆方式:Windows NT Authentication 方式下面是一篇详细介绍有关SQL Server安全设置的文章。 2 a4 e7 ~! g2 ~9 X- D& y/ q3 {http://www.microsoft.com/sql/DeployAdmin/Security.doc