springboot框架的文件上传导致的RCE

springboot框架的文件上传导致的RCE

前言

我们都知道springboot默认是不会解析jsp的,需要引入相对应的依赖才行。但这种以jar包启动的项目存在的任意文件上传就真的没有什么危害了吗?还是说只能上传个html文件进行存储型的XSS攻击而已?显然不是,假如我们上传的文件,路径是可控的,也就是说可以通过../../../来控制文件在服务器上存放的位置,那么这时候我们可能有以下的利用姿势,从而提升漏洞危害性。

方法一(定时任务)

定时任务的路径有

1
2
3
4
5
6
/var/spool/cron/root   #文件要以用户名称存在
/etc/cron.d #这里的文件(任意名称和后缀),也会被轮询加载执行
/etc/cron.daily/ #下面的任务都是每天6:25 执行
/etc/cron.weekly/ #下面的任务都是每周日 6:47 执行
/etc/cron.monthly/ #下面的任务都是每月1号 6:52 执行

1
2
0    12   *   *   *   mail dmtsai -s "at 12:00" < /home/dmtsai/.bashrc
#分 时 日 月 周 |《==============命令行=======================》|

条件:

  • 上传路径可以控制
  • 后缀名称不限

系统任务目录需要指定执行的用户名才可以

1
2
3
[root@minion2 cron.d]# cat ntptime 
*/2 * * * * /sbin/ntpdate ntp.aliyun.com
*/1 * * * * root /bin/echo "hello" >/root/1.txt

因为在/etc/cron.d这个目录下,任意后缀的文件都可以执行,我们创建一个每分钟执行一次的定时任务;并且把结果输出到/tmp下的haha文件中(注意这里要添加一个用户名)

1
*/1 * * * * root ls >/tmp/haha 2>&1

image

cron 守护进程在后台静默地检查 /etc/crontab 文件和/var/spool/cron 及 /etc/cron.d*/ 目录。

方法二(替换私钥)

条件:

  • 路径可控
  • 可以上传私钥
1
../../../../../../../root/.ssh/authorized_keys

方法三(终端自启动)

条件:

  • 路径可以控制
  • .sh后缀未被禁止

打开profile文件分析得知,用户打开bash窗口就会执行/etc/profile.d目录下所有.sh文件

cat /etc/profile

image

在目录下写一个rce.sh的文件

image

内容如下:

执行一下ls命令并且把内容输出到tmp目录下的rcels文件中

1
echo `ls` >> /tmp/rcels

打开一个新的窗口或终端;查看效果,成功执行了命令

image