V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
DosLee
V2EX  ›  程序员

执行了一个 shell 脚本,被吓了一跳

  •  
  •   DosLee · 2024-05-09 09:52:40 +08:00 · 8000 次点击
    这是一个创建于 369 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开了台虚拟机,本来是想着解锁一下某视频网站的非自制剧观看权限。查了一下大部分都是推荐用 Cloudflare Warp 代理来解锁。这只是开头。

    然后我搜索的时候卡看到一个博客写的不错,就按照给出的 Github 地址执行了给出的脚本。执行时使用的是普通用户,不能执行,我就切换到了 root 用户执行脚本。

    执行后等待了一会,提示我 “更新依赖时出错,建议重启 SSH 客户端。如果依旧如此建议卸载重装 SSH 客户端” 我看到后很疑惑,这跟 SSH 客户端有什么关系。

    我尝试打开最开始执行命令中的连接,看一下脚本运行的步骤。结果,不看不知道,一看吓一跳,打开后整个屏幕都是密密麻麻的字符,仔细看了一眼好像是变量赋值,中间部分有一个 eval 命令读取变量后拼接到一起然后组成一个“明文”脚本。

    我看明白后当场就觉得完了,是不是植入挖矿或是其他可执行文件了,要隐藏的这么深。

    我尝试写了一个 Python 脚本,解析后我发现,竟然还用 Base64 编码了。还需要解码,我找了一个在线网页进行解码后,这家伙,还是一个套娃,有好几层(命令我会发到第一层评论)。

    改了改了 Python 脚本全部解析后,看到了脚本的真实面目。然后发现,竟然还有反转。

    脚本在一开始定义了一个 skip 变量,在这个变量指定的地方写的是 "BZh91AY&SYX" 开头的字符,后边全是乱码了。我一看,这不会是把压缩文件放脚本中了吧。我试着使用 tail -n +76 endip.sh | bzip2 -cd > output.sh 仔细查看了脚本,竟然没发现有什么不同。那这“里三层外三层”又是拼接又是下载新脚本的到底是干什么?

    40 条回复    2024-05-11 10:06:58 +08:00
    defunct9
        1
    defunct9  
       2024-05-09 09:55:25 +08:00   ❤️ 5
    Moyyyyyyyyyyye
        2
    Moyyyyyyyyyyye  
       2024-05-09 09:56:00 +08:00
    可能是提供这个服务,但是不想让你修改,类似闭源软件吧
    DosLee
        4
    DosLee  
    OP
       2024-05-09 10:11:18 +08:00
    最一开始的脚本内容(因为太长,删除了一部分)

    ```shell
    z="
    ";IeCz='MTBi';Qz='Cllt';oQCz='RlZH';htz='cFVs';mBCz='STBW';XYz='SlVV';qgBz='a01r';BKBz='bUpY';JYBz='VWRY';ISz='aGtS';vPCz='UFYw';qcBz='a1ZW';iIBz='aERh';enBz='blpX';hDz='dFJr';RiBz='b2FR';Vz='aGlZ';WBBz='dFdN';eJCz='Mk5z';eICz='VlRJ';IWBz='VTJO';RfBz='RVZX';kOCz='R2Ez';Cmz='MjVT';WLCz='WlNX';WOz='VjAx';lQBz='aGti';
    eval "$Az$Bz$Cz$Dz$Ez$Fz$Gz$z$Hz$Iz$Jz$Kz$Lz$Mz$Nz$Oz$Pz$Qz$Rz$Sz$Tz$Uz$Vz$Wz$Xz$Yz$Zz$z$az$bz$cz$dz$ez$fz$gz$hz$iz$jz$kz$lz$mz$nz$oz$pz$qz$rz$sz$z$tz$uz$vz$wz$xz$yz$ABz$BBz$CBz$DBz$EBz$FBz$GBz$HBz$IBz$JBz$KBz$LBz"
    ```
    DosLee
        5
    DosLee  
    OP
       2024-05-09 10:12:31 +08:00
    嵌套 Base64 解码后的脚本

    ```shell
    #!/bin/bash
    #
    # Encrypted by Rangga Fajar Oktariansyah (Anak Gabut Thea)
    #
    # This file has been encrypted with BZip2 Shell Exec <https://github.com/FajarKim/bz2-shell>
    # The filename '2endip.sh' encrypted at Fri Jan 19 07:09:45 UTC 2024
    # I try invoking the compressed executable with the original name
    # (for programs looking at their name). We also try to retain the original
    # file permissions on the compressed file. For safety reasons, bzsh will
    # not create setuid or setgid shell scripts.
    #
    # WARNING: the first line of this file must be either : or #!/bin/bash
    # The : is required for some old versions of csh.
    # On Ultrix, /bin/bash is too buggy, change the first line to: #!/bin/bash5
    #
    # Don't forget to follow me on <https://github.com/FajarKim>
    skip=75

    tab=' '
    nl='
    '
    IFS=" $tab$nl"

    # Make sure important variables exist if not already defined
    # $USER is defined by login(1) which is not always executed (e.g. containers)
    # POSIX: https://pubs.opengroup.org/onlinepubs/009695299/utilities/id.html
    USER=${USER:-$(id -u -n)}
    # $HOME is defined at the time of login, but it could be unset. If it is unset,
    # a tilde by itself (~) will not be expanded to the current user's home directory.
    # POSIX: https://pubs.opengroup.org/onlinepubs/009696899/basedefs/xbd_chap08.html#tag_08_03
    HOME="${HOME:-$(getent passwd $USER 2>/dev/null | cut -d: -f6)}"
    # macOS does not have getent, but this works even if $HOME is unset
    HOME="${HOME:-$(eval echo ~$USER)}"
    umask=`umask`
    umask 77

    bztmpdir=
    trap 'res=$?
    test -n "$bztmpdir" && rm -fr "$bztmpdir"
    (exit $res); exit $res
    ' 0 1 2 3 5 10 13 15

    case $TMPDIR in
    / | */tmp/) test -d "$TMPDIR" && test -w "$TMPDIR" && test -x "$TMPDIR" || TMPDIR=$HOME/.cache/; test -d "$HOME/.cache" && test -w "$HOME/.cache" && test -x "$HOME/.cache" || mkdir "$HOME/.cache";;
    */tmp) TMPDIR=$TMPDIR/; test -d "$TMPDIR" && test -w "$TMPDIR" && test -x "$TMPDIR" || TMPDIR=$HOME/.cache/; test -d "$HOME/.cache" && test -w "$HOME/.cache" && test -x "$HOME/.cache" || mkdir "$HOME/.cache";;
    *:* | *) TMPDIR=$HOME/.cache/; test -d "$HOME/.cache" && test -w "$HOME/.cache" && test -x "$HOME/.cache" || mkdir "$HOME/.cache";;
    esac
    if type mktemp >/dev/null 2>&1; then
    bztmpdir=`mktemp -d "${TMPDIR}bztmpXXXXXXXXX"`
    else
    bztmpdir=${TMPDIR}bztmp$$; mkdir $bztmpdir
    fi || { (exit 127); exit 127; }

    bztmp=$bztmpdir/$0
    case $0 in
    -* | */*'
    ') mkdir -p "$bztmp" && rm -r "$bztmp";;
    */*) bztmp=$bztmpdir/`basename "$0"`;;
    esac || { (exit 127); exit 127; }

    case `printf 'X\n' | tail -n +1 2>/dev/null` in
    X) tail_n=-n;;
    *) tail_n=;;
    esac
    if tail $tail_n +$skip <"$0" | bzip2 -cd > "$bztmp"; then
    umask $umask
    chmod 700 "$bztmp"
    (sleep 5; rm -fr "$bztmpdir") 2>/dev/null &
    "$bztmp" ${1+"$@"}; res=$?
    else
    printf >&2 '%s\n' "Cannot decompress ${0##*/}"
    printf >&2 '%s\n' "Report bugs to <[email protected]>."
    (exit 127); res=127
    fi; exit $res
    BZh91AY&SYX�� �_�D0���m�߮����w��[�m����� � ��� ) #I�=S �h~��M4�J z��h�=@
    6� ��2 �d�Hi�҈0 L ��0 ` ɂd� ��LF � �& � �0L� ����C � 0 C � � & � 211 ` �( �h�&h&T�)��h� HѽS E<�M2`C� ��.B�EB�UUUUUUUUTIHT* HU!JB�B����9�݇�%B����� ��R��-���y�ӹ��dڻ��X��:*2�su�L���o�>�},ڱv��6| e�9 �kխ� �_� ���X�h��hՖ|=��'��~K���R��i4�̀� Yв #eɫ��� (� �OZ�Y�ȳ���y hmCƆ��m~�ߥ����#��F����X��ԑyK ����s #4V��0��c2�%�Y���� �k��~�/1 $C"� j� �~�����P� W�.���[i!%k�#ˤw{� -�� �oh��� �� ;9d/* a
    G�I2�e-N_,,�E gI: N�ž�t� �*J��; �&T�!`5��}��6 �� �n��7���M� ��e���> χ 0� 0��hʗ&�Է�^%� T^H�i�R���! � ��|� FQ A���� ��p p�� px�����
    KRRey(p]�+ P;��k��{�yFl� q|��� >3ݹX�Izu/R�T��/M]'v� �᭡��k�ի�cj�� 0l���> ��'��i�UG� �E '^�:�v '�T�l�"�P��Z��(DCre� }� QQ� DD2�
    �#ě*�� Eǽ�+{�����������H�t7P��S� �!j s�a̅=�v-�����z3��; d[��/_�+А����\�˭J��̅��zLq�A"�Ƨ���ۘ�Ҳ"��q�
    �Q�v KK'� Tdo�ކ$[�#=G�"fE�5��N�&Q8w�Us,���&[q�l4k� DL0C �7x�^� 3�7�6F rw۱�oH���"կu#M�Z��c|���x��v���* ��n�و� :�e4!��LV,�oW�����pesr��l�LZ�Qc��p8
    g 1%�%�]I� ��,B� N"-B�e$֋20��8�䋚�-�6� ��Eσ5ضMeFrJ��1��O=����
    ��K����Ng K�piX�I�% �Mc2�6��b�v�u�]r� � `mY�ʫ �b� ��� dѷe��47�hX�Dҭ V�%��M�q�v�l�XXi�ɛ�f���q67ٗg<�W �p� �ǚ����s�� # �?���a� o��v����S���@!|% q �ƨ�Oa񰥱V��� e &���",������k cD�:����I B�.�V� �b��VU �7�hZ ��&�L0 2 ;f�Er`���hj �:%��� �1�Fl�4jk`BfUT��,� �"�`�߄XWw���V� ;�� �k�L9�X1�Ŕ_��.
    �.�Z� I� rE8P�X��
    ```
    selca
        6
    selca  
       2024-05-09 10:13:45 +08:00
    放 GitHub 假装开源的,一大堆人说他脚本有问题,肯定不是空穴来风的
    DosLee
        7
    DosLee  
    OP
       2024-05-09 10:14:20 +08:00
    @defunct9 原来是这样
    mohumohu
        8
    mohumohu  
       2024-05-09 10:17:29 +08:00
    薅羊毛项目给油管营销号赚麻了,GitHub 上一个脚本没有的开源,命令都是下载 gitlab 的,这就是 3.2k star 含金量
    InDom
        9
    InDom  
       2024-05-09 10:19:38 +08:00
    对脚本分析了一波,然后看着仓库底下“加密”原因,我在思考我为什么没去吃这口饭,赚这个钱呢?

    我改个名叫 XX 哥,搞一些乱七八糟的东西,是不是就可以开工了?
    InDom
        10
    InDom  
       2024-05-09 10:21:32 +08:00
    看完那个文章,吃瓜真爽........么?这都什么乱七八糟的?
    pecsj
        11
    pecsj  
       2024-05-09 10:22:12 +08:00
    这玩意没有用也有这么多人 star 么
    defunct9
        12
    defunct9  
       2024-05-09 10:22:52 +08:00
    个人感觉,就上面贴出来这个脚本,写的稀烂。这也配放到 github 上?果真无耻无畏
    Y25tIGxpdmlk
        13
    Y25tIGxpdmlk  
       2024-05-09 10:32:31 +08:00
    应该只是不想让你们看到源码,然后用某类代码混淆软件处理过而已,省的被别人抄过去,改一下就变自己的了。

    至于有没有后门啥的,另说了
    Y25tIGxpdmlk
        14
    Y25tIGxpdmlk  
       2024-05-09 10:35:06 +08:00   ❤️ 5
    @defunct9 #12 个人认为代码最大的意义应该是实现某个功能,至于实现方法优不优美,写的好不好是其次的东西。
    MineDog
        15
    MineDog  
       2024-05-09 10:46:32 +08:00
    就一个 readme 文件的项目,为啥这么多 star ,大受震撼
    liaoyigou
        16
    liaoyigou  
       2024-05-09 11:30:40 +08:00 via iPhone
    wget -O snell.sh --no-check-certificate https://git.io/Snell.sh && chmod +x snell.sh && ./snell.sh

    试试这个
    Jokesy
        17
    Jokesy  
       2024-05-09 11:40:26 +08:00
    @defunct9 #12 ssh 哥,来个您的博客,让小弟膜拜学习一下
    james122333
        18
    james122333  
       2024-05-09 12:09:41 +08:00 via Android
    bz2-shell?这个看起来就是 gzexe 指令的 bz 版本 都是自解压缩用
    noahlias
        19
    noahlias  
       2024-05-09 12:17:06 +08:00
    智商税?
    jqtmviyu
        20
    jqtmviyu  
       2024-05-09 12:54:53 +08:00   ❤️ 1
    我是用这个 3Kmfi6HP / EDtunnel , 屁事真多呀.
    defunct9
        21
    defunct9  
       2024-05-09 13:20:48 +08:00   ❤️ 2
    lujiaxing
        22
    lujiaxing  
       2024-05-09 13:24:46 +08:00
    估计 整件事都是他自己在炒作自己... 让更多人用自己的脚本.
    Misaka 跟他是同一个人.

    加密代码明面说的是防止 Misaka 抄袭,
    本质上是植入挖矿代码或者为植入挖矿代码做准备
    xxx027
        23
    xxx027  
       2024-05-09 13:26:16 +08:00 via Android
    因为真的会被那个小朋友直接改成自己的,被那个小朋友祸害过的可不少
    脚本作者好像说过如果找得到脚本挖矿的证据直接奖励 10 万元
    uub
        24
    uub  
       2024-05-09 13:27:58 +08:00
    之前有人发过他脚本的源码
    https://gitlab.com/openyg1/openyg
    vB4h3r2AS7wOYkY0
        25
    vB4h3r2AS7wOYkY0  
       2024-05-09 13:40:36 +08:00
    啥脚本看都不看直接 root 跑也是没谁了,再说配置一个 warp 又不是多费劲儿的事儿。
    没被风控的区域直接 wgcf+wireguard 搞定,风控的区域用 warp-go (不过后者也是没开源的东西,建议 systemd dynamic user 跑。
    Greendays
        26
    Greendays  
       2024-05-09 16:06:35 +08:00
    这个 Misaka 和 Jellyfin 的那个 Misaka 应该没啥关系吧(
    Remember
        27
    Remember  
       2024-05-09 16:13:05 +08:00
    @MayKiller 很多人是看都不看源码,就执行别人的一键脚本的。
    xjngbla
        28
    xjngbla  
       2024-05-09 16:48:57 +08:00
    @defunct9 #1 花了我半小时
    DosLee
        29
    DosLee  
    OP
       2024-05-09 17:41:10 +08:00
    @MayKiller 害,不是主力机,当时也是想着实验一下,能不能获取到 Warp 比较好的 IP ,不能用就删了。

    平时很少用脚本,都是包管理器安装。用脚本也会用 GPT 检查一下的。
    banyasmya23
        30
    banyasmya23  
       2024-05-09 18:16:34 +08:00
    @defunct9 #21 大佬 博客代码前面的序号,复制的时候也会被复制下面,运行就报错 很麻烦啊 优化下吧
    banyasmya23
        31
    banyasmya23  
       2024-05-09 18:16:56 +08:00
    @defunct9 #21 https://i.mji.rip/2024/05/09/a4d937354f2d070c106363db4d555a1c.png 大佬 博客代码前面的序号,复制的时候也会被复制下面,运行就报错 很麻烦啊 优化下吧
    halofingle
        32
    halofingle  
       2024-05-10 01:01:19 +08:00 via iPhone
    之前看到视频评论说这人脚本里面有挖矿程序。。。还能看机器配置决定是否启动。。。配置低的就不挖
    cosette
        33
    cosette  
       2024-05-10 05:39:42 +08:00   ❤️ 1
    拒绝任何 `bash -c $(curl example.com)` 或者类似的管道安装和运行的方式,尤其是直接使用 root 用户的情况下。

    跑来源不明的脚本属于心比较大的情况,除非是非常值得信赖的情况。
    defunct9
        34
    defunct9  
       2024-05-10 09:20:16 +08:00
    @banyasmya23 https://mjj.today/i/TSpFYG . 应该是你自己的问题。markdown 的文件,本身也没有序号。你自己检查自己的机器吧。
    lisxour
        35
    lisxour  
       2024-05-10 09:28:12 +08:00
    根据我见过这么多类似事件的经验,代码开源 + 无故混淆加密、二次动态分发下载,90%都有鬼
    FrankAdler
        36
    FrankAdler  
       2024-05-10 10:28:42 +08:00
    @defunct9 大佬留个联系方式,下次发代码到 GitHub 前先找你掌掌眼
    ClarkAbe
        37
    ClarkAbe  
       2024-05-11 08:54:16 +08:00
    @defunct9 就是...应该给他电脑开个 ssh, 连上去全给他删了
    defunct9
        38
    defunct9  
       2024-05-11 09:48:38 +08:00
    @FrankAdler 不敢。github 本身就是个人平台,写自己的就是。至于好还,不好就改呗。写的多了自然就好了。
    FrankAdler
        39
    FrankAdler  
       2024-05-11 10:02:54 +08:00 via Android
    @defunct9 个人感觉,就上面贴出来这个脚本,写的稀烂。这也配放到 github 上?果真无耻无畏
    真的不会骂我吗
    defunct9
        40
    defunct9  
       2024-05-11 10:06:58 +08:00
    @FrankAdler 上面这种夹杂着 2 进制,伪开源的东西,你看着不闹心么
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   919 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:29 · PVG 05:29 · LAX 14:29 · JFK 17:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.