如果想在 V2EX 获得更好的推广效果,欢迎了解 PRO 会员机制:
https://www.v2ex.com/pro/about

如果你经常使用铜币置顶主题,持有 V2EX Solana Token 会在每日签到时获得额外铜币:
https://www.v2ex.com/solana
rockuw
V2EX  ›  推广

如果给你一个 shell,你可以干什么?

  •  
  •   rockuw · Aug 8, 2017 · 6565 views
    This topic created in 3202 days ago, the information mentioned may be changed or developed.

    使用函数计算API 网关做了一个web shell: 随时随地打开一个 shell,用完即走。

    screenshot

    欢迎大家来玩,项目地址:

    architecture

    这个项目中我们用到了以下组件:

    1. 使用 nodejs 开发,通过 reactify 生成浏览器代码
    2. 根据用户输入的命令,把请求发送到 API 网关
    3. API 网关把请求发送到后端的函数计算,在函数中执行 shell 命令

    函数的代码也非常简单:

    'use strict';
    
    var exec = require('child_process');
    
    exports.handler = function(event, context, callback) {
      console.log('event: %s', event.toString());
    
      var evt = JSON.parse(event.toString());
      var cmd = evt['queryParameters']['cmd'];
      exec.exec(cmd, {}, function(err, stdout, stderr) {
        console.log(stdout, stderr);
    
        var body = '';
        if (err) {
          body = new Buffer(stderr).toString('base64');
        } else {
          body = new Buffer(stdout).toString('base64');
        }
    
        var resp = {
          statusCode: 200,
          isBase64Encoded: true,
          body: body,
        };
        callback(null, resp);
      });
    };
    

    欢迎大家来体验 serverless 构架的函数计算服务;
    也欢迎有兴趣的同学加入一起开发函数计算:

    33 replies    2017-08-09 16:57:48 +08:00
    lulinux
        1
    lulinux  
       Aug 8, 2017 via Android
    这是什么字体这么漂亮?
    ynyounuo
        2
    ynyounuo  
       Aug 8, 2017
    @lulinux Inconsolata,如果你喜欢这种细瘦字体也不妨看看 V 友的 Iosevka
    minamike
        3
    minamike  
       Aug 8, 2017
    输入 rm -rf /*会怎样
    w88975
        4
    w88975  
       Aug 8, 2017
    不支持 tap ctrl vi nano 等快捷键 编辑器也没法用 很鸡肋
    这种需求 直接用 Wetty 搭建一个就足够了
    rockuw
        5
    rockuw  
    OP
       Aug 8, 2017
    @minamike 试一下 :)
    imnpc
        6
    imnpc  
       Aug 8, 2017
    无 root 权限的...
    但是还是感觉有风险
    hzwjz
        7
    hzwjz  
       Aug 8, 2017
    我可以这么干

    `rm -rf --no-preserve-root /`


    ```
    packages/mercurial/hgweb/hgweb_mod.pyc': Permission denied
    rm: cannot remove '/usr/lib/python2.7/dist-packages/mercurial/hgweb/__init__.pyc': Permission denied
    rm: cannot remove '/usr/lib/python2.7/dist-packages/mercurial/hgweb/wsgicgi.py': Permission denied
    rm: cannot remove '/usr/lib/python2.7/dist-packages/mercurial/context.pyc': Permission denied
    rm: cannot remove '/usr/lib/python2.7/dist-packages/mercurial/strutil.py': Permission denied
    rm: cannot remove '/usr/lib/python2.7/dist-packages/mercurial/unionrepo.py': Permission denied
    rm: cannot remove '/usr/lib/python2.7/dist-packages/mercurial/httppeer.pyc': Permission denied
    rm: cannot remove '/usr/lib/python2.7/dist-packages/mercurial/ancestor.pyc': Permission denied
    rm: cannot remove '/usr/lib/python2.7/dist-packages/mercurial/dagparser.pyc': Permission denied
    ```
    hzwjz
        8
    hzwjz  
       Aug 8, 2017
    @minamike #3
    @rockuw #5
    亲自实验了一把
    timothyye
        9
    timothyye  
       Aug 8, 2017
    @hzwjz sudo
    hzwjz
        10
    hzwjz  
       Aug 8, 2017
    @timothyye #9 /bin/sh: 1: sudo: not found
    hellove1985
        11
    hellove1985  
       Aug 8, 2017
    反馈 bug

    cat /tmp/test.txt

    TypeError: e.data.split is not a function
    hellove1985
        12
    hellove1985  
       Aug 8, 2017
    echo 123 > /tmp/test.txt
    cat /tmp/test.txt

    TypeError: e.data.split is not a function
    rockuw
        13
    rockuw  
    OP
       Aug 8, 2017
    @hellove1985 已修复
    ihainan
        14
    ihainan  
       Aug 8, 2017
    快捷键用不了,不开心……
    binux
        15
    binux  
       Aug 8, 2017
    `:(){ :|: & };:` 都运行不了好意思叫 shell ?
    hjc4869
        16
    hjc4869  
       Aug 8, 2017
    当然是上 Fork bomb 了
    helica
        17
    helica  
       Aug 8, 2017 via iPhone
    @binux 我虚拟机怎么卡死了…
    rockuw
        18
    rockuw  
    OP
       Aug 8, 2017
    @hjc4869 防弹的
    hjc4869
        19
    hjc4869  
       Aug 8, 2017
    @rockuw 没屏蔽掉网络访问,可以拿来做很多不好的事情,比如写个 while 循环拿来 DDoS
    rockuw
        20
    rockuw  
    OP
       Aug 8, 2017
    @hjc4869 函数计算有一些限制项,能够有效地防止被拿来做 DDoS: https://help.aliyun.com/document_detail/51907.html

    默认情况下一个用户并发执行数是 100,即他最多有 100 个实例在跑。
    lslqtz
        21
    lslqtz  
       Aug 8, 2017
    非常有趣,收藏了。
    nutting
        22
    nutting  
       Aug 8, 2017 via Android
    我上次在这里分享了一个匿名聊天,一群尝试发送 js 代码的,各种破解的,看看楼主这个能撑多久?搞挂了免责不?
    araraloren
        23
    araraloren  
       Aug 9, 2017
    我应该怎么回答?
    删库跑路。。还是撬动整个地球。。。
    mosliu
        24
    mosliu  
       Aug 9, 2017
    rm -rf /
    qiuyk
        25
    qiuyk  
       Aug 9, 2017
    第一个反应肯定是 rm -rf /的吧哈哈哈哈
    bintianbaihua
        26
    bintianbaihua  
       Aug 9, 2017
    rm -rf
    NoAnyLove
        27
    NoAnyLove  
       Aug 9, 2017
    喜欢 Fantasque Sans Mono 字体的用户路过
    rockuw
        28
    rockuw  
    OP
       Aug 9, 2017
    @nutting 搞挂了给我发邮件,有阿里云代金券相送 :)
    rockuw
        29
    rockuw  
    OP
       Aug 9, 2017
    @araraloren 参考答案是:撬动整个地球
    O3YwA1ENkb7i35XJ
        30
    O3YwA1ENkb7i35XJ  
       Aug 9, 2017
    rockuw
        31
    rockuw  
    OP
       Aug 9, 2017
    @xqin 我早上回复了一些 comments 啊
    O3YwA1ENkb7i35XJ
        32
    O3YwA1ENkb7i35XJ  
       Aug 9, 2017
    @rockuw 刚看到了, 之前没收到 github 的提醒, 我又改了一些内容, 一并看看.
    你提的那些疑问, 我也已经回复了.
    rockuw
        33
    rockuw  
    OP
       Aug 9, 2017
    @xqin updated. Thanks.
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1158 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 65ms · UTC 18:12 · PVG 02:12 · LAX 11:12 · JFK 14:12
    ♥ Do have faith in what you're doing.