探索设计与体验的融合
Fusion design exploration and experience
新闻动态
News
好的网络营销公司会给客户提出建设性的意见,善于对客户进行良性引导
您的位置:>> 网站首页 >> 技术文章
通过WEB服务器应用程序攻击系统的详细介绍

80端口是标准的web服务端口,但是它出现了很多不同安全问题。攻击者可以通过这些漏洞获取到网站的管理权限,或者获取到整个网站。这篇文章可以帮助管理员和开发者更好的理解存在的威胁,并且检测到它们。

常见的攻击特征:

这部分举例说明常见的攻击WEB服务器的各种攻击手段。这也不是假设攻击手段或者可能的攻击特征,也许你试验用这样的手段能进入到你自己的系统里去。所有这些例子在实际的攻击当中都已经被使用到。

1、" * " 请求:星号常常被攻击者用做为系统命令中的一个参数。
例:
http://host/index.asp?something=..\..\..\..\WINNT\system32\_cmd_.exe?/c+DIR+e:\WINNT\*.txt
这个请求是查询E:\WINNT目录下所有的文本文件并列表出来。像这样的请求通常用来获取日志文件列表,以及其他重要的文件。不是很多的Web服务器能够使用这个字符请求,所以它不会被记录在日志文件里。

http://host/blah.pl?somethingelse=ls%20*.pl
这个请求得到一个UNIX系统目录里面所有perl脚本的列表,后缀名为.pl的。

2、" ~ " 请求:字符~有时候被攻击者用来判断你系统上存在的用户。

例:
http://host/~joe
这请求是用来查看远程系统上是否存在"joe"这个用户。通常用户拥有一个Web空间,攻击者设法到访问web页面,或者得到一个403错误(拒绝访问),那么用户"joe"是存在的。 一旦攻击者确认了用户名,他就可以开始猜测密码,或者暴力破解用户的密码,直到他们得到正确的密码。虽然还有其他很多种探测到系统用户的方法,但是这种方法是通过80端口进行的,所以它不会被IDS(入侵检测系统)检测到。

3、" ' " 请求
如果这个特殊的字符在你的日志文件中出现,那么可能有人试图用SQL语句攻击你。有时候在编写不安全的cgi程序中可以被攻击者在脚本中嵌入SQL命令。这样可能会被攻击者执行系统命令获取到呢的系统管理员权限。(大多数时候在UNIX上面是以root权限运行SQL的,如果是在MS-SQL则是administrator权限)

例:
http://host/cgi-bin/lame.asp?name=john`;EXEC master.dbo.xp_cmdshell'_cmd_.exe dir c:'--
这个请求在Windows NT机器上执行了_cmd_.exe shell。通过这样主管了远程机器,可以添加用户,上传木马,盗窃sam密码文件。如果想要了解更多关于SQL攻击可以访问http://www.cgisecurity.com/lib,另外www.owasp.org 上面也有大量的SQL嵌入例子。

4、" #, {} , ^ , and [] " 请求
如果你的日志文件里面出现了这些字符,那么可能攻击者在你的系统上创建了一些C或者Perl程序的源文件,一旦文件被建立并且执行,攻击者可能绑定一个shell到一个端口。
这篇文章不可能教会人们按例子轻易的编写和木马。这样的原因例子只能用一些UNIX命令差数,像ls -al [a-f]*。这能够列出所有从a到f的文件。该日志信息会在攻击者上传一个用perl脚本编写的后门的时候出现。

例:
http://host/dont.pl?ask=/bin/echo%20"#!/usr/bin/perl%20stuff-that-binds-a-backdoor"%20>/tmp/back.pl;/usr/bin/perl%20/tmp/back.pl%20-p1099

" ( and ) " 请求
这个值通常在跨站点脚本攻击中出现。现在跨站点脚本攻击引起很大的重视,很多大的站点都受到过这种攻击。

例:

http://host/index.php?stupid=< img%20src=java script:alert(document.domain)>

上面那个例子会被发送到index.php。在那里一个输出页面将显示出上面的javascript。下面你的浏览器将执行这个javascript,弹出一个窗口出来。

" + " Request
有 时,+作为一个空格( BLACK SPACE)来使用,同前面文件提到的%20相似.当在攻击中使用时,这经常同_CMD_.EXE后门 一起连用。在很多时候,攻击者会把_cmd_.exe复制到WEBROOT这个目录里面.一旦这个文件被复制,攻击者就可以完全掌握了你的windows机器.他会用+在script里面执行命令参数,如果有这种字符在你的log文件里而且没有异常,因为这个字符就会同web服务器一起被广泛使用。如果你的日志文件中有这个字符,你应该再仔细检查一遍,但没必要惊慌。

例:

http://site/scripts/root.exe?/c+dir+c:这个特殊的例子是用来请求调用root.exe后门程序的.这个后门是运行在sadmind/IIS上面的一个蠕虫.叫红色代码(Code Red),以及后来的Nimda."+"字符通常用在Windows后门复制_cmd_.exe之后.

添加蠕虫信息
http://www.cert.org/incident_notes/IN-2001-09.html

5、更多的高级特征
这部分更多的关注攻击者或者蠕虫的请求的文件,和更多的其他输出.这不能完全的列出攻击者的请求和文件,但可以给你一个很好的防范攻击思路.

Lots of "/" Requests(长"/"请求)
如果你检测你的日志,看到有大量的"/"字符.那么攻击者试图攻击你的apache服务器.这个漏洞存在于apache 1.3.20版本以下的任何apache服务器上面.可以让攻击者获得文件列表.

例:

http://host////////////////////////////////////////////////////////////////////////////////////////
这种利用方法的运行机制是使用一个脚本程序,每一次增加一个"/"直到获得文件列表为止.


命令文件和目录攻击者请求:

"autoexec.bat"
这个文件确定Windows的版本和每次自举时间.攻击者利用这个入侵之后可以扫除日志.

"root.exe"
这个后门在Sadmin/IIS上面,Code Red和Nimda蠕虫.这个后门复制_cmd_.exe并改名为root.exe放到webroot目录里面.如果攻击者或者蠕虫能够访问到这个文件,那么你一定有麻烦了.通常文件目录为"/scripts/" 和 "/MSADC/".

"nobody.cgi 1.0 A free Perl script from VerySimple"
这个cgi程序,本来是给admins权限用户提供帮助的一个shell后门.所以这个程序具有相当大的危险性,不适合使用.很多攻击者利用这个后门在web服务器上执行命令.

"[drive-letter]:\WINNT\system32\LogFiles\"
这是IIS服务器的日志目录.攻击者可能通过Web服务器访问到你的日志文件.如果你在日志中看到system32/LogFiles有这样的字符,那你的机器已经被攻击了.

"[drive-letter]:\WINNT\system32\repair\"
这个目录里面包含有NT系统的密码文件.这个文件的文件名是sam._(NT4)和sam(Win2k).如果一个攻击者得到了这个文件那么你的机器有真正的危险了.

Novell File systems
"[server-name]:SYSTEM:PUBLIC"
这是一个Novell系统文件例子.它可能被高级攻击者利用来查看远程文件.

6、跨站点脚本攻击的例子

修改的报头:
以下是你的日志文件中可能出现的内容。

x.x.x.x - - [10/Dec/2001:09:03:39 -0500] "GET / HTTP/1.1" 200 10453 "http://www.cgisecurity.com" "Mozilla/4.0
(compatible; MSIE 5.5; Windows NT 5.0; T312461)"

让我们来看看该日志的第11和12域。
We are going to look at the 11th and 12th field in this log.

11th "http://www.cgisecurity.com" 引用域
12th "Mozilla/4.0" 用户代理域

这些域都是由你的浏览器自动填写的。如果我在www.hosta.com有一个指向我的站点的连接并点击它的话我的浏览器会保存该信息并将其转到我的站点来。该信息被称为引用域。引用域是由你的浏览器自动填写,也就是说该信息是由客户机,而表示服务器提供的。也就是说该信息是“用户输入”的。由于该信息是用户输入,所以我们可以将其修改为任何我们想要的内容。
危险在于某些软件会从你的日志中读取值并显示出来。(例如显示网络服务器状态的软件)某些软件并不会很好的过滤掉元字符所以有可能出现代码插入的情况。

例:

su-2.05# telnet localhost 80
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET / HTTP/1.0
Referer: < javascript-that-is-evil-so-there's-no-need-for-examples>
User-Agent:

如果用户访问该页面并且引用部分被输出的话那么那么攻击者就有可能盗取用户的cookies。如果你觉得你所运行的软件存在这种风险的话你就应当定期对你的apache日志中的这个域进行检查。

有一种用于修改http报头的工具叫做"Websleuth"值得一试。

更多的编码方式:

这一章包括了攻击者或者是蠕虫用来逃避检查的编码手段。包括十六进制, Unicode,还有windows %u编码。这并不是一个什么"how to"的介绍,而是告诉你你应当在你的日志中检查哪些内容。

A.十六进制编码:

例如: %xx

上一篇文章中提到的字符的十六进制的值。如果你在任何日志文件中发现了这些字符的话那么很大的可能性是一个攻击者正在掩盖他的请求,甚至是正尝试饶过IDS。

这两篇文章中提到的字符的十六进制值。

%2e = . (例如: .. 请求)
%3e = > (例如: Html/javascript/SSI 插入。在上一篇文章中做了描述)
%3c = < (例如: Html/javascript/SSI 插入。在上一篇文章中做了描述)
%2a = * (在这篇文章的第二章有举例介绍)
%2b = + (例如: _cmd_.exe 后门请求。同样作为空格使用)
%60 = ` (在上一篇文章中有命令执行的例子)
%21 = ! (例如: SSI 插入。在上一篇文章中做了描述)
%7c = | (例如: 命令执行。在上一篇文章中做了描述)
%3b = ; (例如: 命令执行。在上一篇文章中做了描述)
%7e = ~ (在这篇文章的第二章有举例介绍)
%3f = ? (例如: Php/在上一篇文章中做了描述)
%5c = \ (例如: 可能是编码的对Windows的目录遍历尝试)
%2f = / (例如: 可能是编码的对Windows的目录遍历尝试)
%7b = { (例如: 可能是后门/目录上传尝试,也可能是命令的变元)
%7d = } (例如: 可能是后门/目录上传尝试,也可能是命令的变元)
%28 = ( (例如: 可能是跨站点脚本攻击尝试)
%29 = ) (例如: 可能是跨站点脚本攻击尝试)
%5b = [ (例如: 可能是后门/目录上传尝试,也可能是命令的变元)
%5d = ] (例如: 可能是后门/目录上传尝试,也可能是命令的变元)
%5e = ^ (例如: 可能是后门/目录上传尝试,也可能是命令的变元)

要获得这些字符的完整列表在Unix环境中键入"man ascii"。
下面是尝试获得服务器密码文件的目录遍历请求。

例子1:

http://host/script.ext?template=%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64

该请求是由以下部分组成的:

1. %2e%2e%2f%2e%2e%2f%2e%2e%2f = ../../../

2. %65%74%63 = etc

3. %2f = /

4. %70%61%73%73%77%64 = passwd

将这些连起来就可以欺骗IDS产品。
类似rain.forrest.puppies "Whisker"就是使用这种技术来避开检查的。


B.Unicode编码:

例如: %xx%xx

目前所有与安全有关的人员都对这种编码方式有所耳闻。著名使用这种编码方式的IIS的利用就提供了严格很好的例子。

* http://127.0.0.1/scripts/..%c0%af../winnt/system32/_cmd_.exe?+/c+dir+c:
因为相关的文档已经大量的存在了,所以我不会对这种编码技术做进一步的讨论。想获得有关unicode的信息请访问以下连接
http://www.ietf.org/rfc/rfc2279.txt

C. "%u"编码请求:

例如: %uxxxx

这种编码方式是被微软的IIS网络服务器所使用的。通过使用这种微软特有的编码方式攻击者就有可能入侵IDS产品。以下就是蠕虫或者是攻击者使用或不使用%u编码来对存在漏洞的系统进行攻击的例子。

http://host/lame.asp?asp=a.txt

这个请求是企图使用lame.asp读"a.txt"文件.

http://host/lame.asp?asp=%u0061.txt

这种请求通过使用"%u"微软编码请求来达到同样的目的。尽管你在手工浏览日志的情况下可能会发现这种情况,但是你的IDS有可能会漏掉这种情况并让攻击者可以继续进行侵害。这种编码方式同样可以与普通的ASCII字符一同使用,这样一些IDS产品就不会检测到这种请求。

你可以访问以下地址来获得编码手段的进一步信息。
http://www.eeye.com/html/Research/Advisories/AD20010705.html

403拒绝访问错误

该错误会在有人访问你标记为非完全可读属性文件的时候产生。一些情况下是网络管理员可能忘记将一个文件的属性定为可读的。更多的情况是当一个文件被标记为非完全可读(例如密码文件),而某些人却对其进行请求的时候就会出现警报,你应当删除或者转移该文件并对日志进行进一步的检查。


[Wed Feb 20 10:23:33 2002] [error] [client 192.168.1.1] (13)Permission denied: file permissions deny server
access: /some/path/htdocs/secret/apache-unreleased-overflow.c
(你的error_log中可能会出现的消息)

|-- 403 Code
192.168.1.1 - - [20/Feb/2002:10:23:33 -0500] "GET /secret/apache-unreleased-overflow.c HTTP/1.0" 403 206
(你的error_log中可能会出现的消息)

404 该页没有找到错误

如果你运行一个大或者只是中等规模的网站的话其他人可能会从其他的站点直接与你站点上的某些内容进行连接。一定的时间过去以后可能许多文件有了一些变化所以那些老的对文件的引用已经失效了。你可以在access_log或者error_log文件中对这些信息进行查询。某些时候对无效的或者是过期文件的请求可以让你发现那些你对文件的命名错误或者有人正在进行的刺探行为。IDS并不会对大多数的404错误进行记录,因为这类的错误信息并不是并不表示直接威胁的出现。如果对所有的404代码都进行检验的话那将是一场噩梦,因为404是站点所遇到的最普遍的错误并且在百分之99.99的情况下都并不是攻击或者刺探。而IDS软件会对这些错误请求中出现的文件名进行检查,我在下面会列举出一些这类的文件名。

以下是的日志是由于某人对我的网站进行扫描寻找FORMail cgi脚本而产生的。FORMail存在许多安全问题,并且目前发现被广泛的利用来发送垃圾邮件。

[Wed Feb 20 10:30:42 2002] [error] [client 192.168.2.2] script not found or unable to stat: /usr/local/apache/
cgi-bin/FORMail.pl
(你的error_log中可能出现类似的信息)

|-- 404 Code
192.168.2.2 - - [20/Feb/2002:10:30:42 -0500] "GET /cgi-bin/FORMail.pl HTTP/1.0" 404 3683 "-" "Mozilla/4.78 [en
] (Win98; U)"
"Mozilla/4.78 [en] (Win98; U)"
(你的access_log中可能出现类似的信息)


这是某人正在对你的机器或者子网进行扫描来寻找安全漏洞而产生的警告。但是很显然如果在你的日志中出现了404代码的话并不意味着你正在被攻击。仔细的查看你的日志找出那些连接错误的文件,同时也查找那些有异常情况的文件请求。

以下是另一个查看目标主机是否存在Nimda以及著名的红色代码留下的后门的请求。

[Tue Dec 18 05:11:04 2001] [error] [client 192.168.3.3] File does not exist: /usr/local/apache/htdocs/MSADC/ro
ot.exe
(你的error_log中可能出现类似的信息)

|--- 404 code

192.168.3.3 - - [18/Dec/2001:05:11:04 +0000] "GET /MSADC/root.exe?/c+dir HTTP/1.0" 404 3147
(你的access_log中可能出现类似的信息)

一般情况下人们都想对这些文件进行扫描以轻易的获得一台存在后门的机器。由此他们就可以完全的控制你运行IIS的主机。

500 服务器错误

某些时候攻击者想对可以执行命令或者有远程文件读取功能的软件进行测试的时候他们会插入一些字符(正如以上所说的那样)来达到目的。而有些时候脚本不能够处理这些额外信息而非正常退出了。这就会在你的日志中留下服务器错误(500代码)。但并不是所有的500代码都表示攻击者正在对你进行扫描。一般来讲用户上传了脚本但是并没有针对特定的系统进行配置的话就会产生该错误。

以下是一个例子

|--- 500 Code
192.168.4.4 - - [18/Dec/2001:05:11:04 +0000] "GET /cgi-bin/port80.cgi HTTP/1.0" 500 529 "-"
"Mozilla/4.78 [en] (Win98; U)"
(access_log)

[Thu Dec 13 15:30:23 2001] [error] [client 192.168.4.4] Premature end of script headers:
/usr/local/apache/cgi-bin/port80.cgi
(error_log)

Depending on what exactly the attacker is attempting to do, will determine exactly what
the reason will be in your error_log.

Htaccess error codes

并不是所有的错误消息都是由于有人正在对你的系统进行攻击所产生的。更多的情况只是例如用户使用了错误的用户名或者密码这种简单的情况所产生的饿。从另一方面来说也有可能是攻击者运行例如“WWWhack”这样的程序来暴力破解密码以获得须授权区域的访问路径。以下是一个例子:

192.168.5.5 - miked [30/Jan/2002:13:37:26 -0500] "GET /secret HTTP/1.0" 401 397 "-" "Mozilla/4.78 [en]C-CCK-MCD sn
apN45b1 (Win98; U)"
(你的access_log中可能出现类似的信息)

[Wed Jan 30 13:37:26 2002] [error] [client 192.168.5.5] user miked: authentication failure for "/secret": password mismatch
(你的error_log中可能出现类似的信息)

这显示了来自192.158.5.5的以miked作为用户名的登录尝试失败。如果你发现了来自同一个IP地址的大量失败请求的话,那么有很大的可能有人正在对你的密码进行暴力破解。尝试的次数在1-40的范围内可能是有人忘记了自己的密码。还有一种情况是如果一个IP地址正尝试用不存在的帐户或者多个用户名登录的话那么也是某人正在进行破解。

为 了防止攻击者通过80端口入侵你的系统,你需要一套能够防御住80端口攻击的安全攻击。现阶段世界上唯一优秀的预防通过80端口攻击系统的安全软件就是四川安盟科技有限公司的S-web 2.0入侵防御系统。它在WEB端口上加载了一个应用级防火墙,结合基于主机的入侵检测系统,能强有力的保护WEB端口,还能抵御住未知攻击手段对系统的攻击。

相关链接>>
您对此文有什么评论?
类型: 意见建议 内容报错
网友对此文的评论:
未有评论!