springboot框架的文件上传导致的RCE
前言
我们都知道springboot默认是不会解析jsp的,需要引入相对应的依赖才行。但这种以jar包启动的项目存在的任意文件上传就真的没有什么危害了吗?还是说只能上传个html文件进行存储型的XSS攻击而已?显然不是,假如我们上传的文件,路径是可控的,也就是说可以通过../../../来控制文件在服务器上存放的位置,那么这时候我们可能有以下的利用姿势,从而提升漏洞危害性。
方法一(定时任务)
定时任务的路径有
1 | /var/spool/cron/root #文件要以用户名称存在 |
1 | 0 12 * * * mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc |
条件:
- 上传路径可以控制
- 后缀名称不限
系统任务目录需要指定执行的用户名才可以
1 | [root cron.d]# cat ntptime |
因为在/etc/cron.d这个目录下,任意后缀的文件都可以执行,我们创建一个每分钟执行一次的定时任务;并且把结果输出到/tmp下的haha文件中(注意这里要添加一个用户名)
1 | */1 * * * * root ls >/tmp/haha 2>&1 |
cron 守护进程在后台静默地检查 /etc/crontab 文件和/var/spool/cron 及 /etc/cron.d*/ 目录。
方法二(替换私钥)
条件:
- 路径可控
- 可以上传私钥
1 | ../../../../../../../root/.ssh/authorized_keys |
方法三(终端自启动)
条件:
- 路径可以控制
- .sh后缀未被禁止
打开profile文件分析得知,用户打开bash窗口就会执行/etc/profile.d目录下所有.sh文件
cat /etc/profile
在目录下写一个rce.sh的文件
内容如下:
执行一下ls命令并且把内容输出到tmp目录下的rcels文件中
1 | echo `ls` >> /tmp/rcels |
打开一个新的窗口或终端;查看效果,成功执行了命令