通过WEB服务器应用程序攻击系统
2009-07-08 中国IT实验室
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。