解决服务器取证过程中宝塔强制绑定手机号的问题

发布时间 2023-09-30 17:34:34作者: WXjzc

声明

本文中提及的方式仅是为了便于服务器取证的研究,仅适用于无法出网的真实取证鉴定情况。

请不要在生产环境随意修改宝塔服务的任何文件!

分析

目前,宝塔面板已经强制要求绑定手机号。这给取证工作带来很大的不便,尤其是在实际工作中,服务器是不可以连接互联网的,因此必须解决掉这个问题。好在我们知道,宝塔面板是使用python开发的,我们可以轻松地修改代码。

先从路由入手,路由是bind

vscode连上服务器,选/www/server/panel作为工作目录,搜索/bind

/BTPanel/__init__.py中找到路由定义,从这个写法能看出宝塔面板的服务端用的的Django框架

直接看一眼顶针的is_bind函数,位于public下,这是自己写的包,也就是/class/public.py

找一下函数,明显发现是获取了get_user_info的返回值

看一眼get_user_info,具体逻辑就是从宝塔面板服务端的目录下的/data/userInfo.json读取数据,如果文件不存在就返回一个空字典,存在就拿值。所以我们只需要给值就可以了

先随意给值,添加到文件/www/server/panel/data/userInfo.json,重启宝塔

{
  "uid":1,
  "address":"",
  "access_key":"",
  "username":"WXjzc",
  "serverid":""
}

现在就不会强制要求绑定手机号了,但是获取软件列表会失败,问题出在get_cloud_list这个函数

定位代码,尝试直接注掉看看

抛了个KeyError,看了一下是后面字典里给list赋值了

加一句softList.update({'list':[]})

重启后报下一个错,这是专业版判断的字段,为0时是永久专业版,这个值同样是在get_cloud_list里给的,应该是请求网络时拿到的,不过我们没有登录,直接赋一个上去

重启之后就再也没有弹窗了,缺点是没法拿到软件列表

总结

总结一下修改的点

添加文件/www/server/panel/userInfo.json,并写入以下内容

{
  "uid":1,
  "address":"",
  "access_key":"",
  "username":"",
  "serverid":""
}

修改文件/www/server/panel/class/panelPlugin.py,将如下代码注释或删除

if not 'list' in softList:
    if 'msg' in softList:
        raise public.PanelError(softList['msg'])
    else:
        raise public.PanelError('获取插件列表失败!')

在上述代码的下方添加如下代码

softList.update({'list':[]})
softList.update({'pro':0})

随后重启宝塔面板服务