某软件公司代码审计的案例
前言
自从拿下某公司 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
直接成功登录!拿下服务器!
评论
发表评论