admin

Discuz!ML V3.X 代码注入
pocPOC:portal.php修改cookie中的xx_xx_language字段值 为'.payload.'...
扫描右侧二维码阅读全文
27
2019/07

Discuz!ML V3.X 代码注入

poc

POC:
portal.php
修改cookie中的xx_xx_language字段值 为'.payload.'

漏洞分析

由poc可知是在portal.php触发的根据提示错误的信息可以知道漏洞的位置应该就在以下三个文件内

  1. portal.php
  2. source/module/portal/portal_index.php
  3. data/template/en'.123.'_1_1_common_header_portal_index.tpl.php

在35行断点跟进

跳转到 function_core.php line 829~838

接着进入/source/module/portal/portal_index.php


这里include了一个template函数继续跟进
/source/function/function_core.php line 644

可以看到$cachefile=./data/template/en'.123.'_1_diy_portal_index.tpl.php
可以看到DISCUZ_LANG储存了输入的payload 经过一些处理我们来看最后返回的是什么数据

那么相对应的就是执行了 include_once include_once './data/template/en'.123.'_1_diy_portal_index.tpl.php';
因为 字符串和数字类型的拼接爆了错误,那么我们可控的就是DISCUZ_LANG
此常量是在/source/class/discuz/discuz_application.php line341定义的

首先在在line250~253对cookie中字段进行处理 去除了每个字段名的前十位


            // set language from cookies
            if($this->var['cookie']['language']) {
                $lng = strtolower($this->var['cookie']['language']);
//DEBUG
//echo "Cookie lang=",$lng,"<br>";
            }

获取了cookie中的language

知道了流程那么构造payload就变的简单了 命令执行使用'.system(id).'

写入shell使用file_put_contents
'.file_put_contents('11.php',str_rot13("<?cuc cucvasb(); ?>")).'

Last modification:July 27th, 2019 at 11:45 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment