V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
black11black
V2EX  ›  问与答

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

  •  
  •   black11black · 2020-01-17 22:55:21 +08:00 · 1394 次点击
    这是一个创建于 1532 天前的主题,其中的信息可能已经有所发展或是发生改变。

    并不是要做坏事

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

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

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

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

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

    13 条回复    2020-01-18 21:29:30 +08:00
    black11black
        1
    black11black  
    OP
       2020-01-17 22:55:41 +08:00
    忘写了,项目地址
    https://github.com/Sloaix/Gofi

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

    反弹 shell 方法多
    常用
    dynamic module
    crontab
    also24
        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 用户下的原因,只要我对这个用户的权限把控的足够好,你即使拿到了这个用户,也翻不起什么波浪。
    black11black
        8
    black11black  
    OP
       2020-01-18 09:54:31 +08:00
    @also24
    现在讨论的是途径的问题,你拿到了 root 级别的读写权限,实际拿 shell 的途径是什么呢
    black11black
        9
    black11black  
    OP
       2020-01-18 10:05:09 +08:00
    @webshe11
    非 root 运行,没法上传到~/.ssh ,cron.d 可以上传,但需要重新运行 crontab 扫描目录才行呀
    webshe11
        10
    webshe11  
       2020-01-18 15:39:12 +08:00
    @black11black 这个 /etc/cron.d/ 是不是和发行版有关系? ubuntu 18.04 写进去就可以了
    ```
    * * * * * root date >> /tmp/cron.date.txt
    ```
    black11black
        11
    black11black  
    OP
       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
        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
    #
    webshe11
        13
    webshe11  
       2020-01-18 21:29:30 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   979 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 22:09 · PVG 06:09 · LAX 15:09 · JFK 18:09
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.