hacker 相关,关于掌握上传权限后是否能拿到 shell 的讨论

2020-01-17 22:55:21 +08:00
 black11black

并不是要做坏事

挺有意思的,题目是这么来的

今天有个朋友分享了一个 go 写的个人网盘项目,打包以后只有一个 go 单文件,甚至不需要 web 引擎就可以跑起来网盘。

然后我发现这东西默认可以自由设置挂载目录,也就是说可以挂到 /上,所有文件就全部暴露了。然后我们两个菜鸡想到一个问题就是,一般干坏事的拿到上传权限后,都是替换一个 php 文件之类的,跑一个脚本拿到 shell

但是现在这个情况是这个网盘是一个 go 单文件,已经跑起来了,别说脚本了,要修改 html 都不知道咋改。。 其他方法比如秘钥连接 ssh 啥的大概也不行;比如上传脚本到开机目录,人家不开机咋整。。

难道这就是传说中暴露了全部硬盘但还依然坚挺的系统?

1409 次点击
所在节点    问与答
13 条回复
black11black
2020-01-17 22:55:41 +08:00
忘写了,项目地址
https://github.com/Sloaix/Gofi

不是广告
virusdefender
2020-01-17 22:57:33 +08:00
那就等开机,或者设置 crontab 之类的
loading
2020-01-17 23:05:19 +08:00
上传里面如果有漏洞,就可以上传一个文件到系统的任意目录,是可以的。
black11black
2020-01-17 23:06:01 +08:00
@virusdefender
你怎么执行 crontab 呢
webshe11
2020-01-17 23:22:56 +08:00
试试上传一个 ~/.ssh/authorized_keys,或者上传到 /etc/cron.d/
xfspace
2020-01-17 23:25:46 +08:00
提 linux 没 windows 快

反弹 shell 方法多
常用
dynamic module
crontab
also24
2020-01-17 23:33:10 +08:00
如果是 Linux 的话,建议复习一下 Linux 的权限机制。


这里涉及到你这个 go 程序是用什么用户跑起来的。

假设是用 www 用户跑起来的,那么你现在相当于在利用这个 www 用户进行读写。
而你上传上去的程序,正常情况下也只能以 www 用户的身份被调用。

你可以改变思路来想这件事儿:
你现在相当于登录了这台主机的 www 用户,你能做哪些操作?

如果这个 go 程序是用 root 用户跑起来的,那么你可以粗略的理解为你现在有了 root 用户的权限,那就可以为所欲为了。

这也就是为什么 nginx / php-fpm 之类的一般跑在 nobody / www 用户下的原因,只要我对这个用户的权限把控的足够好,你即使拿到了这个用户,也翻不起什么波浪。
black11black
2020-01-18 09:54:31 +08:00
@also24
现在讨论的是途径的问题,你拿到了 root 级别的读写权限,实际拿 shell 的途径是什么呢
black11black
2020-01-18 10:05:09 +08:00
@webshe11
非 root 运行,没法上传到~/.ssh ,cron.d 可以上传,但需要重新运行 crontab 扫描目录才行呀
webshe11
2020-01-18 15:39:12 +08:00
@black11black 这个 /etc/cron.d/ 是不是和发行版有关系? ubuntu 18.04 写进去就可以了
```
* * * * * root date >> /tmp/cron.date.txt
```
black11black
2020-01-18 19:35:08 +08:00
@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/
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
#
webshe11
2020-01-18 21:29:30 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/638870

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX