本文最后更新于 2018年11月08日 20:29 可能会因为没有更新而失效。如已失效或需要修正,请留言!

【前言】

什么是宝塔面板?

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

【漏洞代码分析】

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

我们直接看漏洞代码。
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全
直接分析post请求部分。
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全
代码如下:
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全

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

关键的代码如下:
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全

此处记录了一下post 的请求。然后将code传入到了写日志的一个函数里面。追踪一下这个函数。 在public.py 里面,找到如下函数
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全

这里就是一个写日志的功能。定义了一个teyp 然后是args 。这里把code 传递过来。就直接写入了日志。没有做任何过滤处理。然后就导致了xss漏洞产生。
可以在宝塔数据库当中,看到logs数据库里存储的信息
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全

【漏洞复现】

我们直接在面板登录处,随便输入一个账号密码,触发失败,要求输入验证码。
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全

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

 

宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全

登录后台后,打开安全模块,成功触发弹窗。
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全

由于服务器管理面板的特殊性,后台可以进行敏感操作。手写js远程调用,利用csrf漏洞在计划任务处配合存储xss,可成功反弹shell,弹shell成功截图如下:
宝塔面板6.x版本前台存储xss+后台csrf组合拳getshell-ChaBug安全

远程调用的js代码如下:

 

【后序】

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

喜欢这篇文章的话就点一点喜欢吧!