[TDSQL] 忘记赤兔密码怎么办? (知道控制台IP就能直接修改赤兔密码?) 破解赤兔登录

2024年 4月 12日 153.7k 0

导读

经常使用控制台, 还是不会忘记密码的, 但有时候偏偏就忘了(设置密码的时候太复杂了…), 或者被人修改了密码, 或者就是长期未使用, 忘记了密码. 这时候咋办呢?

分析过程

我们知道可以通过如下api获取 后台数据库/监控库的 账号密码信息. 这一步是不需要任何权限的, (除了网络)

curl http://YOUR_IP_ADDR/tdsqlpcloud/index.php/api/install/get_db_info

然后我们就可以登录数据库了

找到相关账号信息表 tdsqlpcloud.t_sys_user 然后查看该表信息

对比发现, 老版本使用的 user_pwd (varchar)保存的密码. 新版本使用的 user_pwd_2 (blob) 保存的密码.

也就是存在两种加密方式.

不急, 我们一个个来.

先看老版本的加密方式:

我们知道赤兔是php写的, 那么我们就可以直接找到相关的加密文件, 查看其加密方法, 赤兔默认是安装在 /data/website/tdsqlpcloud 路径下的. 基本上grep -r 就能找到了. 我这里就不演示查找过程了. 假设已经找到了 叫: www/helpers/MY_common_helper.php. 我们查看该文件, 找下验证方式

确实存在两种验证方式.

老版密码验证

第二种看起来简单点(md5). 对比下老版本的这个文件, 发现就是老版本的加密方式. 然后找到该函数查看其加密方式如下:

加密很简单, 是 密码和常量做md5, 然后做base64 然后再和常量做md5. 这种方式使用mysql就能实现.

方法1

所以我们直接给admin账号加个老密码吧, 使用如下sql即可.

set @newpassword="123456";
update tdsqlpcloud.t_sys_user set user_pwd=md5(concat(to_base64(md5(concat("xxx",@newpassword))),"xxxxxx")) where user_id=1;
select * from tdsqlpcloud.t_sys_userG

然后查看数据, 发现修改成功,

但是控制台还是使用的新的验证方式, 所以我们还要修改下 (直接注释下即可)

然后验证下

发现登录成功.

方法2:

但还是太麻烦了. 还得修改php配置文件… 我们发现代码里会先判断是否存在新密码. 那么我们就可以直接把新密码置为空.

这样就只判断旧密码了.

set @newpassword="123456";
update tdsqlpcloud.t_sys_user set user_pwd=md5(concat(to_base64(md5(concat("xxx",@newpassword))),"xxx")), user_pwd_2=null where user_id=1;
select * from tdsqlpcloud.t_sys_userG

然后我们再登录试下


发现登录成功.

新密码验证

虽然修改老密码已经能实现登录. 但还有个新密码摆在那的. 我们也来看一看.

和常量 做sha256, 再做AES-256-CBC 然后又和常量做hash

跟老密码差不多的方式, 只是md5换为了sha256, base64换为了AES-256-CBC 用sql来实现的话, 会比较复杂, 可以用python或者shell来实现. 算逑, 太麻烦了, 有兴趣的自己去整吧…

shell使用openssl可以参考我之前的那个 mysql_config_editor 脚本 脚本

总结

就此, 我们可以在不知道控制台密码的时候, 修改控制台密码 然后登录了. 其实还顺便突破了密码复杂度要求. 我真棒!

既然知道了赤兔/控制台IP后就能直接修改 登录密码了. 那么登录控制台的这个密码验证还有用么… 赤兔登录还安全么?

其实可以用二进制的工具来实现加密, 至少不会直接暴漏加密方法出来.

涉及到安全, 我就不提供一键脚本了. 相关的key也是马赛克了的.

相关文章

Oracle如何使用授予和撤销权限的语法和示例
Awesome Project: 探索 MatrixOrigin 云原生分布式数据库
下载丨66页PDF,云和恩墨技术通讯(2024年7月刊)
社区版oceanbase安装
Oracle 导出CSV工具-sqluldr2
ETL数据集成丨快速将MySQL数据迁移至Doris数据库

发布评论