起因

又是一个周末,太闲了,
于是我便突发奇想,想去试试自己破解一下雷池。这是一篇回忆,浏览器已经关掉了,所以大部分内容只好口述一下。

声明:如有侵权,请联系我删除。

1 动数据库

了解各容器的用途

在服务器上输入docker ps,发现存在大量容器,于是我便在官网中翻了翻,果真找到一张对应容器用途的表格。

image

关于表格的来源地址:https://waf-ce.chaitin.cn/docs/about/framework

image

寻找用户和密码

于是,我决定对postgres下手。那么,它的用户名和密码在哪里?

我没有使用过postgres,于是上网搜了搜,说是用户名是postgres,但是经测试无效(雷池可能把这个用户删除了)。为什么这么说?因为我在尝试查询密码(docker exec -it safeline-pg psql -U postgres)的时候返回了报错。

于是,我在网上搜呀搜,发现了雷池的compose.yaml所在位置:/data/safeline/compose.yaml,cat一下,可以看到用户名是safeline-ce,密码存储在一个环境变量中。

image

这个变量是在容器内的,也许是我眼睛不好,并没有在compose.yaml中找到密码。于是,我决定通过一些“歪门邪道”的方法....

直接进入这个postgresql的容器,来获取这个变量:

docker exec -it safeline-pg sh
echo ${POSTGRES_PASSWORD}

image

当然也是十分顺利地获取到了密码。接下来,便可以使用Navicat Premium连接到5432端口的数据库了。

一些小插曲

在使用ssh隧道时,我发现转发到服务器localhost:5432并不能建立连接,经过一些搜索,发现得通过容器内网ip连接。不出意外,ip都是172.22.222.2。

ssh隧道like this:

image

我使用的是navicat premium 16,由于postgresql版本比较高,需要对一个dll文件做一个改动,否则无法连接上数据库。

下面将那篇文章地址贴上:https://blog.csdn.net/zxp3817100/article/details/134822475

我知道csdn很难用,但他确实有点用

连接成功,能做什么?

数据库中可以看到一个safeline-ce的库,里面就是雷池的所有数据。

image

我没有在里面看到什么有价值的内容,但是mgt_options表里面似乎可以看到一些关于webhook、syslog的配置,我没有测试过可不可以用,反正面板里都是需要专业版的。

mgt_website表中可以看到添加的所有网站,在这里我发现了一个好玩的东西:这里的upstreams引起了我的注意。这里的上游服务器是保存了一个array的,于是我给他加了两个上游,并刷新网站页面,发现成功。

reqdpv

虽然第二个上游是disabled状态,但是确实有我添加的第二个上游(81端口),并且多出一个负载调度算法。

不过这个功能对我来说用处不大,于是我决定更进一步,f12看到license->valid返回false,于是我试着能否逆向雷池主程序...

2 逆向程序

附上f12接口返回数据的图:

image

经过寻找,确定面板api大概率存在于safeline-mgt容器中的/app/mgt文件,于是我将它复制到static文件夹中,通过面板直接将他下载下来。

cp /app/mgt /app/static/mgt

下载地址即为:https://ip:port/mgt

下载下来的文件只有8M,在hexed.it打开后,发现了UPX字样,于是我猜测程序被upx压缩了,因此看不出任何有用的信息。

image

不过这也是可逆的,下面贴上命令(在Debian 12环境下操作的):

apt install upx-ucl
upx -d mgt

果真,脱壳后大小来到了将近24M。

结局

可惜,我没有程序逆向的经验,将他导入到IDA中面对着那么多的function和汇编代码,我不知所措。

a13a45f3ceaa13af49aa06db55fec996

a32531bf23682b2139bae16e25c72b18

因此,折腾到这里,实在不知道该怎么办了,遂放弃。不过,我也得到了许多经验,还是值得的。