“JSP”是“Java Server Pages”的缩写,是由Sun公司倡导、许多公司共同参与建立的一种动态网页技术标准。JSP技术是以Java作为脚本语言的,JSP网页为整个服务器端的Java库单元提供了一个接口为HTTP的应用程序服务。在传统的网页HTML文件(*.htm、*.html)中加入Java程序片段和JSP标记,就构成了JSP网页(*.jsp)。Web服务器在访问JSP网页的请求时,首先执行其中的程序片段,然后将执行结果以HTML格式返回给客户。程序片段可以操作数据库、重新定向网页、发送电子邮件等,这就是动态网站所需要的功能。所有程序操作都在服务器端执行,通过网络传送给客户端的仅是得到的结果,对客户浏览器的要求最低,可以实现无插件、无ActiveX、无Java Applet甚至无框架。
Tomcat是一个免费的开源Servlet容器,它是Apache基金会Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发。由于有了Sun的参与和支持,最新的Servlet和JSP规范总能在Tomcat中得到体现。与传统的桌面应用程序不同,Tomcat中的应用程序是一个WAR(Web Archive)文件。WAR是Sun提出的一种Web应用程序格式,与JAR类似,也是一个包含许多文件的压缩包。这个包中的文件按一定目录结构来组织,通常其根目录下包含HTML和JSP文件(或者包含这两种文件的目录),另外还有一个WEB-INF目录(这个目录很重要)。通常在WEB-INF目录下有一个web.xml文件和一个classes目录,web.xml是这个应用的配置文件,而classes目录下则包含编译好的Servlet类和JSP或Servlet所依赖的其他类(如JavaBean)。这些所依赖的类一般也可以打包成JAR文件放到WEB-INF下的lib目录下,当然,也可以放到系统的CLASSPATH目录下,但那样做会给移植和管理带来很多不便。
在Tomcat中,应用程序的部署很简单,只需将WAR文件放到Tomcat的webapp目录下,Tomcat就会自动检测到这个文件并将其解压。在浏览器中访问这个应用的JSP程序时,第一次通常会很慢,因为Tomcat要将JSP文件转化为Servlet文件,然后进行编译。编译以后,访问速度将变得很快。另外,Tomcat提供了一个应用——manager,访问这个应用需要用户名和密码,用户名和密码存储在一个XML文件中。通过这个应用,借助FTP,可以在远程通过Web部署和撤销应用(当然在本地也可以),本案例就是利用这个特性来构建后门程序的。
Tomcat不仅是一个Servlet容器,也具有传统Web服务器的功能——处理HTML页面。但是与Apache相比,它处理静态HTML的能力不如Apache。可以将Tomcat和Apache集成到一起,让Apache处理静态HTML,让Tomcat处理JSP和Servlet。要想实现这种集成,只需要修改Apache和Tomcat的配置文件即可。
服务器安装Apache Tomcat后,会默认开放8080端口供外部连接使用,一般在浏览器中输入“IP:8080”或者域名来访问Apache Tomcat页面,如图7-128所示。
图7-128 访问Apache Tomcat页面
Tomcat安装完成后有一个配置文件tomcat-users.xml,它位于Tomcat程序安装目录的conf目录下,直接打开该文件可以看到其中关于用户名和密码的明文值,如图7-129所示,找到并记住包含“admin,manager”行的用户名和密码。
图7-129 获取用户配置的用户名和密码
说明
(1)有很多对Tomcat不是很了解的管理员在安装Tomcat后没有修改默认密码(默认用户名是“admin”,密码为空),如果是这种情况可以直接登录。
(2)如果用户修改了该密码,那么其密码一定保存在tomcat-users.xml文件中,因此可以通过WebShell获取这个文件的内容。
Tomcat提供了在线管理功能,本案例也正是利用该功能来构建后门的。如图7-128所示,单击页面左侧的“Tomcat Manager”超链接,会弹出一个要求输入用户名和密码的窗口。该窗口与Windows登录窗口有点类似,如图7-130所示。
图7-130 登录Tomcat管理应用
输入从tomcat-users.xml文件中获取的具有管理员权限的用户名和密码,验证通过后进入部署管理页面,如图7-131所示。
图7-131 部署管理页面
说明
(1)在部署管理页面中可以“Start”(启动)、“Stop”(停止)、“Reload”(重载)、“Undeploy”(删除部署)已经部署的项目。单击“Undeploy”选项会对文件进行物理删除。
(2)部署的文件夹名称是“*.war”文件的名称。例如,上传的文件是job.war,则在Tomcat目录中会对应生成一个“job”文件夹。
在部署管理页面的下方有一个“WAR file to deploy”设置区。选择一个已经设置好的后门WAR文件(本例中的后门程序为job.war),将该文件部署到服务器上,如图7-132所示。
图7-132 将后门WAR文件上传到服务器
说明
(1)部署的文件必须是WAR文件。
(2)将WinZip软件安装在系统中,然后将单个或多个JSP后门文件压缩成一个文件,压缩成功后,将文件后缀从“.zip”更改为“.war”即可。
(3)上传文件后,Tomcat会自动进行部署并运行。
在地址栏中输入“部署文件名称/JSP文件名”,如图7-133所示,在本例中是“http://127.0.0.1:8080/job/job.jsp”,如果设置正确会显示WebShell登录窗口。
图7-133 登录WebShell
在WebShell中输入密码后,进入WebShell管理界面,默认显示服务器的一些信息。在功能菜单中选择“系统命令”选项,并在“执行命令”文本框中输入“netstat -an”命令,即可查看网络连接,如图7-134所示。
图7-134 执行命令
说明
(1)通过这种方式部署的JSP后门程序具有较大权限,可以执行添加用户等危险命令。
(2)在JSP后门中可以通过“文件系统”模块对文件进行操作,通过“数据库”模块进行连接数据库等操作。
(3)本案例构建的后门也正是这里。平时可以在系统中保留一个小的后门程序,如果后门程序被杀毒软件查杀或者被管理员发现并删除,则可以通过以上步骤重新进行部署,从而永久保留后门。
对本案例介绍的后门,防范措施如下。
(1)在初次安装Tomcat时,一定要设置密码。
(2)定期修改Tomcat管理员密码。修改Tomcat远程管理默认端口8080为其他端口,或者在远程管理操作结束后停用远程管理功能。
本案例介绍的方法适合于管理员(admin)密码为空的情况,也适用于获取了Tomcat的tomcat-users.xml文件中的用户名和密码的情况。一般来讲,内网防护相对弱一些,因此本案例对于内网渗透有一定的帮助。由于笔者对JSP不是特别熟悉,不知道在JSP中是否可以进行诸如IIS中的严格的权限限制,以及能否禁止JSP WebShell的执行,因此,本案例只探讨服务器攻防——功能再强大的应用程序,也往往会因为存在一个微小的漏洞就被完全攻破。