某软件公司代码审计的案例

前言

自从拿下某公司 SVN 服务器,数据库服务器好久了,【数据库】【部署应用】是分开部署的。奈何,数据库服务器并不能帮助提权。

不过相信有了代码,加上修改数据库的数据辅助,很大几率能拿下应用服务器。

分析项目环境

项目部署在【阿里云】,阿里云服务器具有阿里云盾,被它坑的不轻。

系统环境 Linux
使用语言 Java
应用环境 Spring-boot + Maven +Mysql+Redis

项目所有上传文件都是放在阿里云,七牛和腾讯云的OSS上。

项目分为前台用户和后台用户之分,由于某些原因,后台用户服务我并不能跑起来。

分析代码包层次结构

可以看到Controller是提供给外部的接口,我似乎就真的以为ueditor.controller可以直接利用

所以,这里Ueditor并不能直接被利用。


直到我找到了这个函数


为了确认这个函数变量100%确实可以自由构造,我又整理了Controll开始函数执行的顺序。

 

 

到这里,因为id是Integer对象类型,即使是null也会被加入处理成nullFileName.rar这样的形式。null还是会被加入。


 我写了一个这样的程序。

3328 文件夹不存在于tmp路径

3329文件夹存在于tmp路径

执行后,404行报错。filePath2执行成功,绕过路径。

所以:linux jdk 中会检查文件夹是否真实存在。

所以,问题来了,我需要把那条数据id设置上,并且设置的id还要作为文件夹真实存在于系统中,只有这样,我才能绕过字符串中被加入 id 的这个路径


我翻找了linux系统文件夹构成

系统中当前运行的每一个进程都有对应的一个目录在/proc下,以进程的 PID号为目录名,它们是读取进程信息的接口。

/proc/1是绝对存在的。所以我在数据库里把id改为1,构造文件名称


这样程序处理的时候就会变成

../../../../proc/1/../../../../../root/.ssh/authorized_keys1

因为proc/1文件是真实存在于系统中,能被绕过。


从阿里云OSS下载我的公钥文件后,输出路径就变成了下面的路径。

/root/.ssh/authorized_keys 


然后,数据还原,


ssh -i id_rsa root@xxx.xxx.xxx.xxx 


直接成功登录!拿下服务器!


评论