PbootCMS-XSS(stored)漏洞分析

释放双眼,带上耳机,听听看~!

【奇思淫技】TP5最新getshell漏洞

ThinkPHP 是一个快速、简单的基于 MVC 和面向对象的轻量级 PHP 开发框架,遵循 Apache2 开源协议发布。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重开发体验和易用性,为 WEB 应用和 API 开发提供了强有力的支

本文作者:WHITE(Ms08067实验室核心成员)

一、漏洞摘要

bootCMS是全新内核且永久开源免费的cms,在其V2.0.2版本中存在存储型XSS
漏洞名称:PbootCMS存储型XSS 
产品首页:https://www.pbootcms.com
软件链接:

https://github.com/hnaoyun/PbootCMS
版本:V2.0.2-20190915

二、漏洞概述

漏洞路径为

/PbootCMS/apps/home/controller/ParserController.php

public function parserSiteLabel($content)
    {
        $pattern = '/\{pboot:site([\w]+)(\s+[^}]+)?\}/';
        if (preg_match_all($pattern, $content, $matches)) {
            $data = $this->model->getSite();
            $count = count($matches[0]);
            for ($i = 0; $i < $count; $i ++) {
                $params = $this->parserParam($matches[2][$i]);
                switch ($matches[1][$i]) {
                    case 'index':
                        $content = str_replace($matches[0][$i], Url::home('home/Index/'), $content);
                        break;
                    case 'path':
                        $content = str_replace($matches[0][$i], SITE_DIR, $content);
                        break;
                    case 'logo':
                        if (isset($data->logo) && $data->logo) {
                            if (! preg_match('/^http/', $data->logo)) {
                                $content = str_replace($matches[0][$i], $this->adjustLabelData($params, SITE_DIR . $data->logo), $content);
                            } else {
                                $content = str_replace($matches[0][$i], $this->adjustLabelData($params, $data->logo), $content);
                            }
                        } else {
                            $content = str_replace($matches[0][$i], STATIC_DIR . '/images/logo.png', $content);
                        }
                        break;
                    case 'tplpath':
                        $content = str_replace($matches[0][$i], APP_THEME_DIR, $content);
                        break;
                    case 'language':
                        $content = str_replace($matches[0][$i], get_lg(), $content);
                        break;
                    case 'statistical':
                        if (isset($data->statistical)) {
                            $content = str_replace($matches[0][$i], decode_string($data->statistical), $content);
                        } else {
                            $content = str_replace($matches[0][$i], '', $content);
                        }
                    case 'copyright':
                        if (isset($data->copyright)) {
                            $content = str_replace($matches[0][$i], decode_string($data->copyright), $content);
                        } else {
                            $content = str_replace($matches[0][$i], '', $content);
                        }
                    default:
                        if (isset($data->{$matches[1][$i]})) {
                            $content = str_replace($matches[0][$i], $this->adjustLabelData($params, $data->{$matches[1][$i]}), $content);
                        } else {
                            $content = str_replace($matches[0][$i], '', $content);
                        }
                }
            }
        }
        return $content;
    }

内容传入此函数后进行了decode_string()方法

位于PbootCMS/core/function/handle.php

function decode_string($string)
{
    if (! $string)
        return $string;
    if (is_array($string)) { // 数组处理
        foreach ($string as $key => $value) {
            $string[$key] = decode_string($value);
        }
    } elseif (is_object($string)) { // 对象处理
        foreach ($string as $key => $value) {
            $string->$key = decode_string($value);
        }
    } else { // 字符串处理
        $string = stripcslashes($string);
        $string = htmlspecialchars_decode($string, ENT_QUOTES);
    }
    return $string;
}

此方法是html实体编码转义普通字符,而不是将普通字符转义成html实体编码,应当使用escape_string()处理数据,该方法同样位于PbootCMS/core/function/handle.php。

function escape_string($string)
{
    if (! $string)
        return $string;
    if (is_array($string)) { // 数组处理
        foreach ($string as $key => $value) {
            $string[$key] = escape_string($value);
        }
    } elseif (is_object($string)) { // 对象处理
        foreach ($string as $key => $value) {
            $string->$key = escape_string($value);
        }
    } else { // 字符串处理
        $string = htmlspecialchars(trim($string), ENT_QUOTES, 'UTF-8');
        $string = addslashes($string);
    }
    return $string;
}

三、利用代码

登陆后台在后台的-基础内容-站点信息-统计代码和尾部信息等处插入xss payload
payload:<img src=x onerror=alert(1)>

Digitalocean羊毛党的胜利

本文作者:Alex(MS08067核心成员) 前言        这次给大家介绍一下Digitalocean这个机房,他家的VPS测评可以百度搜搜看,我这里说一下重点。 移动和电信线路不错(尤其是移动),联通就很差了250-300ms的延迟,不过好在不丢包。 不能做大规模的扫描和发包,

进入主页触发xss

四、参考信息

五、补丁

case 'statistical':
                        if (isset($data->statistical)) {
                            $content = str_replace($matches[0][$i], decode_string($data->statistical), $content);
                        } else {
                            $content = str_replace($matches[0][$i], '', $content);
                        }
                    case 'copyright':
                        if (isset($data->copyright)) {
                            $content = str_replace($matches[0][$i], decode_string($data->copyright), $content);
                        } else {
                            $content = str_replace($matches[0][$i], '', $content);
                        }

将其中的decode_string修改为escape_string即可修复!



Ms08067安全实验室

专注红蓝队攻防。团队已出版《Web安全攻防:渗透测试实战指南》,预计2019年6月出版《内网安全攻防:渗透测试实战指南》,12月出版《CTF竞赛秘笈-入门篇》,目前在编Python渗透测试,JAVA代码审计和APT方面的书籍。

团队公众号定期分享关于CTF靶场、内网渗透、APT方面技术干货,从零开始、以实战落地为主,致力于做一个实用的干货分享型公众号。

官方网站:www.ms08067.com

本文源自微信公众号:Ms08067安全实验室

【福利包】安全工具教程资源汇总

团队核心a-running-snail喜欢研究各类渗透原理,为此整理了归纳了很多实用的知识链接,方向为web安全、内网渗透、应急响应等,准备陆续分享给大家,今天分享一些安全工具教程资源。  Metasploit工具教程 MSF渗透框架下载:https://www.metasploit.com/ winx64

人已赞赏
安全工具

FOCA信息收集神器

2019-10-14 20:16:55

安全工具

【奇思淫技】TP5最新getshell漏洞

2019-10-14 20:17:02

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索