解决服务器取证过程中宝塔强制绑定手机号的问题
声明
本文中提及的方式仅是为了便于服务器取证的研究,仅适用于无法出网的真实取证鉴定情况。
请不要在生产环境随意修改宝塔服务的任何文件!
分析
目前,宝塔面板已经强制要求绑定手机号。这给取证工作带来很大的不便,尤其是在实际工作中,服务器是不可以连接互联网的,因此必须解决掉这个问题。好在我们知道,宝塔面板是使用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/data/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})
随后重启宝塔面板服务

浙公网安备 33010602011771号