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

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

  •  
  •   DosLee · 233 天前 · 7712 次点击
    这是一个创建于 233 天前的主题,其中的信息可能已经有所发展或是发生改变。

    开了台虚拟机,本来是想着解锁一下某视频网站的非自制剧观看权限。查了一下大部分都是推荐用 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
    Moyyyyyyyyyyye
        2
    Moyyyyyyyyyyye  
       233 天前
    可能是提供这个服务,但是不想让你修改,类似闭源软件吧
    DosLee
        4
    DosLee  
    OP
       233 天前
    最一开始的脚本内容(因为太长,删除了一部分)

    ```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
       233 天前
    嵌套 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  
       233 天前
    放 GitHub 假装开源的,一大堆人说他脚本有问题,肯定不是空穴来风的
    DosLee
        7
    DosLee  
    OP
       233 天前
    @defunct9 原来是这样
    mohumohu
        8
    mohumohu  
       233 天前
    薅羊毛项目给油管营销号赚麻了,GitHub 上一个脚本没有的开源,命令都是下载 gitlab 的,这就是 3.2k star 含金量
    InDom
        9
    InDom  
       233 天前
    对脚本分析了一波,然后看着仓库底下“加密”原因,我在思考我为什么没去吃这口饭,赚这个钱呢?

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

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

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

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

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

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