执行了一个 shell 脚本,被吓了一跳 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
DosLee
V2EX    程序员

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

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

开了台虚拟机,本来是想着解锁一下某视频网站的非自制剧观看权限。查了一下大部分都是推荐用 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  
PRO
   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 _D0mw[m ) #I=S h~M4J zh=@
6 2 dHi0 L 0 ` d LF & 0L C 0 C & 211 ` ( h&h&T)h HS E<M2`C .BEBUUUUUUUUTIHT* HU!JBB9%B R-ydX:*2suLo>},v6| e9 k _ Xhh|='~KRi4 Yв #e ( OZYy hmCm~#FXyK s #4V0c2%Y k~/1 $C" j ~P W.[i!%k#w{ - oh ;9d/* a
GI2e-N_,,E gI: Nt *J; &T!`5}6 n7M e> χ 0 0h&^% T^HiR! | FQ A p p px
KRRey(p]+ P;k{yFl q| >3XIzu/RT/M]'v kcj 0l> 'iUG E '^:v 'Tl"PZ(DCre } QQ DD2
#ě* E+{Ht7PS !j sa=v-z3; d[/_+А\JzLqA""q
Qv KK' Tdo$[#=G"fE5N&Q8wUs,&[ql4k DL0C 7x^ 376F rwoH"u#MZc|xv* n :e4!LV,oWpesrlLZQcp8
g 1%%]I ,B N"-Be$208-6 Eσ5MeFrJ1O=
KNg KpiXI% Mc26bvu]r `mY b de47hXD V%MqvlXXifq67g<W p ǚs # ?a ovS@!|% q OaV e &",k cD:I B.V bVU 7hZ &L0 2 ;fEr`hj :% 1Fl4jk`BfUT, "`XWwV ; kL9X1_.
.Z I rE8PX
```
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     Solana     1269 人在线   最高记录 6679       Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 25ms UTC 23:43 PVG 07:43 LAX 15:43 JFK 18:43
Do have faith in what you're doing.
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86