目录

任意文件读拿下宝塔

前言

两个月前 v2 冲浪的时候看到一个叫做 siteproxy 的项目,可以实现网站的反向代理,看着项目不大就顺手点开了源码,一眼抓到一个目录穿越,然后又抱着试一试的想法看能不能水一个 cve,之后就没再管它了。

直到今天,早上打开电脑发现有一封来自 cve 的邮件,没想到过了这么久居然还给过了,于是又开始把玩了起来。由于作者似乎早已弃坑,导致现在部署的实例基本都可以利用,于是就到 fofa 碰碰运气,然后找到一个带宝塔的站,就有了尝试一下只通过任意文件读拿下宝塔的想法。

获取登录入口

通过 8888 端口进入宝塔之后可以看到一个熟悉的页面:

https://pics.kdxcxs.com:4433/images/2023/04/08/20230408000028.png

那么第一步就是获取登陆的入口,根据提示,我们抓取到 /etc/init.d/bt 的内容,紧接着我们就可以从 /www/server/panel/data/admin_path.pl 拿到安全入口的路径了:

https://pics.kdxcxs.com:4433/images/2023/04/08/20230408001523.png

获取密码

通过同样的方法,我们可以在 /www/server/panel/default.pl 下面找到登录密码:

https://pics.kdxcxs.com:4433/images/2023/04/08/20230408002006.png

获取用户名

对于用户名就要稍微复杂一些了,我们可以在脚本中看到它是通过另一个 py 脚本来获取的,在把那个 py 也抓下来之后可以发现它其实是从数据库读取的用户名:

https://pics.kdxcxs.com:4433/images/2023/04/08/20230408002436.png

所以我接下来的思路就是通过任意文件读把数据库拿下来然后读取用户名。

最开始以为宝塔是从 MySQL 里面读的,先是去找了 /etc/my.cnf 发现读取不到,然后又费尽心思去找 MySQL 的安装路径,但是最终还是没找到。在一番搜索之后才发现,其实这里并不是从 MySQL 读取的数据,而是使用的 /www/server/panel/data/default.db 这个数据库。

同样是通过任意文件读取把数据库直接扒下来,然后本地读取就可以看到用户名啦:

https://pics.kdxcxs.com:4433/images/2023/04/08/20230408003236.png

拿下

至此,登录入口、用户名、密码全部收入囊中,成功进入宝塔面板:

https://pics.kdxcxs.com:4433/images/2023/04/08/20230408003411.png

后记

这次打的其实也不是原版的宝塔,是修改后的“7.6.0 纯净版”,其他版本也不一定有效,本篇文章也仅为师傅们提供一个思路,主要是之前好像没有看见过这种手法,似乎这样一来拿下宝塔变得更加轻松了,就记录了下来。还请各位师傅批评指正加以指导。