记一次宝塔文件分析

前言

因为前些天重新学习了redis未授权,并且在实战中成功复现,但是之后又遇到了新的问题:宝塔面板不清楚密码,没办法继续测试了。百度查询了一下:宝塔查看默认密码,在以前的版本中,可以直接回显明文密码,现在宝塔更新,只能回显用户名,密码加密了。没办法只能重新设置新的

可是,经过多次修改,登录的过程中却一直提示:密码错误

图片[1]-记一次宝塔文件分析-渗透云记 - 专注于网络安全与技术分享

明明已经修改了密码,可为什么就是进不去呢

宝塔登录密码加密方式

此处分析的实验环境为宝塔版本:免费版 7.9.9

首先进入目录:/www/server/panel

可以看见一下文件目录

  • /data/dafault.pl 获取宝塔默认登录密码
  • /data/port.pl 开放端口
  • /data/admin_path.pl 后台地址
  • /data/default.db 宝塔面板的数据库,基本上面板信息都直接保存在这里面

我们这里主要分析的是tools.py文件

图片[2]-记一次宝塔文件分析-渗透云记 - 专注于网络安全与技术分享
result = sql.table('users').where('id=?',(1,)).setField('password',public.password_salt(public.md5(password),uid=1))

可以看见 tools.py调用set_panel_pwd()函数设置密码

在密码加密中,分别使用public.md5()public.password_salt()两个函数进行加密,接着我们继续跟踪这俩函数即可

寻找public文件:/www/server/panel/class/public.py

首先查看public.md5()函数:

图片[3]-记一次宝塔文件分析-渗透云记 - 专注于网络安全与技术分享

就是对输入内容进行md5加密

接着查看函数:public.password_salt()

图片[4]-记一次宝塔文件分析-渗透云记 - 专注于网络安全与技术分享

该函数就是先对明文密码加盐"_bt.cn",进行第一次md5运算,然后再添加随件salt,这个salt通过M函数从数据库得到,然后在进行一次MD5运算

图片[5]-记一次宝塔文件分析-渗透云记 - 专注于网络安全与技术分享

该函数就还是获取数据库里面的值

综上所述:

宝塔对密码的加密规则就是:

md5(md5(md5(password)+'_bt.cn')+ salt)

简单复现脚本

from hashlib import md5

password = "明文密码"
salt = "数据库salt"

# 第一次MD5加密
md5_password = md5(password.encode()).hexdigest()
# 第二次MD5加密
md5_password = md5((md5_password + "_bt.cn").encode()).hexdigest()
# 第三次MD5加密
md5_password = md5((md5_password + salt).encode()).hexdigest()
print(md5_password)

演示:

图片[6]-记一次宝塔文件分析-渗透云记 - 专注于网络安全与技术分享

通过数据库可以查看到对应用户的salt

然后运行脚本即可

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容