并不是要做坏事
挺有意思的,题目是这么来的
今天有个朋友分享了一个 go 写的个人网盘项目,打包以后只有一个 go 单文件,甚至不需要 web 引擎就可以跑起来网盘。
然后我发现这东西默认可以自由设置挂载目录,也就是说可以挂到 /上,所有文件就全部暴露了。然后我们两个菜鸡想到一个问题就是,一般干坏事的拿到上传权限后,都是替换一个 php 文件之类的,跑一个脚本拿到 shell
但是现在这个情况是这个网盘是一个 go 单文件,已经跑起来了,别说脚本了,要修改 html 都不知道咋改。。 其他方法比如秘钥连接 ssh 啥的大概也不行;比如上传脚本到开机目录,人家不开机咋整。。
难道这就是传说中暴露了全部硬盘但还依然坚挺的系统?
1
black11black OP |
2
virusdefender 2020-01-17 22:57:33 +08:00
那就等开机,或者设置 crontab 之类的
|
3
loading 2020-01-17 23:05:19 +08:00 via Android
上传里面如果有漏洞,就可以上传一个文件到系统的任意目录,是可以的。
|
4
black11black OP @virusdefender
你怎么执行 crontab 呢 |
5
webshe11 2020-01-17 23:22:56 +08:00
试试上传一个 ~/.ssh/authorized_keys,或者上传到 /etc/cron.d/
|
6
xfspace 2020-01-17 23:25:46 +08:00 via Android
提 linux 没 windows 快
反弹 shell 方法多 常用 dynamic module crontab |
7
also24 2020-01-17 23:33:10 +08:00
如果是 Linux 的话,建议复习一下 Linux 的权限机制。
这里涉及到你这个 go 程序是用什么用户跑起来的。 假设是用 www 用户跑起来的,那么你现在相当于在利用这个 www 用户进行读写。 而你上传上去的程序,正常情况下也只能以 www 用户的身份被调用。 你可以改变思路来想这件事儿: 你现在相当于登录了这台主机的 www 用户,你能做哪些操作? 如果这个 go 程序是用 root 用户跑起来的,那么你可以粗略的理解为你现在有了 root 用户的权限,那就可以为所欲为了。 这也就是为什么 nginx / php-fpm 之类的一般跑在 nobody / www 用户下的原因,只要我对这个用户的权限把控的足够好,你即使拿到了这个用户,也翻不起什么波浪。 |
8
black11black OP @also24
现在讨论的是途径的问题,你拿到了 root 级别的读写权限,实际拿 shell 的途径是什么呢 |
9
black11black OP @webshe11
非 root 运行,没法上传到~/.ssh ,cron.d 可以上传,但需要重新运行 crontab 扫描目录才行呀 |
10
webshe11 2020-01-18 15:39:12 +08:00
@black11black 这个 /etc/cron.d/ 是不是和发行版有关系? ubuntu 18.04 写进去就可以了
``` * * * * * root date >> /tmp/cron.date.txt ``` |
11
black11black OP @webshe11
不知道我朋友用的什么发行版,没问 我测了一下自己的 ubuntu,输入的命令就是你写的那条,无效啊 root@template:/etc/cron.d# vim test.sh root@template:/etc/cron.d# cd /tmp root@template:/tmp# ls systemd-private-29730a3c4f00405084a1723750b0efeb-systemd-resolved.service-ldTNXK systemd-private-29730a3c4f00405084a1723750b0efeb-systemd-timesyncd.service-d6G5tX root@template:/tmp# ll total 36 drwxrwxrwt 9 root root 4096 Jan 18 11:23 ./ drwxr-xr-x 23 root root 4096 Dec 31 14:28 ../ drwxrwxrwt 2 root root 4096 Dec 31 14:30 .font-unix/ drwxrwxrwt 2 root root 4096 Dec 31 14:30 .ICE-unix/ drwx------ 3 root root 4096 Dec 31 14:30 systemd-private-29730a3c4f00405084a1723750b0efeb-systemd-resolved.service-ldTNXK/ drwx------ 3 root root 4096 Dec 31 14:30 systemd-private-29730a3c4f00405084a1723750b0efeb-systemd-timesyncd.service-d6G5tX/ drwxrwxrwt 2 root root 4096 Dec 31 14:30 .Test-unix/ drwxrwxrwt 2 root root 4096 Dec 31 14:30 .X11-unix/ drwxrwxrwt 2 root root 4096 Dec 31 14:30 .XIM-unix/ |
12
webshe11 2020-01-18 21:23:28 +08:00
@black11black 刚才我试了一下,好像带上 .sh 就无效,去掉 .sh 就行了。改天仔细看看具体是怎么回事
# cat /etc/os-release NAME="Ubuntu" VERSION="18.04.3 LTS (Bionic Beaver)" ID=ubuntu ID_LIKE=debian PRETTY_NAME="Ubuntu 18.04.3 LTS" VERSION_ID="18.04" HOME_URL="https://www.ubuntu.com/" SUPPORT_URL="https://help.ubuntu.com/" BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/" PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy" VERSION_CODENAME=bionic UBUNTU_CODENAME=bionic # id uid=0(root) gid=0(root) groups=0(root) # cd /etc/cron.d # echo '* * * * * root date >> /tmp/cron.date.txt' > testabc # ls -alh testabc -rw-r--r-- 1 root root 42 Jan 18 21:19 testabc # cd /tmp/ # date Sat Jan 18 21:19:53 CST 2020 # ls -alht total 52K drwxrwxrwt 12 root root 4.0K Jan 18 21:20 . -rw-r--r-- 1 root root 29 Jan 18 21:20 cron.date.txt # cat cron.date.txt Sat Jan 18 21:20:01 CST 2020 # |
13
webshe11 2020-01-18 21:29:30 +08:00
|